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
クラウド環境をFargateに 移行して得た知見
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
teru0x1
February 22, 2022
Technology
1.7k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
クラウド環境をFargateに 移行して得た知見
DMM meetup #37
teru0x1
February 22, 2022
More Decks by teru0x1
See All by teru0x1
開発効率と信頼性を両立する Ubieのプラットフォームエンジニアリング
teru0x1
0
620
マルチクラスタの認知負荷に立ち向かう! Ubieのプラットフォームエンジニアリング
teru0x1
4
4.9k
ブラウザの外側でWasmを使おう
teru0x1
0
400
スタブサーバ自動生成ツール 〜負荷試験をもっと楽に〜
teru0x1
0
2.1k
バッチシステムをクラウドネイティブにするために考えたこと
teru0x1
17
8.6k
Goと定数 DMM.go #3
teru0x1
0
2.8k
はてなインターン2020成果発表
teru0x1
0
1.2k
入門QUIC
teru0x1
0
610
【衝撃】Archlinuxをインストールした結果がヤバすぎた!
teru0x1
0
140
Other Decks in Technology
See All in Technology
プロダクトだけじゃない、社内プロセスにおける自動化・省力化ノススメ
kakehashi
PRO
1
3.6k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
cccccc
moznion
0
1.9k
環境凍結という Toil を倒す -セルフサービス型 Ephemeral テスト環境の 設計と実践
shirouz
1
2.3k
SRE Next 2026 何でも屋からの脱却
bto
0
620
SRE本の知られざる名シーン / The Hidden Gems of Google SRE Book
nari_ex
1
370
[2026-07-15] AI Ready なはずだったアーキテクチャと、見えてきた課題・次に目指す状態
wxyzzz
4
2.6k
Making sense of Google’s agentic dev tools
glaforge
1
180
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
2
170
オブザーバビリティ、本当に活用できてる? 〜API連携×生成AIで成熟度を自動評価〜
dmmsre
1
3k
ボーイスカウトルールでメモリやスキルを改善しよう
azukiazusa1
1
660
ヘルスケア領域における AI 活用と その安全性担保のための取り組み (Leveraging AI in Healthcare and Our Efforts to Ensure Its Safety) - Google I/O Extended Tokyo 2026, July 11, 2026
zettaittenani
0
270
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
310
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
260
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Building Applications with DynamoDB
mza
96
7.1k
Navigating Team Friction
lara
192
16k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Producing Creativity
orderedlist
PRO
348
40k
Music & Morning Musume
bryan
47
7.3k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
340
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
290
Transcript
© DMM © DMM CONFIDENTIAL クラウド環境をFargateに 移行して得た知見 ITインフラ本部 SRE部 小野
輝也
© DMM 2 小野 輝也 DMM.com ITインフラ本部SRE部 1年目 Twitter: @teru0x1
https://cha-shu00.hatenablog.com/
© DMM 今日お話しすること 3
© DMM 今日お話しすること 4 Webサービスのインフラを Elastic Beanstalkから ECS Fargateに移行した話
© DMM オンラインサロン事業部のインフラ(一部抜粋) 5 Elastic Beanstalk API サーバ 静的コンテンツ配信 キューワーカー
データストア・キャッシュなど エンドユーザ ELB APM ロギング
© DMM 6 Elastic Beanstalk
© DMM Elastic Beanstalk • インフラを気にすることなくアプリケーションをデプロイできる マネージドサービス • いわゆるPaaS •
実際にはCloudFormationのラッパー • インフラ知識がなくてもすぐにサービスを起動できる • 構成のカスタマイズがやや大変 7
© DMM インフラで抱えていた課題 • Beanstalkは抽象化レイヤの下にある実リソースを触りづらい • 細かなカスタマイズは特殊な設定ファイルで管理する必要がある • EC2のスケールアウト・スケールインに時間がかかる •
BeanstalkのPlatformで非推奨のMulticontainer Dockerを利用 していた 8 2022 06/30 リタイア
© DMM 9 ECS Fargate
© DMM ECS Fargate • コンテナオーケストレーションサービス • 移行の決め手 • アプリケーションはDockerコンテナで動いていたため、移行が容易
• スケールイン・スケールアウトが高速 • OSレイヤの管理が不要 • 社内に知見が多い 10
© DMM 移行後 11 ECS Fargate データストア・キャッシュなど エンドユーザ ELB APM・ロギング
API Service キューワーカー Service CloudFront 静的コンテンツ配信 IaC
© DMM 移行後 12 データストア・キャッシュなど エンドユーザ ELB APM・ロギング CloudFront 静的コンテンツ配信
ECS Fargate API Service キューワーカー Service * 5 APIとキューワーカーをECS Serviceに変 更 キューワーカーはジョブの種類ごとに Serviceを立てる(ジョブごとにスケールで きる)
© DMM 移行後 13 ECS Fargate データストア・キャッシュなど エンドユーザ ELB APM・ロギング
API Service キューワーカー Service CloudFront 静的コンテンツ配信 フロントエンドの配信を CloudFront+S3に変更
© DMM 移行後 14 ECS Fargate データストア・キャッシュなど エンドユーザ ELB API
Service キューワーカー Service CloudFront 静的コンテンツ配信 APM・ロギング APMとログ基盤をNewRelicに 統一 NewRelic Logsはデフォルトで 保持期間が30日なので長期保 存にはS3を併用
© DMM 15 1. 検討したこと
© DMM 新リソースの作成方針 16 TG1 TG2 Fargate TG1 TG2 (new)
Fargate OR new new
© DMM 新リソースの作成方針 17 TG1 TG2 Fargate OR new TG1
TG2 (new) Fargate new ELBごと既存環境との分離 ・Elastic Beanstalkのリソースを変更しない ・旧環境をまとめて削除するのも簡単 ・DNSの向き先を変える事でリリース
© DMM リリース方針 • API • 当初はRoute53の加重ラウンドロビンを使ってカナリアリリースを予定 • Socket.ioの実装制約で難しいことが分かった •
long pollingとWebSocketを併用する時はALBのstickyセッションが必要 • https://socket.io/docs/v4/using-multiple-nodes/ • カナリアリリースではなく、全てのトラフィックを一気に切り替える方針に変更 • stgでのテストが十分にできていたため • キューワーカー • 徐々にECSタスクの割合を増やす 18
© DMM 19 2. 移行後に発生 した問題
© DMM 1.過負荷によるサービスダウン
© DMM 過負荷によるサービスダウン 21
© DMM 過負荷によるサービスダウン 22 ALBの受けたリ クエスト数
© DMM 過負荷によるサービスダウン 23 API Serviceの タスク数 アクセス数 急増 セルフヒーリング
頑張る 手動でタスク数増加
© DMM 24 スパイクへの対処法1 スケーリングポリシーを増 やす
© DMM ECSのスケーリングポリシー • ターゲット追跡スケーリングポリシー • メトリクス値(CPU使用率など)が指定値で一定になるようにタスク数を調整 • 障害発生時はこのポリシーだけ利用(設定内容: CPU使用率が50%を保持)
• ステップスケーリングポリシー • メトリクス値のターゲットからの超過幅と増減タスク数を指定 • 急激なメトリクス値の増加に対して大きくタスク数を増やせる 25
© DMM ECSのスケーリングポリシー • ターゲット追跡スケーリングポリシー • メトリクス値(CPU使用率など)が指定値で一定になるようにタスク数を調整 • 障害発生時はこのポリシーだけ利用(設定内容: CPU使用率が50%を保持)
• ステップスケーリングポリシー • メトリクス値のターゲットからの超過幅と増減タスク数を指定 • 急激なメトリクス値の増加に対して大きくタスク数を増やせる 26 2つを併用 通常時: ターゲット追跡利用で 緩やかにタスク増減 スパイク発生時: ステップ利用で大き くタスク数を増やす
© DMM 27 スパイクへの対処法2 時刻帯によるスケーリング
© DMM 時刻帯によるスケーリング • サービスのピークタイムは21時ちょうど • オンラインサロンにはライブ配信の機能があり、この時刻に ライブ配信するサロンが多い • 20:50にタスク数を前もって増やしておき、深夜帯に減らす
• AWSコンソールからだとこの機能は見えない • aws-cliやTerraformで設定 28
© DMM 29 スパイクへの対処法3 外型監視のアラートによる スケーリング
© DMM 30 /health OK
© DMM 31 /health ・・・
© DMM 32 Alert Condition Violation Notification channel: webhook $
aws ecs update-service --desired-count N
© DMM 33 /health OK
© DMM アラートによるスケーリング • NewRelicの外型監視違反をトリガーにしたwebhook通知を利用 • LambdaでECSのタスク数を大きな数に設定する • ECSのスケジューラとは異なる仕組みで強制的にタスク数を増やす •
最後の安全装置 • Lambdaのカスタムランタイムを使ってBashをコンテナで動かしている 34
© DMM 2.NewRelic APM PHP Agentによる性能劣化
© DMM NewRelic APM PHP Agent • PHPアプリケーションのオブザーバビリティを提供 • 継続的なパフォーマンスモニタリングに必須
36
© DMM 37 ECS移行後、レスポンスタイムが 悪化(黄: 99%ile) Elastic Beanstalk (EC2) ECS
Fargate
© DMM NewRelic APM PHP Agent • 仮想環境下のクロックソースによってはシステム全体の性能劣化を起こ す •
関数のトレーシングに使うgettimeofdayシステムコールが原因 • Fargateはクロックソースの変更ができない • Fargateのクロックソースでよく見るもの • kvm: vDSOをサポート。性能劣化を起こさない • xen: vDSOをサポートしない。性能劣化を起こす • vDSO • カーネルの関数をユーザ空間にマッピングする技術 • システムコール呼び出しを普通の関数と同じコストにできる 38 参考: https://discuss.newrelic.com/t/php-agent-on-aws-fargate-performance-issue/124367/5
© DMM 対処法 • 詳細トレースをOFFにする • newrelic.transaction_tracer.detail = 0 を設定
• Agentが選択したorユーザが指定した特定の関数の詳細トレースだけ取得 • 大雑把なトレースしか追えなくなるので、トレードオフではある • 遅い関数の当たりをつけるだけなら十分 39 https://docs.newrelic.com/docs/apm/agents/php-agent/configuration/php-agent-configuration/#inivar-tt-detail から引用
© DMM 効果 40 詳細トレースON 詳細トレースOFF
© DMM 41 3. Fargate移行の 効果
© DMM インフラ移行の効果 • インフラの構成管理が容易になった • .ebextensionsのALB設定などはTerraformに • キュー遅延の軽減 •
キューワーカーの待ち行列が伸び、プッシュ通知などの送信まで時間がかかる 時があった • スケールアウトが高速化したことで緩和された 42
© DMM 43 4. まとめ
© DMM まとめ • Elastic BeanstalkからECS Fargateへの移行事例を紹介 • ECS Fargateで起こりがちな問題と対処法を紹介
• スケールアウトがスパイクに間に合わずサービスダウン • 対処法: 複数のスケーリング手法を組み合わせる • NewRelic APMで性能が劣化する • 対処法: 状況に応じてトレース詳細をOFFにする 44
© DMM 45 SRE部ではAWSが 好きな仲間を募集 しています https://dmm-corp.com/recruit/engineer/8/
None