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
WEAR のワークフロー実行基盤コストを何とかしたい
Search
mi.kobaaaa
December 15, 2023
Programming
0
1k
WEAR のワークフロー実行基盤コストを何とかしたい
ZOZO Kubernetes Night 登壇資料
https://zozotech-inc.connpass.com/event/299357/
mi.kobaaaa
December 15, 2023
Tweet
Share
More Decks by mi.kobaaaa
See All by mi.kobaaaa
WEARのEKSコストを救いたい
mikobaaaaa0920
1
3.2k
Other Decks in Programming
See All in Programming
Keeping it Ruby: Why Your Product Needs a Ruby SDK - RubyWorld 2024
envek
0
180
テスト自動化失敗から再挑戦しチームにオーナーシップを委譲した話/STAC2024 macho
ma_cho29
1
1.3k
あれやってみてー駆動から成長を加速させる / areyattemite-driven
nashiusagi
1
200
useSyncExternalStoreを使いまくる
ssssota
6
1k
ドメインイベント増えすぎ問題
h0r15h0
1
230
KMP와 kotlinx.rpc로 서버와 클라이언트 동기화
kwakeuijin
0
140
良いユニットテストを書こう
mototakatsu
5
2k
CSC305 Lecture 25
javiergs
PRO
0
130
クリエイティブコーディングとRuby学習 / Creative Coding and Learning Ruby
chobishiba
0
3.9k
フロントエンドのディレクトリ構成どうしてる? Feature-Sliced Design 導入体験談
osakatechlab
8
4.1k
テストコード文化を0から作り、変化し続けた組織
kazatohiei
2
1.5k
Refactor your code - refactor yourself
xosofox
1
260
Featured
See All Featured
Six Lessons from altMBA
skipperchong
27
3.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
Designing for humans not robots
tammielis
250
25k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.3k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
17
2.3k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
The Invisible Side of Design
smashingmag
298
50k
Transcript
WEAR のワークフロー実行基盤コストを何とかしたい 株式会社ZOZO ブランドソリューション開発本部 WEARバックエンド部 SREブロック 小林 未来 Copyright ©
ZOZO, Inc. ZOZO Kubernetes Night
© ZOZO, Inc. 本日お話しすること 自己紹介
© ZOZO, Inc. 株式会社ZOZO ブランドソリューション開発本部 WEARバックエンド部 SREブロック 小林 未来 •
@mirai_kobaaaaaa • ゆるふわ系SRE • 最近シェル芸にハマる
© ZOZO, Inc. 本日お話しすること 本日お話しすること
© ZOZO, Inc. 本日お話しすること • WEAR ワークフロー実行基盤のリプレイスについて ◦ 課題解決へのアプローチ ◦
ワークフロー実行基盤の課題 ◦ WEAR のワークフロー ◦ リプレイス後の効果 本日お話ししないこと • EKS (Amazon Elastic Kubernetes Service) の細かな仕様 • Kubernetes の概要、詳細 • Digdag についての概要、詳細
© ZOZO, Inc. WEAR のワークフロー
© ZOZO, Inc. WEAR のワークフロー ワークフローで処理している主な内容 • 各種ユーザー情報の登録、更新 • ユーザーコーディネート情報の更新
• 各種アイテム情報の連携、状態の更新 • ランキング関連情報の更新 • ショップ様情報の更新
© ZOZO, Inc. WEAR のワークフロー WEAR ワークフロー実行基盤の主要コンポーネント ワークフロー自体を実行する EKS Cluster
ワークフローエンジン ワークフローエンジン用のデータベース
© ZOZO, Inc. WEAR のワークフロー
© ZOZO, Inc. WEAR のワークフロー
© ZOZO, Inc. WEAR のワークフロー
© ZOZO, Inc. WEAR のワークフロー
© ZOZO, Inc. WEAR のワークフロー 今回お話しする範囲
© ZOZO, Inc. ワークフロー実行基盤の課題
© ZOZO, Inc. ワークフロー実行基盤の課題 サービス拡大と共にワークフロー数が飛躍的に増加
© ZOZO, Inc. ワークフロー実行基盤の課題 サービス拡大と共にワークフロー数が飛躍的に増加 Job の増加と比例し Fargate Node が大量に起動
© ZOZO, Inc. ワークフロー実行基盤の課題 サービス拡大と共にワークフロー数が飛躍的に増加 Job の増加と比例し Fargate Node が大量に起動
コスト効率性が課題に
© ZOZO, Inc. 課題解決へのアプローチ
© ZOZO, Inc. 課題解決へのアプローチ • 実測値に基づくリソース設定の見直し • ワークフロー実行基盤に適した基盤構成への変更
© ZOZO, Inc. 課題解決へのアプローチ 実測値に基づくリソース設定の見直し
© ZOZO, Inc. 課題解決へのアプローチ 実測値に基づくリソース設定の見直し • Datadog Metrics から直近数ヶ月の推移を確認
© ZOZO, Inc. 課題解決へのアプローチ 実測値に基づくリソース設定の見直し • 計測したデータを元に必要リソースを再計算 • 全ての Kubernetes
Manifest に反映し設定を更新
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 EKS
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 ➕ EKS Fargate
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 ➕ 今の WEAR では本当に最適なのか? EKS
Fargate
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • ワークフロー実行の流れを再考
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • ワークフロー実行の流れを再考 複数の workflow 実行中
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • ワークフロー実行の流れを再考 workflow2,4 が完了
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • ワークフロー実行の流れを再考 workflow5 が完了 workflow6
が開始
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • ワークフロー毎に起動する Pod タイミングはばらばら ◦
実は同時実行 Pod 数は多くない • Node が Job 毎に作成されている ◦ Fargate で Node = Pod 数で作成される ◦ Fargate は 1Node(Pod) 毎に課金が発生する EC2 に複数 Pod をまとめればコストを最適化できるのでは?
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • EKS on EC2 への変更懸念点
◦ 運用負荷が上がるのでは? ◦ Job Node のオートスケールはどうする?
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 運用負荷抑制へのアプローチ
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 運用負荷抑制へのアプローチ ◦ EC2 Node
はどのようにプロビジョニングする? ◦ EC2 起動テンプレートの管理はどうする? ◦ EKS バージョンアップ時の挙動制御は?
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 運用負荷抑制へのアプローチ ◦ EC2 Node
はどのようにプロビジョニングする? ◦ EC2 起動テンプレートの管理はどうする? ◦ EKS バージョンアップ時の挙動制御は? ▪ Fargate はスケール時に自動でプロビジョニング
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 運用負荷抑制へのアプローチ ◦ EC2 Node
はどのようにプロビジョニングする? ◦ EC2 起動テンプレートの管理はどうする? ◦ EKS バージョンアップ時の挙動制御は? ▪ Fargate はスケール時に自動でプロビジョニング ▪ 自前でゴールデンイメージを作るのは大変
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 運用負荷抑制へのアプローチ ◦ EC2 Node
はどのようにプロビジョニングする? ◦ EC2 起動テンプレートの管理はどうする? ◦ EKS バージョンアップ時の挙動制御は? ▪ Fargate はスケール時に自動でプロビジョニング ▪ 自前でゴールデンイメージを作るのは大変 ▪ Fargate は次起動時に新バージョン準拠になる
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 運用負荷抑制へのアプローチ ◦ Managed Node
Group を採用
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 運用負荷抑制へのアプローチ ◦ Managed Node
Group を採用 起動テンプレートを AWS 側で自動的に用意
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 運用負荷抑制へのアプローチ ◦ Managed Node
Group を採用 EKS バージョンアップ時に自 動で B/G アップデート
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • Job Node のオートスケール
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • Job Node のオートスケール ◦
Job Node のスケールイン / アウトはどうする? ◦ Node レベルのスケールアウトに時間がかかるのでは?
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • Job Node のオートスケール ◦
Job Node のスケールイン / アウトはどうする? ◦ Node レベルのスケールアウトに時間がかかるのでは? ▪ Fargate は Pod スケール時に自動でプロビジョニング
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • Job Node のオートスケール ◦
Job Node のスケールイン / アウトはどうする? ◦ Node レベルのスケールアウトに時間がかかるのでは? ▪ Fargate は Pod スケール時に自動でプロビジョニング ▪ Fargate と EC2 で時間の違いが発生する?
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • Job Node のオートスケール ◦
Karpenter を採用 https://karpenter.sh/より引用
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • Job Node のオートスケール ◦
Karpenter を採用 https://karpenter.sh/より引用 空き容量を計算して Node に Pod を配置
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • Job Node のオートスケール ◦
Karpenter を採用 https://karpenter.sh/より引用 Node に空きがない時は 必要な Node を追加起動
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • Job Node のオートスケール ◦
Karpenter を採用 https://karpenter.sh/より引用 Fargate とほぼ同等の Node スケール速度
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 最終的な EKS on EC2
構成
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 最終的な EKS on EC2
構成
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 最終的な EKS on EC2
構成 役割ごとに Node Group を作成
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 最終的な EKS on EC2
構成
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 最終的な EKS on EC2
構成 空き Node に Job を配置
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 最終的な EKS on EC2
構成
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 最終的な EKS on EC2
構成 Node 容量が足りない場合 新規 Node を追加
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 最終的な EKS on EC2
構成
© ZOZO, Inc. 課題解決へのアプローチ ワークフロー実行基盤に適した基盤構成への変更 • 最終的な EKS on EC2
構成 DaemonSet 以外の Pod が無い時は終了
© ZOZO, Inc. リプレイス後の効果
© ZOZO, Inc. リプレイス後の効果 リプレイス前とリプレイス後のコスト比較 30%程のコスト削減に成功
© ZOZO, Inc. リプレイス後の効果 パフォーマンスの変化 • ワークフロー実行自体が平均 20% 高速化 ◦
連続して実行される Job の起動が速くなっていた ◦ EC2 変更によるイメージキャッシュ影響が大きい
© ZOZO, Inc. まとめ
© ZOZO, Inc. まとめ • コスト効率性はとても大事 • リソースを最適化し続けるのも大事 • 「今」のサービスにとって最適か?を考え続けるのも大事
© ZOZO, Inc. まとめ 本日お話しした内容を Tech Blog でも公開しています。 詳しい設定や Terraform
コードなども記載していますので是非ご一読ください! ワークフロー実行基盤をFargateからEC2へ変更したらコストもパフォーマンスも改善できて幸せになった話
© ZOZO, Inc. We are hiring!
© ZOZO, Inc. ご清聴ありがとうございました!