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
クラウドのスケーリングの力で5時間 かかるバッチジョブを10分に短縮する / Reduce t...
Search
Genki Ogasawara
September 06, 2024
1
19
クラウドのスケーリングの力で5時間 かかるバッチジョブを10分に短縮する / Reduce the batch job time by a 36th using the power of scaling in the public cloud
Genki Ogasawara
September 06, 2024
Tweet
Share
More Decks by Genki Ogasawara
See All by Genki Ogasawara
サーバレスで挑む IoT プロジェクトの現実解 / Real solutions for the IoT project using serverless service
genkiogasawara
1
220
IT知識ゼロからのスタートで、 事業部における内製開発をどうやって 推進してきたか?/How did we promote in-house development by starting from scratch?
genkiogasawara
1
200
クラウドネイティブな省エネサービスの内製開発で、BizDevOpsを実現する / Achieving BizDevOps in in-house development of cloud-native energy-saving services
genkiogasawara
2
870
エンジニアゼロの組織から内製開発の DX をどう実現したのか / How did we achieve DX in in-house development in an organization with zero engineers?
genkiogasawara
9
4.1k
入門 AWS Amplify Gen2 / Introduction to AWS Amplify Gen2
genkiogasawara
1
880
ソフトウェア開発の生産性と信頼性向上に取り組んだ結果、どうなった?/What has changed as a result of efforts to improve software development productivity and reliability?
genkiogasawara
0
95
「魔の川」「死の谷」をクラウド ネイティブなチーム作りで越境する / Crossing the "Devil River" and "Death Valley" by building cloud-native teams
genkiogasawara
2
530
Amazon CodeCatalyst で実現!開発環境とCI/CDパイプライン
genkiogasawara
0
7.8k
Featured
See All Featured
Code Review Best Practice
trishagee
65
17k
Mobile First: as difficult as doing things right
swwweet
222
9k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
520
The World Runs on Bad Software
bkeepers
PRO
65
11k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Being A Developer After 40
akosma
87
590k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Fireside Chat
paigeccino
34
3.1k
Become a Pro
speakerdeck
PRO
26
5k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Facilitating Awesome Meetings
lara
50
6.1k
Transcript
(FOLJ0HBTBXBSB ΫϥυͷεέʔϦϯάͷྗͰ࣌ؒ ͔͔ΔόονδϣϒΛʹॖ͢Δ 1 ,(94UVEZ(SPVQ
⾃⼰紹介 Genki (⼩笠原 元気) ・最近のトピック CNDS で基調講演をしました 海外旅⾏デビュー(シンガポール) リッツ・カールトンデビュー @geivk
2
Agenda 今回実現したいタスク 制約条件 / タスク分割のポイント クラウドサービスの選定 スケーリングを実現するアーキテクチャ まとめ 3
Agenda 今回実現したいタスク 制約条件 / タスク分割のポイント クラウドサービスの選定 スケーリングを実現するアーキテクチャ まとめ 4
エピローグ 5 ローカルで動かすプログラムが5時間もかかる・・・ パソコンが買えないならクラウドを使えばいいじゃない
やりたいこと • 毎⽇・特定の時間にジョブ(プログラム)を実⾏したい • 1ジョブ5時間かかるため短縮したい 6
前提条件 • 1バッチジョブ=複数タスクで構成される 7 タスク タスク タスク バッチジョブ タスク タスク
タスクの内容 8 処理1 リクエスト HTTP レスポンス 処理2 50〜100回リクエスト後のデータを もとに数値計算を実⾏ 処理3
対向サービス データベース 書き込み タ ス ク
Agenda 今回実現したいタスク 制約条件 / タスク分割のポイント クラウドサービスの選定 スケーリングを実現するアーキテクチャ まとめ 9
制約条件 • ネットワーク帯域が⾼速であること • できるだけ安価に済ませたい • 対向サービスの性質上、⽇本からリクエストする必要あり • クラウドサービスの上限値 10
クラウドサービスの選定のポイント ◆ 300〜400タスクをどの粒度に分割するのか ◆ バッチジョブに適したネットワーク環境を提供するサービスの検証 ◆ 安価なサービスの利⽤上の制約条件 11
クラウドサービスの選定のポイント ◆ 300〜400タスクをどの粒度に分割するのか ◆ バッチジョブに適したネットワーク環境を提供するサービスの検証 ◆ 安価なサービスの利⽤上の制約条件 12
クラウドサービスのコスト • クラウドサービスは基本従量課⾦制 • 並列実⾏しても、コスト影響が少ない → 10時間×1インスタンス ≒ 1時間×10インスタンス 13
タスクにかかる時間 14 タスク 60〜90秒 タスク 60〜90秒 60〜90秒 タスク 300〜400 タスク
5〜7時間 ・・・ ジ ョ ブ A
3つのジョブ 15 ジョブA ジョブB ジョブC 対向サービスA 対向サービスC 対向サービスB 認証 認証
認証
ジョブを適正に分割するには︖ 16 タスク タスク タスク ・・・ ジョブ A-1 ジョブ A-360
・・・
ジョブを適正に分割するには︖ 17 リクエスト ・・・ ジョブ A-1 ジョブ A-360 ・・・ 認
証 リクエスト 認 証 リクエスト 認 証 ◆ 認証情報の呼び出し︓3回→400回に増える =認証情報サービスの利⽤料⾦が133倍になる ◆ ジョブを 360 個並列で動かす =クラウドサービスの上限に引っかかってしまう
タスクの内容(再掲) 18 処理1 リクエスト HTTP レスポンス 処理2 50〜100回リクエスト後のデータを もとに数値計算を実⾏ 処理3
対向サービス データベース 書き込み タ ス ク
3つのジョブ 19 ジョブA ジョブB ジョブC データベース 認証
ジョブを適正に分割するには︖ 20 リクエスト ・・・ ジョブ A-1 ジョブ A-36 ・・・ 認
証 リクエスト 10タスクごとに36分割 リクエスト リクエスト リクエスト ・・・ 認 証 リクエスト リクエスト リクエスト
Agenda 今回実現したいタスク 制約条件 / タスク分割のポイント クラウドサービスの選定 スケーリングを実現するアーキテクチャ まとめ 21
クラウドサービスの選定 • 定期実⾏したい • ワークフロー化したい • 並列実⾏したい • コストを削減したい 22
クラウドサービスの選定 • 定期実⾏したい → Amazon EventBridge Scheduler • ワークフロー化したい →
Amazon Step Functions • 並列実⾏したい → Amazon Elastic Container Service • コストを削減したい → Amazon Fargate Spot 23
Agenda 今回実現したいタスク 制約条件 / タスク分割のポイント クラウドサービスの選定 スケーリングを実現するアーキテクチャ まとめ 24
アーキテクチャ 25
アーキテクチャのポイント(実装者向け) • Step Functions で Map を使い、ECS タスクを並列起動 26
アーキテクチャのポイント(実装者向け) • Step Functions で Map を使い、ECS タスクを並列起動 • Step
Functions のネイティブ API の RunTask Fargate の起動は可能、Fargate Spot の起動はできない → Step Functions で CallAwsService API 経由で RunTask を実⾏ 27
アーキテクチャのポイント(実装者向け) • Step Functions で Map を使い、ECS タスクを並列起動 • Step
Functions のネイティブ API の RunTask Fargate の起動は可能、Fargate Spot の起動はできない → Step Functions で CallAwsService API 経由で RunTask を実⾏ • CallAwsService API 経由の RunTask では エラーハンドリングができなくなるため、別で実装する必要がある 28
Agenda 今回実現したいタスク 制約条件 / タスク分割のポイント クラウドサービスの選定 スケーリングを実現するアーキテクチャ まとめ 29
まとめ • クラウドのスケーリングメリットを最⼤限活かし、5時間かかるタスクを適切 に分割し並列実⾏することで、30分に短縮できた • ビジネス要件・クラウドサービスの上限値などさまざまな制約条件がトレード オフにになるため、注意深く検討する必要がある 30
Thank you!