SlideShare a Scribd company logo
1 of 71
Download to read offline
高負荷に耐えうる
WebApplication Server
の作り方
GMOインターネット株式会社
次世代システム研究室
Y. I.
1/71
Y. I.
GMO インターネット株式会社
次世代システム研究室
アシスタントマネージャー
シニアアーキテクト
Engineer歴 20年
好き DB / Elixir-lang
自己紹介
2
Goal
高負荷に耐えうる
WebApplication の Architecture を設計する際に
・どこで対策するか
・どのように構築するか
をご紹介します。
Programing codeではなくinfraよりの説明になりま
す。高負荷対策は多数ありますが一例とおぼえてお
いていただくことをGoalとしています。
3
section 0
対象とするWebApplicationの説明(前提)
section 1
どういった案があるか説明(抽象的)
section 2
設定の説明(具体的)
pages 71.
Agenda
4
Section 0
対象とするWebApplicationの説明(前提)
5
あるスマートフォン向けゲームサーバーにて行った負荷対
策を元に説明します
・[OS] CentOS7
・[WEBサーバー] NGINX
・[APIサーバー] NGINX + PHP-FPM
・[CACHE] Memcached, Redis
・[DB] MySQL(MariaDB)
ゲームクライアントとJSON APIおよびHTMLや画像/動画
をやり取りする構成です
対象とするWebApplication
6
全体構成図
7
LB
API
CACHE
memcached
DB
WEB ・・・
master
・・
CACHE
Redis
slave
s/m
slave backup
s/m
slave backup
s/m
slave backup
s/m
slave backup
UserDB01 UserDB02 LogDB02LogDB01
MasterDB01
全体構成図 ~改善ポイント~
8
LB
API
CACHE
memcached
DB
WEB ・・・
master
・・
CACHE
Redis
slave
s/m
slave backup
s/m
slave backup
s/m
slave backup
s/m
slave backup
UserDB01 UserDB02 LogDB02LogDB01
MasterDB01
サーバー
振り分け設定
Scaleout
レプリケーション
Table Partitioning
垂直分割
水平分割
CacheによるDB
アクセス削減
Scaleout
Replication
Ranking
Section 1
どういった案があるか説明(抽象的)
9
◆ scaleup (1台の性能を上げる)
性能が高いサーバーハードウエアを利用して性能
を上げる
◆ scaleout(台数を増やす)
サーバーを増やして合計の処理性能を上げる
◆ 他
programing codeの最適化
OS / Middleware のconfig最適化
基本 ~~
10
WEBサーバー
scaleup
scaleout
キャッシュ付きreverse proxy
CDN
11
「高性能サーバーを利用する」
静的HTMLや画像や動画ファイルなどContentsを配信するWEBサー
バーにおいて、scaleup時に重要視するのは、
CPU clock/core数です
Memoryはswapしない程度にあれば大丈夫です
CPU core数が多いと一度に複数のrequestに対応できるので有利で
す
WEBサーバー ~scaleup~
12
「サーバーを複数台用意して負荷分散」
LoadBalancerにて接続先WEBサーバーを振り分け
ます
サーバー台数が増えた分、合計の
CPU/Memory/Ephemeral Port等が増えるので同時
に対応できるrequest数が増えます
WEBサーバー ~scaleout~
13
「Nginxのキャッシュ付きリバースプロキシーでキャッ
シュしたContentsを返却する」
response内容をキャッシュしておいて返却します
都度requestを処理してresponse内容をつくるよりも
キャッシュからレスポンスするので高速です
※本PJでは次で紹介するCDNを使うので Nginxでの
キャッシュは行っていません
WEBサーバー ~Contents Cached Reverse Proxy~
14
外部の有料サービスである
CDN(Contents Delivery Network)
を利用する
・CDNを簡単に説明すると、クライアントからのアクセスを変わり
に受けてくれるキャッシュサービスです
・全世界に配信サーバーを持っていてクライアントから一番近い
サーバーでContentsキャッシュをレスポンスしてくれます
・DDoS攻撃への対応も可能
・Akamai、AWS CloudFront が有名
こちらは有料なだけあって非常に効果が高い
おすすめ
WEBサーバー ~CDN~
15
APIサーバー
scaleup
scaleout
16
「高性能サーバーを利用する」
※WEBサーバーと同様です
APIサーバーはProgramを動作させるので
CPUとMemoryを重視してサーバーを構成します
大量のrequestを受けるWebApplicationの場合、
Scaleupだけだと厳しいです
API ~Scaleup~
17
API
server
API
1
API 1
cpu/mem
up!
「サーバーを複数台用意して負荷分散」
大量のrequestを受けつつprogramからCacheサー
バーやDBへアクセスするので、port枯渇が起きや
すいので APIサーバーのScaleoutは重要です
API ~Scaleout~
18
API
servers
API
1
API
2
API
3
API
...
API
27
◆同じユーザー/sessionが同じAPIサーバーに振り
分けられるか保証されない
=>どのサーバーに振り分けられても問題ない作りに
することが大事
・他
Sticky Sessionを使うとLoadBalancerがcookieを元に同一サー
バーへ振り分けてくれますが、クラウドサービスによってSticky
Session の Cookie Expire 時間が短いなど問題になることもある
ので可能な限りどのAPIサーバーに振り分けられても問題がない
ように設計したほうが良い
API ~Scaleout/気をつける事~
19
◆Ephemeral port(自由に使える短命port) の枯
渇
Linuxはportを65535番まで持っていて、通信などで自由に使える
portは一般的に 32768 ~ 61000 の 28232個のportを利用可能
です
Ephemeral portが全て使われてしまうと使えるportがないために
新しい通信を行うことができなくなります
=>同時通信数をあげる必要がある場合は kernelパラメータにて
Ephemeral portを増やすことが可能です
API ~Scaleout/気をつける事~
20
◆APIサーバーのScaleout最大数 は DBの同時接
続数が限界になる
APIサーバーが多数のrequestを受けられてもDB同時接続数を超え
た際にDB接続待ちが発生してしまう
DBサーバーの限界を超えたAPIサーバー台数を用意しても無駄に
なってしまう
=>DBのスループットを上げることが大事
=>遅いQueryを投げてしまうとDBが詰まりやすくなるのでProgram
で実行するQueryの最適化も大事
API ~scaleout/気をつける事~
21
Cacheサーバー
22
「Query結果をキャッシュ」
DBへの問い合わせを減らすことが出来て、memory
からキャッシュ情報を取得できるので高速に処理で
きる
キャッシュ方法
・memcached
・redis
・file cache
・etc
Cache ~~
23
お手軽でおすすめ
・メモリにキャッシュされ高速にキャッシュ情報を参照可能
・情報の永続化(保存)はできない
・サーバーが故障してもキャッシュなのでサービス継続可能
・memcachedのscaleoutは簡単
クライアント側のmemcahced libraryで勝手に接続先サーバーを決
めてくれる
登録するkey毎にハッシュ値を求めてserver数の剰余(mod)でサー
バを決定
Cache ~memcached~
24
・memoryの不足
memcachedはmemoryにキャッシュするので
memory量を超えて保存できない
・Ephemeral portの枯渇
memcachedへの通信は都度TCPセッションがはら
れるのでportの枯渇が起きやすい
=>memcachedサーバーを多めに用意する
 3台だと接続エラーが出たため9台へ増やした
