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
FIFOキューで実現する Spring Bootの非同期処理とその性能評価方法
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Recruit
PRO
June 19, 2024
Technology
1.5k
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
AIネイティブ時代における 開発組織の役割と拡張の可能性
recruitengineers
PRO
2
210
開発が速く安くなった後の話 AI時代のソフトウェアエンジニアリング組織論 #devsumi
recruitengineers
PRO
42
30k
双方向推薦システムにおける長期的マッチング最大化に向けた代理目的関数の設計と実証
recruitengineers
PRO
1
150
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
200
Model Routerを使った逐次LLM選択による毀損低減効果の検証
recruitengineers
PRO
2
80
ストリーム処理基盤のFlink移行検証と適材適所の実践
recruitengineers
PRO
2
120
AI 時代の Platform Engineering
recruitengineers
PRO
3
510
巨大プラットフォームを進化させる「第3のROI」
recruitengineers
PRO
2
3.7k
データ戦略を加速させる プラットフォーム エンジニアリングと進化的アーキテクチャ
recruitengineers
PRO
3
130
Other Decks in Technology
See All in Technology
2年前に削除したPHPクラスが、 ある日突然決済をエラーにした
ykagano
1
840
事業成長とAI活用を止めないデータ基盤アーキテクチャの設計思想
hiracky16
0
720
セキュリティ研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
4
6.6k
AI時代におけるエンジニアの新たな役割──FDEとクオリアの探求/登壇資料(戸井田 裕貴)
hacobu
PRO
0
450
書籍セキュアAPIについて
riiimparm
0
330
変更し続けられるシステムをどう保つか — AI時代のSSoTという設計原則
kawauso
1
1.3k
Jitera Company Deck
jitera
0
570
OPENLOGI Company Profile for engineer
hr01
1
75k
データ活用研修 問いの発見と仮説構築【MIXI 26新卒技術研修】
mixi_engineers
PRO
1
300
AI時代の開発生産性を捉え直す — 経営と現場をつなぐ「開発組織のオブザーバビリティ」— / AI Dev Ex Conference 2026
tkyowa
1
1.6k
ここは地獄!つらい朝会を体験することで、チームとしてのより良い振る舞いに気づくワークショップ / The stand-up meeting from hell in the game industry
scrummasudar
0
330
Webアプリ認証の全体像 / The Big Picture of Web App Authentication
kitano_yuichi
1
450
Featured
See All Featured
Done Done
chrislema
186
16k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
760
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
350
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
360
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
45k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
500
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
260
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
So, you think you're a good person
axbom
PRO
2
2.1k
Fireside Chat
paigeccino
42
4k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
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を実装した。 性能とスケーリング 「分離」は時として「局所化」した 非機能要件の把握を困難にする。 マイクロサービス化における落 とし穴を説明した。 「分離」と「局所化」