Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
FIFOキューで実現する Spring Bootの非同期処理とその性能評価方法
Search
Recruit
PRO
June 19, 2024
Technology
1.6k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
FIFOキューで実現する Spring Bootの非同期処理とその性能評価方法
2024/06/16 に、JJUG CCC 2024 Springで発表した、石塚と清水の資料です。
Recruit
PRO
June 19, 2024
More Decks by Recruit
See All by Recruit
局所最適は悪ではない。壊れているのは指標です。量と質を同時に見る先行指標の設計
recruitengineers
PRO
2
300
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
9
2.5k
大規模フロントエンド開発におけるmonorepoという選択肢
recruitengineers
PRO
2
100
自律型 AI をセキュアに実装!Gemini と MIG で作る動的コード実行環境
recruitengineers
PRO
1
290
Google Cloud Next Tokyo 26登壇時のスクリプト
recruitengineers
PRO
0
280
つくって納得、つかって実感! 大規模言語モデルことはじめ ver2.0
recruitengineers
PRO
6
2.7k
ブラウザ研修 2026
recruitengineers
PRO
8
2.1k
事業価値と Engineering 2026年度版
recruitengineers
PRO
59
30k
トヨタ⽣産⽅式(TPS)⼊⾨
recruitengineers
PRO
3
1.5k
Other Decks in Technology
See All in Technology
How to Design Configuration for Rails Applications
willnet
1
1.1k
macOS Golden Gate 時代のMac管理
tategami
0
130
LambdaWebFunctionsを試してみた / exploring-lambda-web-functions
koukihosaka
1
390
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
220
初海外で注意すべきこと12選!!!安全快適なre:invent生活にするために
yuuuuuuu168
1
200
価値について
gree_tech
PRO
0
140
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
5
1.2k
オントロジーって 結局なにもの? AI エージェントに「意味」を渡す知識設計の話
greenmidori
0
260
JAWS-UGグッズ職人仕事の流儀
kentapapa
0
130
Claude Code on Bedrock で統制をかける小ネタ集/claude-code-bedrock-governance-tips
emiki
1
280
生成AI時代、PMは事業責任者に進化するともっと面白い〜PMだからこそ事業構造を動かせる時代に〜
kakehashi
PRO
0
320
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
230
Featured
See All Featured
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
950
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
The SEO Collaboration Effect
kristinabergwall1
1
600
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
450
Optimising Largest Contentful Paint
csswizardry
37
4k
Rails Girls Zürich Keynote
gr2m
96
14k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Ethics towards AI in product and experience design
skipperchong
2
440
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
Scaling GitHub
holman
464
140k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
280
Transcript
Copyright © Recruit.co., Ltd. All rights reserved. FIFOキューで実現する Spring Bootの非同期処理とその性能評価方法
2024/06/16 (日) JJUG CCC 2024 Spring 株式会社リクルート HR Engineerグループ 石塚 崚斗/清水 海州
Copyright © Recruit.co., Ltd. All rights reserved. 自己紹介 1 石塚
崚斗 Ishizuka Ryoto • エンジニア歴4年目 • チームリーダー • SRE → Backend/Frontend • AWS/Kotlin/Spring boot 清水 海州 Shimizu Kaishu • エンジニア歴2年目 • 案件推進担当 • Backend → SRE • Kotlin/Spring boot
Copyright © Recruit.co., Ltd. All rights reserved. 今日お伝えすること 2 明らかに「重い」処理を切り離すために
非同期処理を導入します。技術的には Message QueueとMessage APIをク ラウド上に構築します。 非同期処理の実現方法 メッセージAPIのスループットを計測 して非同期処理の性能を評価します。 拡張性のためにある閾値に基づく オートスケーリングを実装します。 性能とスケーリング 「分離」は時として「局所化」した 非機能要件の把握を困難にしま す。マイクロサービス化における 落とし穴について説明します。 「分離」と「局所化」
Chapter1 Chapter2 Chapter3 Chapter4 何をしているの? 課題とその解決方法は? もっと俯瞰したら? 5 min. 10
min. 5 min. 5 min. 俯瞰したら? Copyright © Recruit.co., Ltd. All rights reserved. 今日の流れ 3
Chapter1 Chapter2 Chapter3 Chapter4 何をしているの? 5 min. Copyright © Recruit.co.,
Ltd. All rights reserved. 今日の流れ 課題とその解決方法は? 10 min. 5 min. 俯瞰したら? もっと俯瞰したら? 5 min. 4
Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 5 質問に答えるだけで「早く」「簡単に」職務経歴書を作成できるサービス
Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 6 質問に答えるだけで「早く」「簡単に」職務経歴書を作成できるサービス
※ 画像はイメージです
Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 7 リクルートのHRメディアに対して
Web API を提供 AWS Cloud Web API ALB メディアX メディアY メディアZ
レジュメのPDFを 各メディアに連携せよ MISSION
Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 9 AWS
Cloud Web API ALB メディアX メディアY メディアZ Web APIにPDF生成処理を実装 してPDFを連携する 安直な案
Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 10 AWS
Cloud Web API ALB メディアX メディアY メディアZ Web APIにPDF生成処理を実装 してPDFを連携する 安直な案 PDF生成は非常に「重い」処理
Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 11 AWS
Cloud Web API ALB メディアX メディアY メディアZ PDF生成は非常に「重い」処理 Web APIにPDF生成処理を実装 してPDFを連携する 安直な案
Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 12 AWS
Cloud Web API ALB メディアX メディアY メディアZ Message Queue 非同期処理を行うMessage APIで生成されたPDFを連携する 改善案
Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 13 AWS
Cloud Web API ALB メディアX メディアY メディアZ Message Queue Message API 非同期処理を行うMessage APIで生成されたPDFを連携する 改善案
Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 14 AWS
Cloud Web API ALB メディアX メディアY メディアZ Message Queue Message API 非同期処理を行うMessage APIで生成されたPDFを連携する 改善案 分離
Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 15 AWS
Cloud Web API ALB メディアX メディアY メディアZ Message Queue Message API 非同期処理を行うMessage APIで生成されたPDFを連携する 改善案 分離 局所化
Chapter1 Chapter2 Chapter3 Chapter4 何をしているの? 5 min. Copyright © Recruit.co.,
Ltd. All rights reserved. 今日の流れ 課題とその解決方法は? 10 min. 5 min. 俯瞰したら? もっと俯瞰したら? 5 min. 16
PDF連携が大幅に遅延 障害発生
Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? PDF連携が大幅に遅延 18
AWS Cloud メディアX Message API Message Queue QueueにMessageが 大量に溜まってしまった メディアY メディアZ
Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? PDF連携が大幅に遅延 19
AWS Cloud メディアX Message API Message Queue > Messageが 入る速度 Message APIの 処理速度 メディアY メディアZ
性能試験が不十分だった 根本原因
1. 負荷の低減 • 重複排除処理を実装 2. 水平拡張性の担保 • Message APIが1msgを捌くのに要する時間を計測 •
ECSにAuto Scalingを実装 対策
Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? スループット ほぼ無制限
制限あり 配信 少なくとも1回 1回のみ 順序 可変 先入れ先出し Group id ×(付与できない) ◦(付与できる) 重複排除 ×(不可) ◦(可能)※ 一定時間再処理不可 重複排除処理を実装 22 標準キュー FIFOキュー
Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? 重複排除処理を実装(As-Is) 23
AWS Cloud Message API … × 10 を同時処理 不要な処理※が 含まれる ※ 同一会員の重複処理
Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? 重複排除処理を実装(To-Be) 24
AWS Cloud Message API … Group idごとに 1回だけ処理 Queueでは 重複排除しない Group id※付与 ※ 会員IDごと × 10 を同時処理
Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? 重複排除処理を実装 25
Group idの付与 Group idごとに1回だけ処理
Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? Message APIが1msgを捌くのに要する時間を計測
26 AWS Cloud Message API … 負荷掛け スループット計測
Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? Message API
1タスクが1msgを捌くのに要する時間を計測 27 1タスクで 8 [msg/s] = 1タスクで 0.125 [s/msg]
Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? ECSにAuto Scalingを実装
28 AWS Cloud Message API PDF連携のSLOを10sとすると Message API 1タスクあたりの許容バックログは 10 [s] / 0.125 [s/msg] = 80 [msg] Auto Scaling
Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? Message API
FIFOキューによる重複排除 & ECSのAuto Scaling 29 AWS Cloud メディアX メディアY メディアZ Message Queue < Messageが 入る速度 Message APIの 処理速度
Chapter1 Chapter2 Chapter3 Chapter4 何をしているの? 5 min. Copyright © Recruit.co.,
Ltd. All rights reserved. 今日の流れ 課題とその解決方法は? 10 min. 5 min. 俯瞰したら? もっと俯瞰したら? 5 min. 30
性能試験が不十分だった 根本原因
丁寧に性能試験すればいい 恒久対策
面白くない
Copyright © Recruit.co., Ltd. All rights reserved. 俯瞰すると何が見えるの? 34 エンジニア
アーキテクト
Copyright © Recruit.co., Ltd. All rights reserved. 俯瞰すると何が見えるの? 35 エンジニア
アーキテクト
Copyright © Recruit.co., Ltd. All rights reserved. 俯瞰すると何が見えるの? 36 エンジニア
アーキテクト 当然 は作るもの
Copyright © Recruit.co., Ltd. All rights reserved. 俯瞰すると何が見えるの? 37 エンジニア
アーキテクト 当然 は作るもの
Copyright © Recruit.co., Ltd. All rights reserved. 俯瞰すると何が見えるの? 38 エンジニア
アーキテクト 当然 は作るもの が抜け落ちた
Copyright © Recruit.co., Ltd. All rights reserved. 俯瞰すると何が見えるの? 39 エンジニア
手段の一部の つもり 完全な手段と 捉えた が抜け落ちた アーキテクト 当然 は作るもの
Copyright © Recruit.co., Ltd. All rights reserved. 俯瞰すると何が見えるの? 40 目的
PDFを10s以内に生成 手段 QueueとAPIの実装 選定 理由 ボトルネック局所化 水平拡張性の容易性 エンジニア アーキテクト
Copyright © Recruit.co., Ltd. All rights reserved. 俯瞰すると何が見えるの? 41 目的
PDFを10s以内に生成 手段 QueueとAPIの実装 選定 理由 ボトルネック局所化 水平拡張性の容易性 目的 PDFを10s以内に生成 手段 QueueとAPIの実装 選定 理由 ボトルネック局所化 水平拡張性の容易性 エンジニア アーキテクト
目的からの逸脱
1. 「目的」をエンジニアに伝える • 手段とその選定理由はエンジニアに任せる 2. 「目的から逸脱する可能性が低い手段」をエンジニアに伝える • エンジニアは手段を実装するだけ 考え得る方法
Copyright © Recruit.co., Ltd. All rights reserved. 俯瞰すると何が見えるの? 44 「目的」をエンジニアに伝える
アーキテクト エンジニア エンジニア 目的 目的
Copyright © Recruit.co., Ltd. All rights reserved. 俯瞰すると何が見えるの? 45 「目的」をエンジニアに伝える
アーキテクト エンジニア エンジニア 手段 目的 目的
Copyright © Recruit.co., Ltd. All rights reserved. 俯瞰すると何が見えるの? 46 「目的」をエンジニアに伝える
アーキテクト エンジニア エンジニア 十分な 経験・能力 手段 目的 目的
Copyright © Recruit.co., Ltd. All rights reserved. 俯瞰すると何が見えるの? 47 「目的から逸脱する可能性が低い手段」をエンジニアに伝える
アーキテクト エンジニア 手段 手段
Chapter1 Chapter2 Chapter3 Chapter4 何をしているの? 5 min. Copyright © Recruit.co.,
Ltd. All rights reserved. 今日の流れ 課題とその解決方法は? 10 min. 5 min. 俯瞰したら? もっと俯瞰したら? 5 min. 48
Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 49 AWS
Cloud Web API ALB メディアX メディアY メディアZ Message Queue Message API 非同期処理を行うMessage APIで生成されたPDFを連携する 改善案 分離 局所化
非機能要件を担保するために Web APIをMessage QueueとMessage APIに「分離」した。 「局所化」された非機能要件を満たせなかった。 今回の事象
「分離」するマイクロサービス化が流行っているが 「局所化」された非機能要件を忘れていないか?
Copyright © Recruit.co., Ltd. All rights reserved. もっと俯瞰すると何が見えるの? 52 必要以上に「分離」されたマイクロサービス
Copyright © Recruit.co., Ltd. All rights reserved. もっと俯瞰すると何が見えるの? 53 必要以上に「分離」されたマイクロサービス
全体を結合して得られる機能要件は、 実現したい「コト」そのものである。 さらに機能要件には、 開発者の「常識」で補完されやすい性質がある。 機能要件は、 抜け漏れが発生することは少ない傾向にある。
Copyright © Recruit.co., Ltd. All rights reserved. もっと俯瞰すると何が見えるの? 54 必要以上に「分離」されたマイクロサービス
「機能要件以外」と定義される非機能要件は、 どのように「分離」され、 どのように「局所化」されているのか分かりにくい。 開発者に知識や経験がないと、 非機能要件の補完は難しいだろう。 したがって、各サービスの開発者が マイクロサービス全体の非機能要件を把握するのは、 非常に困難だろう。
Copyright © Recruit.co., Ltd. All rights reserved. もっと俯瞰すると何が見えるの? 55 必要以上に「分離」されたマイクロサービス
個別最適=全体最適
Copyright © Recruit.co., Ltd. All rights reserved. もっと俯瞰すると何が見えるの? 56 必要以上に「分離」されたマイクロサービス
Copyright © Recruit.co., Ltd. All rights reserved. もっと俯瞰すると何が見えるの? 57 必要以上に「分離」されたマイクロサービス
個別最適 個別最適 個別最適 個別最適
Copyright © Recruit.co., Ltd. All rights reserved. もっと俯瞰すると何が見えるの? 58 必要以上に「分離」されたマイクロサービス
個別最適 個別最適 個別最適 個別最適 ≠ 全体最適
どのような要件を「局所化」するために、 どのようにコンポーネントを「分離」するのか。 「分離」された全体のアーキテクチャにおいて、 「局所化」された要件はどこが担保するのか。 大規模プロダクトにおいては、 「分離」と「局所化」のバランスを整え、 全体を最適化するコーディネータが必要になるだろう。
Copyright © Recruit.co., Ltd. All rights reserved. まとめ 60 明らかに「重い」処理を切り離すために
非同期処理を導入した。技術的には Message QueueとMessage APIをク ラウド上に構築した。 非同期処理の実現方法 Message APIのスループットを計測し て非同期処理の性能を評価した。拡 張性のために許容バックログに基づ くAuto Scalingを実装した。 性能とスケーリング 「分離」は時として「局所化」した 非機能要件の把握を困難にする。 マイクロサービス化における落 とし穴を説明した。 「分離」と「局所化」