Cache ~memcached/気をつける事~
25
高機能でおすすめ
・メモリにキャッシュされ高速にキャッシュ情報を参照可能
・情報の永続化(保存)ができる
・Ranking計算が得意(SortedSet)
・master/slave構成やクラスターを組める
・pub/subもできる
・hyperloglogアルゴリズムによりデータのcardinalityを高速に推定
できる(ユニークユーザー数など)
・シングルスレッドモデルなので排他制御を考えなくてよい
=>本PJではランキングに利用
Cache ~Redis~
26
・サーバーのmemory以上にキャッシュは出来ない
Storageに永続化可能でもmemory以上にキャッ
シュすることはできないのでMemory管理が重要
Cache ~Redis/気をつける事~
27
DBサーバー
28
◆DBサーバーを分ける(scaleout)
・Replication(read用DBを増やして負荷分散)
・Vertical Sharding(機能毎にDBを分割)
・Horizontal Sharding(データ毎にDBを分割)
◆データ保存領域を分ける
・table partitioning
◆設定
DB設定の最適化
OS設定の最適化
DB ~負荷対策案~
29
登録を担当するMasterDBと参照を担当する
SlaveDBに分けてwriteとreadの負荷分散を行う
MasterDBへの登録がほぼリアルタイムでSlaveDB
へコピーされる(完全に同時ではない)
MySQL(MariaDB), PostgreSQLなど主要なDBは
Replicationに対応している
DB ~Replication~
30
◆レプリケーション例
masterDBとslaveDB
一番台数が少ないシンプルな形
DB ~Replication~
master
slave
31
Replication向き
◆レプリケーション例
3レイヤーのレプリケーション構成
masterDB > slave & masterDB > slave
DB ~Replication~
master
slaveslave/m
aster
slave backup
32
Replication向きSlaveDBがMasterDB
を兼ねることも可能
DBを機能毎に分けて使う(垂直分割)
ユーザー情報をA-DBに、ログ情報をB-DBに保存
するなど
ユーザー情報の参照ならばA-DBへ接続するよう
にプログラムで開発して実現する
機能毎なのでシンプル
デメリットは1つの機能へのアクセスが多い場合に
分割出来ない
DB ~Vertical sharding~
33
Programで接続先DBを使い分ける
・User系テーブルならばUserDBへ
・Log系テーブルならばLogDBへ
◆垂直分割例
機能毎にDBを分割
・User系DB
・Log系DB
DB ~Vertical sharding~
slave/m
aster
slave backup
34
User系DB
slave/m
aster
slave backup
Log系DB
API PHP-FPM
DBをデータ毎に分けて使い分ける(水平分割)
ユーザーIDの剰余(mod)や日付期間等によって登
録するDBサーバーをわける
プログラムで計算して接続先DBを使い分ける
ユーザー情報などデータがルールによって保存され
ているDBが変わってしまい開発や運用が大変
メリットは論理的にいくつでも分割可能
DB ~Horizontal sharding~
35
◆データ毎の水平分割例
[ルール] user_id の 偶数(even) / 奇数(odd) などで分ける
DB ~Horizontal sharding~
slave/m
aster
slave backup
36
user_id even
slave/m
aster
slave backup
user_id odd
API PHP-FPM
Programで接続先DB
を使い分ける
◆本PJでの水平分割例
本PJではDB Serverを2セット、DB schemaを8分割しています
[ルール] user_id % 8 で8分割(剰余算 mod)
DB負荷が上がったら最大8台のDB Serverへ分割可能です
※mod 128にすれば128台へ分割可能ですが管理が大変なのでほどほどに...
DB ~Horizontal sharding/本PJ~
slave/m
aster
slave backup
37
db
00,02,04,06
を保存 slave/m
aster
slave backup
db
01,03,05,07
を保存
API PHP-FPM
Programでルールに合わせて接続先
DBを使い分ける
mod 0,2,4,6ならば server1mへ
mod 1,3,5,7ならば server2mへ
00 02
04 06
00 02
04 06
01 03
05 07
01 03
05 07
[db server1m]
[db server1s] [db server2s]
[db server2m]
Table毎に保存するFileをわける
1つのTableの保存領域をルールを決めて複数にわけることで参照
時に目的のデータを探す(Seek)時間が短くなる
Table A
100,000,000(1 hundred million) records
 ↓
