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
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
680
マルチクラスタの認知負荷に立ち向かう! Ubieのプラットフォームエンジニアリング
teru0x1
4
5k
ブラウザの外側でWasmを使おう
teru0x1
0
410
スタブサーバ自動生成ツール 〜負荷試験をもっと楽に〜
teru0x1
0
2.1k
バッチシステムをクラウドネイティブにするために考えたこと
teru0x1
17
8.7k
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
プロダクトエンジニアに必要な「いい感じ」に作る能力 〜たくさん作れる時代に、どこまで作るかの決め方〜
jnishime_dresscode
2
1.4k
V8コントリビュート超入門
riyaamemiya
0
140
Jetpack Compose で挑む新聞紙面UI ─ 複合ジェスチャー・ポリゴン記事領域・適応的ページ構成という3つの壁/droidkaigi2026
nikkei_engineer_recruiting
0
230
AIとペアプロを始める。人とのペアプロをやめる。ペアプロの良さを改めて知る。もっと好きになった。 / Rediscovering Pair Programming
honyanya
1
250
Redmine 7.0で私が開発した新機能の狙いと背景
vividtone
1
110
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
430
Self Healing Rollouts: Automating Production Fixes with Agentic AI
kdubois
0
160
なぜSRE・セキュリティは評価されないのか?守りの組織を事業成長エンジンに変えた実践
cscengineer
PRO
3
2.3k
PfEingのアプローチで働こう
rindrics
0
180
こんなアーキテクチャ図は嫌だ BEYOND THE TIME: 半年後の自分へ贈る15のメッセージ / 15 of Anti-pattern in AWS Architecture Diagrams
naospon
3
250
AI-DLCって実際どう? 〜聞きたいこと全部聞いてみる〜
news_it_enj
0
230
ブラウザアプリの継続的パフォーマンスモニタリング (序) / Continuous Browser Application Performance Monitoring; Act 1
moznion
0
110
Featured
See All Featured
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
450
The World Runs on Bad Software
bkeepers
PRO
72
12k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
690
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
230
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
320
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
470
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
Navigating Team Friction
lara
192
16k
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