Save 37% off PRO during our Black Friday Sale! »

Pocochaの急成長を支えるDeNA的なインフラ運用改善【DeNA TechCon 2021】/techcon2021-6

Pocochaの急成長を支えるDeNA的なインフラ運用改善【DeNA TechCon 2021】/techcon2021-6

ステイホームも重なり急成長している Pococha では、増え続ける膨大な利用に対して Small Start した新規事業によくある、インフラ観点でのアーキテクチャの課題、運用の課題、性能管理の課題を抱えていました。

これまで数多くの大規模サービスを運用してきた DeNA がそのノウハウを活かし、 Pococha が新規事業から大規模サービスとなる上で安定化のためにやった、DB 分割や Auto Scaling などの運用改善についてご紹介します。

また、DeNA のインフラ基盤がどのように支えられているか、どのようにコスト最適化を目指しているかについても詳しくお話しします。

8a84268593355816432ceaf78777d585?s=128

DeNA_Tech

March 03, 2021
Tweet

Transcript

  1. 本田 恭 Pococha の急成長を支える DeNA 的なインフラ運用改善

  2. 自己紹介 2015 2016 2017 最近 中途入社(IT 基盤部) 国内ゲームのインフラ 大規模ゲームのインフラ 大規模ゲーム

    / Auto Motive Cloud Journey / Pococha などなど
  3. 自己紹介 趣味 筋トレ ベンチプレス デッドリフト スクワット NiziU では NINA 派

    120 kg 150 kg 140 kg
  4. https://www.pococha.com

  5. [2021/01]

  6. 1.9M DL [2021/01]

  7. API 2017 2021 req/s 20 vCPU 4 Mbps 10 QPS

    80
  8. API 2017 2021 req/s 20 8,500 vCPU 4 2,000 Mbps

    10 3,000 QPS 80 35,000 [2021/01]
  9. 425 %

  10. https://www.pococha.com

  11. Agenda 1. DeNA のインフラ運用 2. Pococha のインフラのこれまで 3. Pococha の成長を支える運用改善

    4. まとめ
  12. Agenda 1. DeNA のインフラ運用 2. Pococha のインフラのこれまで 3. Pococha の成長を支える運用改善

    4. まとめ
  13. 230 + [2021/01]

  14. DeNA のインフラ運用特色 • どこでも動かせる ◦ On Premise / Public Cloud

    • 複数サービス横断 ◦ Metadata(後述) を利用した共通的な Script たち
  15. https://unsplash.com QCT https://unsplash.com [Quality / Cost / Time]

  16. DeNA のインフラ運用特色 • どこでも動かせる ◦ On Premise / Public Cloud

    • 複数サービス横断 ◦ Metadata(後述) を利用した共通的な Script たち • QCT の追求 ◦ https://www.slideshare.net/dena_tech/denaqctiaas-aws-summit-tokyo-2019
  17. Agenda 1. DeNA のインフラ運用 2. Pococha のインフラのこれまで 3. Pococha の成長を支える運用改善

    4. まとめ
  18. Pococha のインフラ構成 • 開発チームで全て構築運用 • 基盤は AWS ◦ EC2(API /

    batch / daemon) ◦ Aurora ◦ ElastiCache ◦ etc.
  19. Pococha のインフラ構成 • 開発チームで全て構築運用 • 基盤は AWS ◦ EC2(API /

    batch / daemon) ◦ Aurora ◦ ElastiCache ◦ etc.
  20. Pococha のインフラ構成 • 開発チームで全て構築運用 • 基盤は AWS ◦ EC2(API /

    batch / daemon) ◦ Aurora ◦ ElastiCache ◦ etc. Small Start なプロジェクト
  21. Pococha のインフラ構成 Aurora EC2 EC2 EC2 ElastiCache Auto Scaling Group

  22. Pococha の成長と課題 • アーキテクチャ • 定常運用 • 性能管理

  23. Pococha の成長と課題 [アーキテクチャ] • VPC CIDR 不足 ◦ IP Address

    枯渇の恐れ • CDN 対象不足 ◦ CDN 使わず origin からデータ直接配信 • SPOF なサーバ群 ◦ 停止するとサービスへの影響大
  24. Pococha の成長と課題 [定常運用] • 監視と障害対応フロー • ScaleOut が遅い • ログ欠損

  25. Pococha の成長と課題 [性能管理] • 監視メトリクスが不十分 • 500 超のテーブルが 1 Aurora

    Cluster に • API, Redis 応答劣化 • サーバコスト増大
  26. Pococha の成長と課題 • アーキテクチャ • 定常運用 • 性能管理 Small Start

    状態の限界
  27. Pococha のインフラ構成 Aurora EC2 EC2 EC2 ElastiCache Auto Scaling Group

    開発/インフラ双方の運用を維持
  28. DeNA 的 ノウハウ https://www.pococha.com

  29. サービス 品質向上 https://www.pococha.com

  30. Agenda 1. DeNA のインフラ運用 2. Pococha のインフラのこれまで 3. Pococha の成長を支える運用改善

    4. まとめ
  31. • 障害対応 • 性能管理とチューニング • DB 分割 • Auto Scaling

    Pococha の成長を支える運用改善
  32. • 障害対応 • 性能管理とチューニング • DB 分割 • Auto Scaling

    DeNA のインフラ品質で達成 Pococha の成長を支える運用改善
  33. • 障害対応 • 性能管理とチューニング • DB 分割 • Auto Scaling

    Pococha の成長を支える運用改善
  34. Pococha の成長を支える運用改善 I. DB 分割 II. Auto Scaling

  35. DB 分割 • 垂直分割 • 水平分割

  36. DB 分割 [垂直分割] • テーブル単位での分割 ◦ User: users / user_friends

    / ... ◦ Live: lives / archived_lives / ... ◦ Log: login_logs / used_item_logs / ... • テーブル用途毎で Cluster にまとめる
  37. • テーブル単位での分割 ◦ User: users / user_friends / ... ◦

    Live: lives / archived_lives / ... ◦ Log: login_logs / used_item_logs / ... • テーブル用途毎で Cluster にまとめる アクセス頻度に応じた負荷分散 DB 分割 [垂直分割]
  38. DB 分割 [水平分割] • レコード毎に分割 ◦ users などレコードが膨大になりうるもの ◦ ScaleUp

    で限界となりうるもの • 大きなテーブルを複数 Cluster に分割 • Shard と key を mapping
  39. • レコード毎に分割 ◦ users などレコードが膨大になりうるもの ◦ ScaleUp で限界となりうるもの • 大きなテーブルを複数

    Cluster に分割 • Shard と key を mapping データ量に則した分割 DB 分割 [水平分割]
  40. Pococha を支えるバックエンド 〜アーキテクチャと DB シャーディング〜 [関連セッション]

  41. DB 分割 Pococha DB ... User User Live Live Log

    Log ...
  42. DB 分割 [垂直分割] Pococha DB User User Live Live Log

    Log ... ...
  43. DB 分割 [垂直分割] User Live Log ...

  44. DB 分割 [垂直分割] User Live Log ... 負荷や QPS に応じ

    Type 選択
  45. DB 分割 [水平分割] User Live Log ...

  46. DB 分割 [水平分割] User Mapping user_id shard_id 10001 1 10002

    2 10003 1 ... ... User Shard 1 User Shard 2
  47. DB 分割 [水平分割] User Mapping User Shard 1 User Shard

    2 User Shard 3 User Shard 4 user_id shard_id 10001 1 10002 2 10003 1 ... ...
  48. DB 分割 [水平分割] User Mapping User Shard 1 User Shard

    2 User Shard 3 User Shard 4 user_id shard_id 10001 1 10002 2 10003 1 ... ... 90001 3 90002 4 90003 3 90004 4
  49. DB 分割 [水平分割] User Mapping User Shard 1 User Shard

    2 User Shard 3 User Shard 4 user_id shard_id 10001 1 10002 2 10003 1 ... ... 90001 3 90002 4 90003 3 90004 4 重み付けによる負荷の均等化
  50. Pococha を支えるバックエンド 〜アーキテクチャと DB シャーディング〜 [関連セッション]

  51. I. DB 分割 II. Auto Scaling Pococha の成長を支える運用改善

  52. I. DB 分割 II. Auto Scaling A. 人はなぜ Auto Scaling

    したいのか B. DeNA と Auto Scaling 戦いの歴史 C. Pococha で解決したかったこと D. QCT を意識した Auto Scaling 構成 Pococha の成長を支える運用改善
  53. 人はなぜ Auto Scaling したいのか • 品質維持しつつコスト最適化 • Traffic に合わせた ScaleOut

    / ScaleIn • 運用工数の削減
  54. 人はなぜ Auto Scaling したいのか • 品質維持しつつコスト最適化 • Traffic に合わせた ScaleOut

    / ScaleIn • 運用工数の削減 お金の節約
  55. DeNA と Auto Scaling 戦いの歴史 1. 一枚岩 Script 期 2.

    Workflow と Spot Instances 期 [AWS] 3. Managed Instance Group 期 [GCP]
  56. Auto Scaling との戦い [1/3] 一枚岩 Script 期 • 大量構築にかかる時間大 •

    コードの運用が面倒 ◦ リトライ制御と複雑なロジック ◦ 起動から Service In まで全部担保しテストが面倒 ◦ タスク間の依存関係と冪等性の担保
  57. Auto Scaling との戦い [1/3] Cloud Launch Instances (Auto Scaler) Server

    Server Server Network Check Provision Monitor ServiceIn Server Server Server Server Server Server 一枚岩 Script 期 Metadata
  58. Metadata Auto Scaling との戦い [1/3] Cloud Launch Instances (Auto Scaler)

    Server Server Server Network Check Provision Monitor ServiceIn Server Server Server Server Server Server 一枚岩 Script 期
  59. Auto Scaling との戦い [1/3] Server Server Server Network Check Provision

    Monitor Server Server Server Server Server Server Metadata 一枚岩 Script 期 Metadata に依存 共通 Script 利用
  60. Auto Scaling との戦い [1/3] 一枚岩 Script 期 Server Server Server

    Network Check Provision Monitor Server Server Server Server Server Server Metadata Retry の制御 冪等性の担保
  61. Auto Scaling との戦い [1/3] Server Server Server Network Check Provision

    Post Provision Server Server Server Server Server Server Metadata Monitor Server Server Server 一枚岩 Script 期
  62. Metadata Auto Scaling との戦い [1/3] Cloud Launch Instances (auto-scaler) Server

    Server Server Network Check Provision Monitoring ServiceIn Server Server Server Server Server Server 一枚岩 Script 期 高速化と安定性に課題
  63. Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS]

    • Launch と Provisioning の分離 • Metadata への登録を非同期に • (内製)Workflow ツールにより構築を並行化
  64. Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS]

    AWS Launch Instances (Auto Scaler) Server Server Server Metadata Database Scheduler Scheduler Scheduler Executor Sync Sync Scheduler API Script / etc...
  65. Auto Scaling との戦い [2/3] Launch Instances (Auto Scaler) Server Server

    Server Metadata Database Scheduler Scheduler Scheduler Executor Sync Sync Scheduler API Synchronizer Workflow AWS Workflow と Spot Instances 期 [AWS] Script / etc...
  66. Auto Scaling との戦い [2/3] Scheduler Scheduler Scheduler Executor Sync Sync

    Scheduler API Workflow と Spot Instances 期 [AWS]
  67. Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS]

    • Instance の管理は Script ◦ AZ 分散 ◦ 複数 Instance Type ◦ Spot Instance 起動できないときに Failover ◦ On Demand と Spot の割合
  68. Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS]

    • Instance の管理は Script ◦ AZ 分散 ◦ 複数 Instance Type ◦ Spot Instance 起動できないときに Failover ◦ On Demand と Spot の割合 管理 Script のロジックが煩雑
  69. Auto Scaling との戦い [3/3] Managed Instance Group 期 [GCP] •

    Instance の管理を GCP に任せる ◦ AZ の分散 ◦ 台数維持 • Instance Group の抽象化 ◦ AWS でも動かせるように
  70. Auto Scaling との戦い [3/3] Managed Instance Group 期 [GCP] Workflow

    Sync Instance Controller Auto Scaler Server Server Server Adapter GCP Instance Group Instance Group Instance Group
  71. Auto Scaling との戦い [3/3] Workflow Sync Instance Controller Auto Scaler

    Server Server Server Adapter GCP Instance Group Instance Group Instance Group Managed Instance Group 期 [GCP]
  72. Auto Scaling との戦い [3/3] Instance Controller GCP Adapter AWS ...

    Managed Instance Group 期 [GCP]
  73. Auto Scaling との戦い [3/3] Workflow Sync Instance Controller Auto Scaler

    GCP Server Server Server Adapter Instance Group Instance Group Instance Group Managed Instance Group 期 [GCP]
  74. Auto Scaling との戦い [3/3] Managed Instance Group 期 [GCP] •

    Instance の撤去対象選定は DeNA で実施 ◦ Service Out を事前にするなど必要 • Auto Scaler は未だに独自実装 • Instance Controller が複雑
  75. Auto Scaling との戦い [3/3] Managed Instance Group 期 [GCP] •

    Instance の撤去対象選定は DeNA で実施 ◦ Service Out を事前にするなど必要 • Auto Scaler は未だに独自実装 • 登場人物が増えすぎた 次はもっとシンプルな構成に
  76. DeNA と Auto Scaling 戦いの歴史 1. 一枚岩 Script 期 2.

    Workflow と Spot Instances 期 [AWS] 3. Managed Instance Group 期 [GCP]
  77. 1. 一枚岩 Script 期 2. Workflow と Spot Instances 期

    [AWS] 3. Managed Instance Group 期 [GCP] Step and a step DeNA と Auto Scaling 戦いの歴史
  78. Pococha で解決したかったこと • 少しでも早く Scale

  79. • 少しでも早く Scale • インフラ共通 Script 群で運用 • より Managed

    Service を活かした構成 Pococha で解決したかったこと
  80. https://unsplash.com https://unsplash.com QCT [Quality / Cost / Time]

  81. QCT を意識した Auto Scaling 構成 • 安定化 ◦ インフラ共通 Script

    群で運用 ◦ より Managed Service を活かした構成 • 高速化 ◦ 少しでも早く Scale • コスト最適化
  82. • 安定化 ◦ インフラ共通 Script 群で運用 ◦ より Managed Service

    を活かした構成 • 高速化 ◦ 少しでも早く Scale • コスト最適化 QCT を意識した Auto Scaling 構成
  83. • 安定化 ◦ インフラ共通 Script 群で運用 ◦ より Managed Service

    を活かした構成 • 高速化 ◦ 少しでも早く Scale • コスト最適化 QCT を意識した Auto Scaling 構成
  84. Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS]

    AWS Launch Instances (Auto Scaler) Server Server Server Metadata Database Scheduler Scheduler Scheduler Executor Sync Sync Scheduler API [再掲]
  85. Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS]

    AWS Launch Instances (Auto Scaler) Server Server Server Metadata Database Scheduler Scheduler Scheduler Executor Sync Sync Scheduler API [再掲]
  86. Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS]

    AWS Launch Instances (Auto Scaler) Server Server Server Metadata Database Scheduler Scheduler Scheduler Executor Sync Sync Scheduler API [再掲] Managed Service で再設計
  87. Pococha Auto Scaling 運用 • Instance 台数管理 • 負荷に応じた増減 •

    イベント前の増設 • AMI が最新の状態
  88. Pococha Auto Scaling 運用 + インフラ • Instance 台数管理 •

    負荷に応じた増減 • イベント前の増設 • AMI が最新の状態 • Scale の正確さ
  89. AWS

  90. Pococha Auto Scaling 運用 + インフラ • Instance 台数管理 •

    負荷に応じた増減 • イベント前の増設 • AMI が最新の状態 • Scale の正確さ Auto Scaling Group(ASG) Scaling policy Scheduled action Launch Templates Lifecycle hooks
  91. • 安定化 ◦ インフラ共通 Script 群で運用 ◦ より Managed Service

    を活かした構成 • 高速化 ◦ 少しでも早く Scale • コスト最適化 Managed + Workflow で網羅 QCT を意識した Auto Scaling 構成
  92. Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS]

    Launch Instances (Auto Scaler) Server Server Server Metadata Database Scheduler Scheduler Scheduler Executor Sync Sync Scheduler API Synchronizer Workflow AWS [再掲]
  93. Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS]

    Launch Instances (Auto Scaler) AWS ここだけ AWS に置き換え
  94. Auto Scaling Group と Workflow 連携 Server Server Server ASG

  95. Auto Scaling Group と Workflow 連携 Server Server Server Scheduler

    Workflow Scheduler Lifecycle SQS ASG Wait
  96. Auto Scaling Group と Workflow 連携 AWS Metadata Sync Sync

    Scheduler Lifecycle SQS Server Server Server Scheduler Workflow ASG Wait
  97. Auto Scaling Group と Workflow 連携 AWS Metadata Sync Sync

    Scheduler Lifecycle SQS Server Server Server Scheduler Workflow ASG InService
  98. • Lifecycle に Enq されたら provision 開始 • Metadata は非同期で更新

    ◦ Lifecycle の処理をブロックしない ◦ 依存する provision script のみ影響 • Terminate も同様の流れ Auto Scaling Group と Workflow 連携
  99. 1. [AWS] Launch Instances 2. [AWS] Instance 情報を SQS に入れる

    3. [DeNA] SQS から Message 取得 4. [DeNA] (内製)Workflow ツールへリクエスト 5. [DeNA] Workflow が Provisioning 処理実行 6. [DeNA] 処理完了を AWS に通知 7. [AWS] Instance を Service In Auto Scaling Group と Workflow 連携
  100. Auto Scaling Group と Workflow 連携 AWS Metadata Sync Sync

    Server Server Server Scheduler Workflow Scheduler Lifecycle SQS ASG
  101. Auto Scaling Group と Workflow 連携 AWS Metadata Sync Sync

    Server Server Server Scheduler Workflow Scheduler Lifecycle SQS ASG
  102. Auto Scaling Group と Workflow 連携 AWS Metadata Sync Sync

    Server Server Server Scheduler Workflow Scheduler Lifecycle SQS ASG 簡単に内製ツール連携
  103. • 安定化 ◦ インフラ共通 Script 群で運用 ◦ より Managed Service

    を活かした構成 • 高速化 ◦ 少しでも早く Scale • コスト最適化 QCT を意識した Auto Scaling 構成
  104. • 安定化 ◦ インフラ共通 Script 群で運用 ◦ より Managed Service

    を活かした構成 • 高速化 ◦ 少しでも早く Scale • コスト最適化 => Spot Instances 活用 QCT を意識した Auto Scaling 構成
  105. • 安定化 ◦ インフラ共通 Script 群で運用 ◦ より Managed Service

    を活かした構成 • 高速化 ◦ 少しでも早く Scale • コスト最適化 Spot Instances のための設計 QCT を意識した Auto Scaling 構成
  106. • 複数 Instance Pool 利用 • Spot Interruptions • On

    Demand への Failover • On Demand を Spot へ置換 Spot Instances と Auto Scaling Group
  107. • 複数 Instance Pool 利用 • Spot Interruptions • On

    Demand への Failover • On Demand を Spot へ置換 Spot Instances と Auto Scaling Group
  108. • Instance Type の混合 ◦ Instance Pool = Instance Type

    x AZ • ASG 内で Traffic 分散はできない 複数 Instance Pool 利用
  109. • Instance Type の混合 ◦ Instance Pool = Instance Type

    x AZ • ASG 内で Traffic 分散はできない 複数 Instance Pool 利用
  110. 複数 ASG と Traffic weight • Instance Type の混合 ◦

    Instance Pool = Instance Type x AZ • ASG 内で Traffic 分散はできない 複数 Instance Pool 利用
  111. c5.2xlarge c5.9xlarge c4.2xlarge c4.8xlarge c5.4xlarge c4.4xlarge ASG 複数 Instance Pool

    利用
  112. c5.2xlarge c5.9xlarge c4.2xlarge c4.8xlarge c5.4xlarge c4.4xlarge ASG 4.5x 複数 Instance

    Pool 利用
  113. c5.2xlarge c4.2xlarge ASG c5.4xlarge c4.4xlarge ASG c5.9xlarge c4.8xlarge ASG 複数

    Instance Pool 利用
  114. ASG 2x ASG 4x ASG 9x Target Group Target Group

    Target Group Load Balancer 複数 Instance Pool 利用
  115. 2 ASG 2x ASG 4x ASG 9x Target Group Target

    Group Target Group Load Balancer 4 9 複数 Instance Pool 利用
  116. 2 ASG 2x ASG 4x ASG 9x Target Group Target

    Group Target Group Load Balancer 4 9 複数 Instance Pool 利用
  117. 2 ASG 2x ASG 4x ASG 9x Target Group Target

    Group Target Group Load Balancer 4 9 複数 Instance Pool 利用
  118. 2 9 ASG 2x ASG 4x ASG 9x Target Group

    Target Group Target Group Load Balancer 4 複数 Instance Pool 利用
  119. 2 9 ASG 2x ASG 4x ASG 9x Target Group

    Target Group Target Group Load Balancer 4 複数 Instance Pool 利用 1台辺りの障害の影響を均等に
  120. C5.2xlarge (OnDemand) C5.2xlarge (Spot) ASG(2x) N M C5.2xlarge (OnDemand) C5.2xlarge

    (Spot) ASG(2x) N M 2xl (OnDemand) 2xl (OnDemand) 2xl (Spot) 2xl (Spot) ASG 2x N M 複数 Instance Pool 利用
  121. • 複数 Instance Pool 利用 • Spot Interruptions • On

    Demand への Failover • On Demand を Spot へ置換 Spot Instances と Auto Scaling Group
  122. • Shutdown 前に Service Out • Event と Workflow 連携は

    Lifecycle 流用 • 停止時に On Demand 増設しない Spot Interruptions
  123. • Shutdown 前に Service Out • Event と Workflow 連携は

    Lifecycle 流用 • 停止時に On Demand 増設しない Spot Interruptions
  124. Policy の Scale に全て委任 • Shutdown 前に Service Out •

    Event と Workflow 連携は Lifecycle 流用 • 停止時に On Demand 増設しない Spot Interruptions
  125. Server Scheduler Spot Interrupt ASG SQS Event InstanceId Event Bridge

    Spot Spot Interruptions
  126. Server Scheduler Spot Interrupt ASG SQS Event InstanceId Event Bridge

    TerminateInstance In AutoScalingGroup Spot Spot Interruptions
  127. Server Scheduler Spot Interrupt ASG SQS Event InstanceId Event Bridge

    TerminateInstance In AutoScalingGroup Scheduler Workflow Scheduler Lifecycle SQS Terminate Lifecycle Spot Spot Interruptions
  128. 1. [AWS] Spot Interruption Event 検知 2. [AWS] Event の

    InstanceId を SQS に入れる 3. [DeNA] SQS から Message 取得 4. [DeNA] ASG に TerminateInstanceInAutoScalingGroup 実行 5. [AWS] Lifecycle を SQS に通知 6. [DeNA] Message 取得し Workflow へリクエスト 7. [DeNA] Workflow で Terminate 前処理 8. [AWS] Instance 削除 Spot Interruptions
  129. Server Scheduler Spot Interrupt ASG SQS Event InstanceId Event Bridge

    Scheduler Workflow Scheduler Lifecycle SQS Terminate Lifecycle 流用 TerminateInstance In AutoScalingGroup Terminate Lifecycle Spot Spot Interruptions
  130. • 複数 Instance Pool 利用 • Spot Interruptions • On

    Demand への Failover • On Demand を Spot へ置換 Spot Instances と Auto Scaling Group
  131. On Demand への Failover • Spot Instance が起動できないときに発動 ◦ Spot

    Interruptions ではない • 一時的に On Demand で代用
  132. On Demand で Capacity 確保 On Demand への Failover •

    Spot Instance が起動できないときに発動 ◦ Spot Interruptions ではない • 一時的に On Demand で代用
  133. Server ASG Spot On Demand への Failover

  134. Server ASG Event Event Bridge Scheduler Spot Failover SQS Failed

    detail Spot On Demand への Failover
  135. Server ASG Event Event Bridge Scheduler Spot Failover SQS Failed

    detail Scheduler Global Lock Acquire Spot On Demand への Failover
  136. Server ASG Event Event Bridge Scheduler Spot Failover SQS Failed

    detail Scheduler Global Lock OnDemandBaseCapacity +N (N := DesiredCapacity - Instances) Acquire Spot On Demand への Failover
  137. ASG Event Event Bridge Scheduler Spot Failover SQS Failed detail

    Scheduler Global Lock Acquire Server Scheduler Workflow Scheduler Lifecycle SQS OnDemandBaseCapacity +N (N := DesiredCapacity - Instances) OnDemand On Demand への Failover
  138. 1. [AWS] ASG 起動失敗 Event 検知 2. [AWS] Event 情報を

    SQS に通知 3. [DeNA] SQS から Message 取得 4. [DeNA] Lock 取得 5. [DeNA] OnDemandBaseCapacity 変更 6. [DeNA] Lock release 7. [AWS] Instance 情報を SQS に通知 8. [DeNA] Lifecycle で Provisioning On Demand への Failover
  139. ASG Event Event Bridge Scheduler Spot Failover SQS Failed detail

    Scheduler Global Lock Acquire Server Scheduler Workflow SQS Scheduler Lifecycle OnDemandBaseCapacity +N (N := DesiredCapacity - Instances) OnDemand On Demand への Failover
  140. Scheduler Spot Failover Scheduler Global Lock On Demand への Failover

  141. Scheduler Spot Failover Scheduler Global Lock MySQL DynamoDB ... Redis

    On Demand への Failover
  142. ASG Event Event Bridge Scheduler Spot Failover SQS Failed detail

    Scheduler Global Lock Acquire Server Scheduler Workflow SQS Scheduler Lifecycle OnDemandBaseCapacity +N (N := DesiredCapacity - Instances) OnDemand On Demand への Failover 正確で安定した Capacity 確保
  143. • 複数 Instance Pool 利用 • Spot Interruptions • On

    Demand への Failover • On Demand を Spot へ置換 Spot Instances と Auto Scaling Group
  144. On Demand を Spot へ置換 • Failover 後に Spot に戻す

    • メンテがないので Online で実行 • batch の定期実行で十分 ◦ いきなり安定化するとは考えにくい
  145. 定期的に Spot Instance を利用 On Demand を Spot へ置換 •

    Failover 後に Spot に戻す • メンテがないので Online で実行 • batch の定期実行で十分 ◦ いきなり安定化するとは考えにくい
  146. ASG Server Server Reduce OnDemand OnDemaneBaseCapacity - N (N :=

    threshold) OnDemand Spot On Demand を Spot へ置換
  147. ASG Reduce OnDemand Scheduler Workflow Scheduler Lifecycle SQS OnDemaneBaseCapacity -

    N (N := threshold) Server OnDemand Spot Server (Spot) Server On Demand を Spot へ置換
  148. Server (Spot) ASG Server Reduce OnDemand Scheduler Workflow Scheduler Lifecycle

    SQS OnDemaneBaseCapacity - N (N := threshold) Spot On Demand を Spot へ置換
  149. ASG Server Server Reduce OnDemand OnDemaneBaseCapacity - N (N :=

    threshold) OnDemand Spot On Demand を Spot へ置換
  150. ASG Server Server Reduce OnDemand SQS Event Event Bridge Failed

    detail OnDemaneBaseCapacity - N (N := threshold) OnDemand Spot On Demand を Spot へ置換
  151. ASG Server Server Reduce OnDemand SQS Event Event Bridge Failed

    detail Scheduler Spot Failover OnDemaneBaseCapacity - N (N := threshold) OnDemand Spot On Demand を Spot へ置換
  152. 1. [DeNA] OnDemandBaseCapacity 変更 2. [AWS] Spot Instances を起動 3.

    [AWS] Spot Instance 情報を SQS に通知 4. [DeNA] Lifecycle で Provisioning 5. [AWS] On Demand Instance 情報を SQS に通知 6. [DeNA] Lifecycle で削除前処理実行 7. [AWS] On Demand Instance 削除 On Demand を Spot へ置換 [成功]
  153. On Demand を Spot へ置換 [失敗] 1. [DeNA] OnDemandBaseCapacity 変更

    2. [AWS] ASG 起動失敗 Event 発火 3. [AWS] Event 情報を SQS に通知 4. [DeNA] SQS から Message 取得 5. [DeNA] Spot の Failover 処理実行
  154. ASG Server Server Reduce OnDemand SQS Event Event Bridge Failed

    detail Scheduler Spot Failover OnDemaneBaseCapacity - N (N := threshold) OnDemand Spot On Demand を Spot へ置換 失敗時は On Demand Failover
  155. ASG Spot Instances と Auto Scaling Group ASG 2x Event

    Bridge Scheduler Spot Failover SQS Scheduler Global Lock Scheduler Workflow Scheduler Lifecycle SQS Reduce OnDemand Sync Sync Metadata AWS
  156. ASG Spot Instances と Auto Scaling Group ASG 2x Event

    Bridge Scheduler Spot Failover SQS Scheduler Global Lock Scheduler Workflow Scheduler Lifecycle SQS Reduce OnDemand Sync Sync Metadata AWS
  157. ASG Spot Instances と Auto Scaling Group ASG 2x Event

    Bridge Scheduler Spot Failover SQS Scheduler Global Lock Scheduler Workflow Scheduler Lifecycle SQS Reduce OnDemand Sync Sync Metadata AWS Script のロジックを AWS へ
  158. Managed の恩恵 https://unsplash.com

  159. Capacity Rebalancing • Interruption 前に代替 Spot を起動, Lifecycle 発火 ◦

    より安定して Spot instance の導入可能 • 起動しやすい Pool を自動選択 ◦ Spot Allocation Strategy = capacity-optimized • Spot の起動に失敗したら Event 発火可能 ◦ On Demand へ Failover 可能
  160. Capacity Rebalancing • Interruption 前に代替 Spot を起動, Lifecycle 発火 ◦

    より安定して Spot instance の導入可能 • 起動しやすい Pool を自動選択 ◦ Spot Allocation Strategy = capacity-optimized • Spot の起動に失敗したら Event 発火可能 ◦ On Demand へ Failover 可能 便利機能を簡単に導入
  161. Pococha Auto Scaling のさらなる夢 • Spot 比率自動調整 • Traffic weight

    自動調整 • Instance の Rolling update 完全自動化 • Subsystem の Tracking
  162. Agenda 1. DeNA のインフラ運用 2. Pococha のインフラのこれまで 3. Pococha の成長を支える運用改善

    4. まとめ
  163. https://www.pococha.com

  164. https://unsplash.com https://unsplash.com QCT [Quality / Cost / Time]

  165. https://www.pococha.com DeNA 的 ノウハウ

  166. • 障害対応 • 性能管理とチューニング • DB 分割 • Auto Scaling

    Pococha の成長を支える運用改善
  167. DB 分割 [垂直分割] Pococha DB User User Live Live Log

    Log ... ...
  168. DB 分割 [垂直分割] User Live Log ...

  169. DB 分割 [水平分割] User Mapping User Shard 1 User Shard

    2 User Shard 3 User Shard 4 user_id shard_id 10001 1 10002 2 10003 1 ... ... 90001 3 90002 4 90003 3 90004 4
  170. c5.2xlarge c4.2xlarge ASG c5.4xlarge c4.4xlarge ASG c5.9xlarge c4.8xlarge ASG 複数

    Instance Pool 利用
  171. 9 2 ASG 2x ASG 4x ASG 9x Target Group

    Target Group Target Group Load Balancer 4 複数 Instance Pool 利用
  172. ASG Spot Instances と Auto Scaling Group ASG 2x Event

    Bridge Scheduler Spot Failover SQS Scheduler Global Lock Scheduler Workflow Scheduler Lifecycle SQS Reduce OnDemand Sync Sync Metadata AWS
  173. Small Start から大規模サービスへ • 抜本的解決を目指す • 既存運用をできるだけ維持 ◦ 開発チーム ◦

    インフラチーム • 足りない部分の実装は細かく ◦ Managed Service に置き換え可能に
  174. Small Start から大規模サービスへ • 抜本的解決を目指す • 既存運用をできるだけ維持 ◦ 開発チーム ◦

    インフラチーム • 足りない部分の実装は細かく ◦ Managed Service に置き換え可能に Make you happy
  175. Pococha のグローバル展開に携わりたい 大規模トラフィックと戦いたい Subsystem を実装したい

  176. https://career.dena.com

  177. None