Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
モバイルゲームにおけるカオスエンジニアリング実践に向けて
Search
Cygames
December 10, 2018
Technology
6
4.4k
モバイルゲームにおけるカオスエンジニアリング実践に向けて
2018/12/04 Amazon Game Developers Day 2018
Cygames
December 10, 2018
Tweet
Share
More Decks by Cygames
See All by Cygames
最高のアートワークを発信する『Cygames展 Artworks』企画制作事例
cygames
0
50
社内にバーチャルスタッフ!?「スイちゃん」のキャラクターデザインと施策の広げ方の秘訣
cygames
1
130
全高3m超のバハムート像がスマホを通して躍動する! ~『Cygames展 Artworks』ARコンテンツの開発プロセスと実装~
cygames
0
43
最高の資料を目指すために!社内フリーイラスト制作チームの取り組みについて
cygames
1
140
「生きているモーション」を作り出すCygamesのモーションキャプチャー
cygames
0
98
『Cygames展 Artworks』におけるShadowverseデジタルサイネージ制作事例
cygames
0
41
『GRANBLUE FANTASY: Relink』 原作の世界観に没入するステージの絵作り
cygames
0
880
『GRANBLUE FANTASY: Relink』イラストを再現する為のキャラクターモデル制作事例
cygames
0
160
『GRANBLUE FANTASY: Relink』キャラクターの魅力を支えるリグ制作事例
cygames
0
96
Other Decks in Technology
See All in Technology
クラウドサービス事業者におけるOSS
tagomoris
4
1k
ディスプレイ広告(Yahoo!広告・LINE広告)におけるバックエンド開発
lycorptech_jp
PRO
0
320
ESXi で仮想化した ARM 環境で LLM を動作させてみるぞ
unnowataru
0
170
RemoveだらけのPHPUnit 12に備えよう
cocoeyes02
0
270
ウォンテッドリーのデータパイプラインを支える ETL のための analytics, rds-exporter / analytics, rds-exporter for ETL to support Wantedly's data pipeline
unblee
0
120
脳波を用いた嗜好マッチングシステム
hokkey621
0
280
内製化を加速させるlaC活用術
nrinetcom
PRO
2
140
短縮URLをお手軽に導入しよう
nakasho
0
140
AWSではじめる Web APIテスト実践ガイド / A practical guide to testing Web APIs on AWS
yokawasa
7
650
AWSを活用したIoTにおけるセキュリティ対策のご紹介
kwskyk
0
340
PHPで印刷所に入稿できる名札データを作る / Generating Print-Ready Name Tag Data with PHP
tomzoh
0
180
手を動かしてレベルアップしよう!
maruto
0
200
Featured
See All Featured
Designing for humans not robots
tammielis
250
25k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Fireside Chat
paigeccino
34
3.2k
How to Ace a Technical Interview
jacobian
276
23k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.2k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
Producing Creativity
orderedlist
PRO
344
40k
Git: the NoSQL Database
bkeepers
PRO
427
65k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Transcript
© Cygames,Inc.
© Cygames,Inc. Frontend Engineer HTML5, JS,CSS 2013 Backend Engineer PHP,
Mysql, Linux, Shell script…. 2014 2015 Infrastructure Engineer Nginx, Bigquery, Appengine, Python, Go, Kafka 2016 2017 Pagerduty, Chaos engineering 2018 Who am I 株式会社Cygames インフラエンジニア 和田 明久 • Toil削減・自動化 • CI/CDフロー改善 • カオスエンジニアリング • オンコール Lambda function, ECS, Athena
© Cygames,Inc. AGENDA • なぜ導入したか • カオスエンジニアリングとは • カオスエクスペリメント事例 ◦
開発フェーズにおいて ◦ インフラチームにおいて • まとめと今後の展望
© Cygames,Inc. なぜ導入したか 運用タイトルが年々スケール ↓ サービス運用中の障害発生は不可避 ↓ プロアクティブな障害対応
© Cygames,Inc.
© Cygames,Inc. デイリーで50件前後のインシデントやアラート
© Cygames,Inc. 我々が直面した障害例... インパクト TTR 内容 サービス停止 6 hour ELBとWebサーバ間でセッション滞留発生
データ不整合 1 day ログをインサートしている Auroraでデータ不整合が発生した データ不整合 1 day 分散トランザクションのテスト漏れ 一部ユーザ ~ 2min RDS Failover 一部ユーザ ~ 2min VMホスト障害
© Cygames,Inc. 大規模な障害が発生すると • ゲームブランドに対する信頼低下 • ユーザエクスペリエンスの低下 • 機会損失
© Cygames,Inc. データ引用元 https://www.jolt.co.uk/blog/outage-outrage/
© Cygames,Inc. 障害発生を事前対処したい
© Cygames,Inc. カオスエンジニアリング?
“Chaos Engineering is the discipline of experimenting on a distributed
system in order to build confidence in the system’s capability to withstand turbulent conditions in production.” http://principlesofchaos.org/
“Chaos Engineering is the discipline of experimenting on a distributed
system in order to build confidence in the system’s capability to withstand turbulent conditions in production.” http://principlesofchaos.org/ 検証の規律 不安定な状態にも耐えうる
https://www.flickr.com/search/?q=injection&l=4
https://www.flickr.com/search/?license=4&advanced=1&text=firedrill
© Cygames,Inc. Chaos in Practice 定常状態を仮定する 仮説を構築する 故障を発生させる 反証をあげる
© Cygames,Inc. Step1 定常状態を仮定する システムの振舞いを示す指標を用いて定常状態を定義 e.g. CPU Usage < 60%
Connection < 2000 Latency 99th < 5s
© Cygames,Inc. Step 2 仮説を構築する 定常状態が通常と実験グループで継続する仮説を構築 e.g. • EC2 インスタンスが全対比1%停止しても稼働率は99.99%
• CPU Usage 80 % 超過しても平均レイテンシーは 200ms 以内 • RDS で Failover が発生してもロールバックが正常実行
© Cygames,Inc. Step 3 故障を発生させる 実際に起きうるイベントをシステムに付加する e.g. インスタンス 停止 Network
遮断 CPU Usage 100%
© Cygames,Inc. Step 4 反証をあげる 通常と実験グループのシステム出力を振り返り反証をあげる • 反証された場合 ◦ 同様のイベントに対する対策
◦ 構成変更やプログラム修正を行う • 反証されない場合 ◦ さらに故障度を上げても同様の振る舞いになるか
© Cygames,Inc. 定常状態 仮説反証 故障発生 仮説構築 Chaos Loop
© Cygames,Inc. その他 • 文化・書籍・ツールなど https://github.com/dastergon/awesome-chaos-engineering • Chaos Conf 2018
https://www.youtube.com/playlist?list=PLLIx5ktghjqKtZdfDDy uJrlhC-ICfhVAN
© Cygames,Inc. まとめると • ITシステムの障害訓練 • 信頼性・可用性・保守性 の向上 • システムを無秩序に故障させることではない
© Cygames,Inc. カオスエクスペリメント事例
© Cygames,Inc. 実施対象 開発環境もしくはサービス影響のないシステムが対象 • 運用タイトルの本番環境では未実施 • 運用タイトルの開発環境で実施 • ゲームサービス以外で実施
© Cygames,Inc. 実施対象 https://aws.amazon.com/compliance/shared-responsibility-model/
© Cygames,Inc. モニタリング方法 ツール 対象 例 Mackerel Resource CPU・Memory・Disk Usage
NewRelic Processing PHP・Memcached・Mysql 処理時間 ElasticSearch Response AVG/MEDIAN/95th/99th Web Server Response Time
© Cygames,Inc. Mackerel
© Cygames,Inc. New Relic
© Cygames,Inc. Elastic Search Service
© Cygames,Inc. カオスエクスペリメント事例 ~開発フェーズにおいて~
© Cygames,Inc. カオスチーム編成 アドバイザー 1 マネ・サブマネ陣 5 インフラ 2
© Cygames,Inc. 実施方法 • タスクフォース的に招集 • 週1回MTGで反省と今後のアクション決定 • 構成はビジネスサイド以外 •
期間は最長で9ヶ月のもの
© Cygames,Inc. 実験対象のアーキテクチャ • WEB / Cache / Database •
モノリスな構成 • リクエスト数は実験内容に依存
© Cygames,Inc. Internet AWS Cloud
© Cygames,Inc. AWS Cloud Internet cache proxy web
© Cygames,Inc. 故障方法例 ※ https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.FaultInjectionQueries.html コンポーネント イベント EC2 Stop, Reboot
ElastiCache Stop, Reboot ECS Stop Task RDS(Mysql) Reboot, Failover RDS(Aurora) Reboot, Failover, Fault Injection Queries (※) Network Switch Security Group, Network ACL Allow / Deny
© Cygames,Inc. 定常状態 仮説反証 故障発生 仮説構築 Chaos Loop
© Cygames,Inc. 事例1 RDS Failover
© Cygames,Inc. AWS Cloud Internet cache proxy web
© Cygames,Inc. 定常状態 仮説反証 故障発生 仮説構築 Chaos Loop 99th percentile
< 5s 正常に ロールバックされる 反証された RDS Failover
© Cygames,Inc. 事例1 振り返り • 結果 ◦ リクエストはタイムアウト ◦ 部分的にロールバック
◦ 同一性が崩れるパターンが発生 • アクション ◦ テーブルを水平分割 ◦ 同一ユーザのデータは同一DBへ保存 ◦ セッションが滞留するためカーネルパラメーターを調整
© Cygames,Inc. 事例2 ElastiCache Reboot
© Cygames,Inc. AWS Cloud Internet cache proxy web
© Cygames,Inc. 定常状態 仮説反証 故障発生 仮説構築 Chaos Loop 99th percentile
< 5s 起動中のElastiCacheに 切替る 反証された ElastiCache Reboot
© Cygames,Inc. 事例2 ElastiCache Reboot • 結果 ◦ Cache Proxyの状態がサーバごとに異なりキー分散の不整合が発生
• アクション ◦ Cache Proxyの状態が異常なサーバをELBから除外
© Cygames,Inc. 事例3 EC2 上のプロセス停止
© Cygames,Inc. AWS Cloud Internet cache proxy web
© Cygames,Inc. 定常状態 仮説反証 故障発生 仮説構築 Chaos Loop 99th percentile
< 5s Return 200s マスターデータ参照 反証された WEBサーバ上 Cache Process停止
© Cygames,Inc. 事例3 EC2 上のプロセス停止 • 結果 ◦ キャッシュ接続エラーで後続処理に移らなかった ◦
SPOF • アクション ◦ 冗長化 ◦ ALB health_check にてローカルキャッシュの接続性確認する
© Cygames,Inc. 実験はさらに膨大化 • 示した事例はごく一部 • 障害パターンは増加 • 障害対応フローチャートも作成
© Cygames,Inc. Chaos Sheet 数百項目に...
© Cygames,Inc. 障害発生時の対応フローチャート
© Cygames,Inc. 本環境に適用されたこと • シングルポイント冗長化 • カーネルパラメーター最適化 • DB設計変更 •
ALB health check の詳細実装
© Cygames,Inc. 章まとめ • ロジック内・外における脆弱性を認識 • 発生しがちな故障イベントに対する事前対策 • 障害発生時の対応フローを構築
© Cygames,Inc. カオスエクスペリメント事例 ~インフラチームでの事例~
© Cygames,Inc. インフラカオスチーム編成 サブマネ 1 インフラ 1
© Cygames,Inc. インフラチームの領域 • オンプレ運用・監視 • クラウド運用・監視 • オンコール対応 •
ログ収集基盤 • MW・クラウドサービス導入支援 • ...etc
© Cygames,Inc. 実施対象 • サービス影響厳禁 • 手をつけられるところからやろう • ログの解析ツールへのロード処理を ECS化していた
© Cygames,Inc. 事例 ECS Task の停止
© Cygames,Inc. AWS Cloud Instances ECS Containers Elastic Search Service
へのログインポート処理
© Cygames,Inc. 定常状態 仮説反証 故障発生 仮説構築 Chaos Loop Received ≒
Deleted Load Latency < 60s Taskが停止しても ロード処理に無影響 反証されなかった ECS Task 停止
© Cygames,Inc. 事例 ECS Task の停止 • 結果 ◦ SQS
Deleted と Received は変化なし・遅延も数秒以下 ◦ Task 数が多い可能性示唆 • アクション ◦ 故障率を上げても同様の結果になるか確認する
© Cygames,Inc. 章まとめ • できるところからやっている • 仮説通りのポジティブな結果だと安心 • 指標化が不十分な箇所が明確化
© Cygames,Inc. まとめと今後の展望
© Cygames,Inc. 導入によるメリット • 信頼性・可用性・保守性の向上 • SPOF・脆弱性認知 • 障害発生を前提としたコード実装
© Cygames,Inc. AWSだから手軽にできた • インスタンス起動・停止 • NW遮断 • DB Failover
• ECS task 起動・停止
© Cygames,Inc. プロダクション環境で実践するための課題 • プロダクトチームとの交渉 • モノリスからマイクロサービスへ • 影響範囲の最小化 •
自動化
© Cygames,Inc. 今後 • Failure Fastな設計推進 • マイクロサービス化推進 • カオスエンジニアリング推進
© Cygames,Inc. We are hiring chaos engineer !!
Thank you!