1. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
DeNA TechCon 2016
DeNAインフラの今と
これから
- 今編 -
Jan 29, 2016
Tomoya KABE
Gr. 2, IT Platform Dept, System Head Office
DeNA Co., Ltd.
5. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
DeNAインフラ体制
5
IT基盤部
1G 2G Network
Mobile
Service
Cura8on
YDB
HealthCare
EC
IPPF
Mobage
PF
OpenPF
Game
AutoMo8ve
Network
インフラを担当する部署は1箇所
全事業部横断で担当し知見を共有している
infosys
6. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
サーバ概要
⁃ サーバ数: 4000+
⁃ DRしているので実際の必要台数は1/2
⁃ AWSも一部サービスで利用
⁃ コモディティサーバを利用
⁃ ネットワークトラフィック
⁃ 13Gbps
⁃ コストを意識した運用
⁃ サーバ1台あたりの性能を可能な限り使い切る
6
9. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
mbgaclone
⁃ 利用イメージ
⁃ server01のディスク内容をserver02にコピー & RAIDを1+0に設定
⁃ コピーした後でコピー前∼コピー後にdeployされたコードを改めてdeploy
して本番に投入するだけ
9
#
mbgaclone
-‐from
server01
-‐to
server02
-‐raid
10
10. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
chef
⁃ chefの導入自体は最早目新しくないが
⁃ 数多くのサービスに
⁃ 既存の運用ツール・体制を踏襲しつつ
利用するための工夫をしている
⁃ Base Cookbook + Application Cookbook + Environment Cookbook構成
⁃ nodeごとの設定はサーバ情報DB(既存)から自動で生成
10
The
Chef™
Mark
and
Chef
Logo
are
either
registered
trademarks/service
marks
or
trademarks/
service
marks
of
Chef,
in
the
United
States
and
other
countries
and
are
used
with
Chef
Inc's
permission.
We
are
not
affiliated
with,
endorsed
or
sponsored
by
Chef
Inc.
12. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
キャパシティ管理
サーバからの各種情報をfluentdで集める
• サーバの各種メトリクス(CPU etc.)
• リクエスト数
• レスポンスサイズ
Elasticsearchに送る→kibanaで見る
12
Elas8csearch
is
a
trademark
of
Elas8csearch
BV,
registered
in
the
U.S.
and
in
other
countries.
Kibana
is
a
trademark
of
Elas8csearch
BV,
registered
in
the
U.S.
and
in
other
countries.
外側:ゲームID
内側:API名
13. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
キャパシティ管理とは別に…
⁃ これと別にESにクエリ投げて日時のレポートを送信
⁃ エラー数・種類も集計しているのでトラブルシューティングも楽になる
13
ある1週間の時系列エラー数
(PVに応じたエラー数)
15. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
障害対応/プロファイリングツール
がんばっても障害は起きる
起きたときの原因調査のためのツールを えている
⁃ Perl用
⁃ perlstack
⁃ gdbperl
⁃ phs
⁃ NYTProf
⁃ Ruby用
⁃ gdbruby
⁃ stackprof
15
16. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Sample app
#!perl
sub main_proc {
my ($int) = @_;
print `date`;
sleep $int;
}
sub mainloop {
while (1) {
main_proc(1, "dummy_argument");
}
}
mainloop();
16