Table A[partition]
1,000,000(1 million) × 100[partition]
=>ルールに沿った検索だと 1partitionのみ参照すれば良い!
MySQLではルールとしてPrimary Keyにpartition rule columnを含
める必要がある
DB ~table partitioning~
38
CREATE TABLE文
CREATE TABLE `log_training`(
`id` bigint unsigned auto_increment NOT NULL COMMENT '管理用ID'
,`user_id` int unsigned NOT NULL COMMENT 'ユーザーID'
,`mst_training_id` int unsigned NOT NULL COMMENT '特訓ID'
,`type` int unsigned NOT NULL COMMENT '種別(0:消費、1:付与、2:売却)'
,`amount` int NOT NULL COMMENT '増減量'
,`count` int unsigned NOT NULL COMMENT '個数'
,`created` datetime NOT NULL COMMENT '登録日時'
,PRIMARY KEY(`id`, `user_id`)
,KEY log_training_idx1(`user_id`)
,KEY log_training_idx2(`mst_training_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='特訓ログ'
PARTITION BY HASH(MOD(`user_id`, 100)) PARTITIONS 100;
※ user_idを100で割った余りでpartition100個を入れ分けている
※ 主キーにpartition ルールで使っているuser_idカラムを含めている
DB ~table partitioning~
39
◆ Table partitioningのイメージ図
クエリのWHERE句にuser_idを指定して検索する
と該当の領域のみSeekする
[ルール] user_id % 100
・mod 0 -> 00の領域へ保存
・mod 1 -> 01の領域へ保存
・mod 99-> 99の領域へ保存
Table log_training
DB ~table partitioning~
40
1つのTable
保存領域がわ
かれている
00
X
[Table log_training]
01 03 04 05 06 99
保存領域
DBは設定できるパラメータが多数あり、要件に合わせて設定を変更
する必要があります
(具体的な設定は section 2 にて)
DB ~設定~
41
Linux Kernel パラメータの変更
・Memory
・OpenできるFile Descripterを増やす
・起動できる Process 数を増やす
・Disk設定
・Network設定
・Ephemeral port を増やす
などの設定を行います
(具体的な設定は section 2 にて)
Linux 設定
42
Section 2
設定の説明(具体的)
43
WEB/APIサーバー
LoadBalancer
Nginx
php-fpm
44
LoadBalancer
LoadBalancerでアクセスサーバーを振り分ける
Global IP/port と振り分け先のサーバーIP/portを登録するGlobalIP
へのrequestが振り分け先サーバーどれか1台に渡される
(例)GMOアプリクラウドでの設定方法
45
LoadBalancer
(例)GMOアプリクラウドでの設定方法 / 振り分けサーバー2台
46
Nginx ~説明~
Nginxは http daemon であり Non blocking I/O と
async I/O により大量のアクセスに対応することが
可能
URLによる L7 Load balancing が可能
LuaスクリプトやC言語で独自の判定処理を実装出
来て複雑な処理も可能
47
Nginx ~conf~
/etc/nginx.conf の重要パラメータ
worker_processes
 nginxのプロセスをいくつ起動するか
worker_connections
 worker1つあたりの最大接続数
multi_accept on
 requestを同時に受けられるようにする
use epoll
 requestの状態変化をkernelに任せて次の処理を
行う(Linux システムコール) 48
WebサーバーでPHPを動作させるDaemon
PHPのFastCGI実装の一つ
FPM (FastCGI Process Manager)
FastCGIとは
requet毎に生成破棄されるCGIプロセスを保持するようにして高
速に再利用できるようにした仕組み
php-fpm ~説明~
49
重要な設定
pm.max_children
 php-fmpの最大worker数, この値が一番大事!
 server memoryが許すまで大きめの値を設定したい
 下記コマンドで消費メモリを測定
 ps aux | grep php-fpm | awk '{sum += $6} END {print sum}'
pm.start_servers
 起動時に作成するworker数
pm.min_spare_servers
 維持する最小worker数
pm.process_idle_timeout
 workerを停止するまでのidle時間min_spare_servers数
php-fpm ~php-fpm.conf~
50
ログの確認が重要
負荷テストを行うとエラーログにmax_childrenが足りないなど情
報が出ていることがある
忘れずに確認しよう!
php-fpm ~php-fpm.conf~
51
Cacheサーバー
memcached
Redis
52
Cache ~memcached~
/etc/sysconfig/memcached 重要なパラメータ
MAXCONN = 65535
 最大接続数, Ephemeral port以上に設定
CACHESIZE = 3000 (MB)
 利用可能物理Memory以内で設定
53
Cache ~memcached~
「気をつける事」
・memcachedサーバーは負荷テストを行うとport枯渇により接続エ
ラーになりやすい
=>サーバー台数を多めに用意するのがおすすめ
・memcachedサーバーへのTCP接続が高負荷な状況ではスルー
プット低下の要因になることがある
=>固定値のキャッシュはAPIサーバーlocalに構築したmemcahced
にCacheするのがおすすめ
※本PJではプログラムで都度値が変わるCacheをCacheサーバー
へ、table meta情報や値が変わらないmaster情報をlocalhostへ
キャッシュしている
54
重要なパラメータ
maxclients 50000
 最大接続数
maxmemory 14gb
 最大Memoryサイズ
多数のパラメータがあるが上記は最低限サーバーリソースに合
わせて設定する必要がある
Cache ~Redis~
55
◆ Replication構成は可能な限り3台以上の構成にすることをおす
すめします
1台余剰のSlaveDBがあると
・リアルタイムでDBを参照できる
・エンドユーザーに影響せずに重い集計クエリを実行できる
・DBへの書き込みを止めてBackupを取得できる
・MasterDBが壊れた際の予備にできる
などが可能になります
(1)masterDB(エンドユーザー向け)
(2)slaveDB(エンドユーザー向け)
(3)slaveDB(社内向け / KPI参照 / Backupを取得 / 故障時の代替サーバー)
DB ~気をつける事 1/2~
56
◆ Backupは mysql dir毎コピーを取る方法がおすす
め
・tarコマンド等で /var/lib/mysql 毎バックアップする
・/var/lib/mysql/master.infoファイルにreplication設定やbinlog
positionが記入されているため、masterDBにbinlogファイルが残っ
ていればバックアップから最新状態まで復旧可能
※注意! 
master.infoがあるとmysql起動時にreplicationを開始してしまうの
でmaster.infoを移動しておくか確認すること
(例)バックアップを元に別サーバーのmysqlを復旧するときなど起動
と同時にバックアップサーバー設定のreplicationを開始しては問題
がある状況など
DB ~気をつける事 2/2~
57
本PJの要件において効果が高かったパラメータ
※システム要件によって効果的なパラメータは異なるためシステム毎に要検討
負荷テストにおいて設定した値
max_connections: 10000
 connection数上限エラーが発生したためMemoryが許す範囲で高く持った
 -> connectionエラーが減った
transaction-isolation: READ-COMMITTED
 lock待ちになることが多くあったため変更 ->lock待ちが減った
 ※本PJの要件的にこの分離レベルで問題がないため設定
innodb_buffer_pool_instances: 16
 ->若干qpsが向上した
DB ~my.cnf / 効果あり 1/2~
58
innodb_lock_wait_timeout: 5
 lock待ちが長すぎてconnection上限エラーが発生しやすかったので変更
 ->5sec以上のlock waitは失敗として終了させて全体が詰まることを減少
innodb_io_capacity_max: 30000
innodb_io_capacity: 20000
 Fusion ioMemory向け設定
 ※io_capacityを100000など高い値にしたところ2回目以降の高負荷時にqpsが50%ほど
下がる減少が発生した
innodb_buffer_pool_size: 64G
 conneciton毎に必要とするメモリなど他使用メモリを引いた残りのメモリの80%で設定
 ->DB serverはswapを発生させてはならない
innodb_flush_method: O_DIRECT
 osのpage cacheを使わずに直接writeする
DB ~my.cnf / 効果あり 2/2~
59
本PJでのmy.cnf設定(Ansible template)
character_set_server: utf8mb4
max_connections: 10000
max_connect_errors: 50
transaction-isolation: READ-COMMITTED
# innodb
innodb_buffer_pool_size: 64G
innodb_buffer_pool_instances: 16
innodb_flush_method: O_DIRECT
innodb_flush_log_at_trx_commit: 1
innodb_file_per_table: 1
innodb_data_file_path: ibdata1:10M:autoextend
innodb_file_format: Barracuda
open_files_limit: 163840
innodb_open_files: 128000
DB ~my.cnf 1/3~
60
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size: 2G
innodb_log_buffer_size: 64M
innodb_support_xa: 1
innodb_lock_wait_timeout: 5
# io threads 並列化可能な状況ならば max64 以内で設定
innodb_write_io_threads: 16
innodb_read_io_threads: 16
innodb_thread_concurrency: 0
# fusion-io/SSD
innodb_io_capacity_max: 30000
innodb_io_capacity: 20000
# memory
sort_buffer_size: 2M
join_buffer_size: 2M
read_buffer_size: 1M
max_allowed_packet: 4M
DB ~my.cnf 2/3~
61
# replication
server_id: "{{ ansible_all_ipv4_addresses[0].split('.')[3] }}"  <-server ip 4octetを利用
log_slave_updates: ON
# binlog
log_bin: mysql-bin
binlog_format: MIXED
expire_logs_days: 90
max_binlog_size: 500MB
DB ~my.cnf 3/3~
62
Linux Kernel
Parameter
63
Kernel設定の変更によりServer自体の処理性能
が大きくあがります
DB Server や API Server など要件に合わせて設
定を調整することが大切です
※次ページから具体的な設定を紹介します
Kernel設定 ~~
64
重要な Linux kernel設定
net.ipv4.ip_local_port_range=10000 65535
 Ephemeral portを設定、上記だとdefault 28000のところを55000使えるようになる
net.core.somaxconn=65535
 TCP接続数 最大Port数に設定するのがおすすめ
net.ipv4.tcp_fin_timeout=5
 TCPセッションがFIN-WAIT2からTIME_WAITへ変化する時間
net.ipv4.tcp_tw_reuse=1
 TIME_WAIT状態のportの再利用を行う(接続先IP/portが同じサーバーの場合に再
利用可能)
=>上記設定で同時通信数の最大化やport枯渇対策が可能
Kernel設定 ~/etc/sysctl.conf 1/3~
65
fs.file-max=10000000
 OS全体でOpenできるfile数
kernel.threads-max=1000000
 OS全体で起動できるthread数
vm.swappiness=0
 Swap処理を積極的に行うどうか0=可能な限り物理メモリ枯渇するまでswapしない
kernel.shmmax=68719476736
kernel.shmall=4294967296
 共通メモリー設定 
Kernel設定 ~/etc/sysctl.conf 2/3~
66
net.core.netdev_max_backlog=10240
 パケット受信時にキューに繋ぐことができるパケットの最大数
net.ipv4.tcp_max_syn_backlog=4096
 ソケット当たりのSYNを受け付けてACKを受け取っていない状態のコネクションの保持可
能数
net.ipv4.tcp_keepalive_time=65
net.ipv4.tcp_keepalive_probes=4
net.ipv4.tcp_keepalive_intvl=5
 tcp接続維持設定、65sec維持したあと5sec毎に4回確認して応答がなければTCP接続を
切断する
Kernel設定 ~/etc/sysctl.conf 3/3~
67
/etc/security/limits.conf にos user毎にopen可能なfile
descripterや起動できる process数を設定
設定値をあげることで Too many open files エラーが発生しにくくな
る
(例) os user u の file descripterとprocess数の上限を変更
u soft nofile 65535
u hard nofile 65535
u soft nproc 1006500
u hard nproc 1006500
Kernel設定 ~limits.conf~
68
systemdはprocess起動が柔軟に行える
processがOpenできるFile数や起動できるprocess数を動的に変
更可能
大量のfile descripterを必要とするDBサーバー等では上げておく必
要がある
(例)
/etc/systemd/system/mariadb.service.d/XXXX.conf
[Service]
LimitNOFILE=1006500
LimitNPROC=1006500
 ※上限値1006500まで指定しておくのがおすすめ
Kernel設定 ~systemd~
69
tunedはcentos7から導入された選択されたプロファイルに従ってシ
ステム設定を静的および動的にチューニングするデーモン
tuned-admコマンドで設定を変更可能
 tuned-adm profile pj
独自のtuned profileを作ることが可能
/usr/lib/tuned/pj/tuned.conf
tuned
[main]
include= throughput-performance
[vm]
transparent_hugepages=never
vm.swappiness=0
本PJでは throughput-performance profileを継承して transparent_hupageのキャンセル
や可能なかぎりスワップしない設定を追加しています
Kernel設定 ~tuned~
70
以上になります
ご清聴ありがとうございました
終わり
71

More Related Content

What's hot

[Postgre sql9.4新機能]レプリケーション・スロットの活用
[Postgre sql9.4新機能]レプリケーション・スロットの活用[Postgre sql9.4新機能]レプリケーション・スロットの活用
[Postgre sql9.4新機能]レプリケーション・スロットの活用Kosuke Kida
 
マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法Takuya ASADA
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)Takanori Sejima
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~NTT DATA OSS Professional Services
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案樽八 仲川
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング佑哉 廣岡
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現gree_tech
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようShohei Okada
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーToru Makabe
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはJun-ichi Sakamoto
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~gree_tech
 

What's hot (20)

[Postgre sql9.4新機能]レプリケーション・スロットの活用
[Postgre sql9.4新機能]レプリケーション・スロットの活用[Postgre sql9.4新機能]レプリケーション・スロットの活用
[Postgre sql9.4新機能]レプリケーション・スロットの活用
 
マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
 
mTCP使ってみた
mTCP使ってみたmTCP使ってみた
mTCP使ってみた
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
Apache NiFi の紹介 #streamctjp
Apache NiFi の紹介  #streamctjpApache NiFi の紹介  #streamctjp
Apache NiFi の紹介 #streamctjp
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~
 

Similar to 高負荷に耐えうるWeb application serverの作り方

高負荷に耐えうるWebApplication Serverの作り方
高負荷に耐えうるWebApplication Serverの作り方高負荷に耐えうるWebApplication Serverの作り方
高負荷に耐えうるWebApplication Serverの作り方GMO-Z.com Vietnam Lab Center
 
LEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 APILEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 APIAkira Hatsune
 
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)Koichiro Matsuoka
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1Makoto Haruyama
 
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)Tomokazu Kizawa
 
Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2Makoto Haruyama
 
Hyper-V エンタープライズ設計の現実解:2015 年版
Hyper-V エンタープライズ設計の現実解:2015 年版Hyper-V エンタープライズ設計の現実解:2015 年版
Hyper-V エンタープライズ設計の現実解:2015 年版Daichi Ogawa
 
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組みモバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組みMorioImai
 
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法LINE Corporation
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
Git超入門(ハンズオン).pdf
Git超入門(ハンズオン).pdfGit超入門(ハンズオン).pdf
Git超入門(ハンズオン).pdf憲昭 村田
 
【IMJ】デジタルマーケティングを加速させるヒントがここに imj jelly cms 事例活用セミナー
【IMJ】デジタルマーケティングを加速させるヒントがここに imj jelly cms 事例活用セミナー【IMJ】デジタルマーケティングを加速させるヒントがここに imj jelly cms 事例活用セミナー
【IMJ】デジタルマーケティングを加速させるヒントがここに imj jelly cms 事例活用セミナーIMJ Corporation
 
Ec cubeの基礎からcms連携まで
Ec cubeの基礎からcms連携までEc cubeの基礎からcms連携まで
Ec cubeの基礎からcms連携までMakoto Nishimura
 
Smart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless DesignSmart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless DesignRyuji TAKEHARA
 
システムエンジニア勉強会『入門編』
システムエンジニア勉強会『入門編』システムエンジニア勉強会『入門編』
システムエンジニア勉強会『入門編』Nobuhito Ikeda
 
[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太
[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太
[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太Insight Technology, Inc.
 
Cuto紹介資料
Cuto紹介資料Cuto紹介資料
Cuto紹介資料UNIRITA
 
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発lalha
 

Similar to 高負荷に耐えうるWeb application serverの作り方 (20)

高負荷に耐えうるWebApplication Serverの作り方
高負荷に耐えうるWebApplication Serverの作り方高負荷に耐えうるWebApplication Serverの作り方
高負荷に耐えうるWebApplication Serverの作り方
 
LEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 APILEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 API
 
2013 Ignite UI 最新情報 in 岡山
2013 Ignite UI 最新情報 in 岡山2013 Ignite UI 最新情報 in 岡山
2013 Ignite UI 最新情報 in 岡山
 
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
 
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
 
Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2
 
Hyper-V エンタープライズ設計の現実解:2015 年版
Hyper-V エンタープライズ設計の現実解:2015 年版Hyper-V エンタープライズ設計の現実解:2015 年版
Hyper-V エンタープライズ設計の現実解:2015 年版
 
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組みモバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
 
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
Git超入門(ハンズオン).pdf
Git超入門(ハンズオン).pdfGit超入門(ハンズオン).pdf
Git超入門(ハンズオン).pdf
 
【IMJ】デジタルマーケティングを加速させるヒントがここに imj jelly cms 事例活用セミナー
【IMJ】デジタルマーケティングを加速させるヒントがここに imj jelly cms 事例活用セミナー【IMJ】デジタルマーケティングを加速させるヒントがここに imj jelly cms 事例活用セミナー
【IMJ】デジタルマーケティングを加速させるヒントがここに imj jelly cms 事例活用セミナー
 
Ec cubeの基礎からcms連携まで
Ec cubeの基礎からcms連携までEc cubeの基礎からcms連携まで
Ec cubeの基礎からcms連携まで
 
Smart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless DesignSmart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless Design
 
システムエンジニア勉強会『入門編』
システムエンジニア勉強会『入門編』システムエンジニア勉強会『入門編』
システムエンジニア勉強会『入門編』
 
[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太
[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太
[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太
 
Cuto紹介資料
Cuto紹介資料Cuto紹介資料
Cuto紹介資料
 
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
 
G0042 h
G0042 hG0042 h
G0042 h
 

高負荷に耐えうるWeb application serverの作り方