Upgrade to Pro — share decks privately, control downloads, hide ads and more …

モバイルゲームにおけるカオスエンジニアリング実践に向けて

Cygames
December 10, 2018

 モバイルゲームにおけるカオスエンジニアリング実践に向けて

2018/12/04 Amazon Game Developers Day 2018

Cygames

December 10, 2018
Tweet

More Decks by Cygames

Other Decks in Technology

Transcript

  1. © 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
  2. © Cygames,Inc. AGENDA • なぜ導入したか • カオスエンジニアリングとは • カオスエクスペリメント事例 ◦

    開発フェーズにおいて ◦ インフラチームにおいて • まとめと今後の展望
  3. © Cygames,Inc. 我々が直面した障害例... インパクト TTR 内容 サービス停止 6 hour ELBとWebサーバ間でセッション滞留発生

    データ不整合 1 day ログをインサートしている Auroraでデータ不整合が発生した データ不整合 1 day 分散トランザクションのテスト漏れ 一部ユーザ ~ 2min RDS Failover 一部ユーザ ~ 2min VMホスト障害
  4. “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/
  5. “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/ 検証の規律 不安定な状態にも耐えうる
  6. © Cygames,Inc. Step 2 仮説を構築する 定常状態が通常と実験グループで継続する仮説を構築 e.g. • EC2 インスタンスが全対比1%停止しても稼働率は99.99%

    • CPU Usage 80 % 超過しても平均レイテンシーは 200ms 以内 • RDS で Failover が発生してもロールバックが正常実行
  7. © Cygames,Inc. Step 4 反証をあげる 通常と実験グループのシステム出力を振り返り反証をあげる • 反証された場合 ◦ 同様のイベントに対する対策

    ◦ 構成変更やプログラム修正を行う • 反証されない場合 ◦ さらに故障度を上げても同様の振る舞いになるか
  8. © Cygames,Inc. モニタリング方法 ツール 対象 例 Mackerel Resource CPU・Memory・Disk Usage

    NewRelic Processing PHP・Memcached・Mysql 処理時間 ElasticSearch Response AVG/MEDIAN/95th/99th Web Server Response Time
  9. © Cygames,Inc. 実験対象のアーキテクチャ • WEB / Cache / Database •

    モノリスな構成 • リクエスト数は実験内容に依存
  10. © 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
  11. © Cygames,Inc. 定常状態 仮説反証 故障発生 仮説構築 Chaos Loop 99th percentile

    < 5s 正常に ロールバックされる 反証された RDS Failover
  12. © Cygames,Inc. 事例1 振り返り • 結果 ◦ リクエストはタイムアウト ◦ 部分的にロールバック

    ◦ 同一性が崩れるパターンが発生 • アクション ◦ テーブルを水平分割 ◦ 同一ユーザのデータは同一DBへ保存 ◦ セッションが滞留するためカーネルパラメーターを調整
  13. © Cygames,Inc. 定常状態 仮説反証 故障発生 仮説構築 Chaos Loop 99th percentile

    < 5s 起動中のElastiCacheに 切替る 反証された ElastiCache Reboot
  14. © Cygames,Inc. 定常状態 仮説反証 故障発生 仮説構築 Chaos Loop 99th percentile

    < 5s Return 200s マスターデータ参照 反証された WEBサーバ上 Cache Process停止
  15. © Cygames,Inc. 事例3 EC2 上のプロセス停止 • 結果 ◦ キャッシュ接続エラーで後続処理に移らなかった ◦

    SPOF • アクション ◦ 冗長化 ◦ ALB health_check にてローカルキャッシュの接続性確認する
  16. © Cygames,Inc. 定常状態 仮説反証 故障発生 仮説構築 Chaos Loop Received ≒

    Deleted Load Latency < 60s Taskが停止しても ロード処理に無影響 反証されなかった ECS Task 停止
  17. © Cygames,Inc. 事例 ECS Task の停止 • 結果 ◦ SQS

    Deleted と Received は変化なし・遅延も数秒以下 ◦ Task 数が多い可能性示唆 • アクション ◦ 故障率を上げても同様の結果になるか確認する