Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FIFOキューで実現する Spring Bootの非同期処理とその性能評価方法

FIFOキューで実現する Spring Bootの非同期処理とその性能評価方法

2024/06/16 に、JJUG CCC 2024 Springで発表した、石塚と清水の資料です。

Recruit

June 19, 2024
Tweet

More Decks by Recruit

Other Decks in Technology

Transcript

  1. Copyright © Recruit.co., Ltd. All rights reserved. FIFOキューで実現する Spring Bootの非同期処理とその性能評価方法

    2024/06/16 (日) JJUG CCC 2024 Spring 株式会社リクルート HR Engineerグループ 石塚 崚斗/清水 海州
  2. 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
  3. Copyright © Recruit.co., Ltd. All rights reserved. 今日お伝えすること 2 明らかに「重い」処理を切り離すために

    非同期処理を導入します。技術的には Message QueueとMessage APIをク ラウド上に構築します。 非同期処理の実現方法 メッセージAPIのスループットを計測 して非同期処理の性能を評価します。 拡張性のためにある閾値に基づく オートスケーリングを実装します。 性能とスケーリング 「分離」は時として「局所化」した 非機能要件の把握を困難にしま す。マイクロサービス化における 落とし穴について説明します。 「分離」と「局所化」
  4. Chapter1 Chapter2 Chapter3 Chapter4 何をしているの? 課題とその解決方法は? もっと俯瞰したら? 5 min. 10

    min. 5 min. 5 min. 俯瞰したら? Copyright © Recruit.co., Ltd. All rights reserved. 今日の流れ 3
  5. Chapter1 Chapter2 Chapter3 Chapter4 何をしているの? 5 min. Copyright © Recruit.co.,

    Ltd. All rights reserved. 今日の流れ 課題とその解決方法は? 10 min. 5 min. 俯瞰したら? もっと俯瞰したら? 5 min. 4
  6. Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 7 リクルートのHRメディアに対して

    Web API を提供 AWS Cloud Web API ALB メディアX メディアY メディアZ
  7. Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 9 AWS

    Cloud Web API ALB メディアX メディアY メディアZ Web APIにPDF生成処理を実装 してPDFを連携する 安直な案
  8. Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 10 AWS

    Cloud Web API ALB メディアX メディアY メディアZ Web APIにPDF生成処理を実装 してPDFを連携する 安直な案 PDF生成は非常に「重い」処理
  9. Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 11 AWS

    Cloud Web API ALB メディアX メディアY メディアZ PDF生成は非常に「重い」処理 Web APIにPDF生成処理を実装 してPDFを連携する 安直な案
  10. Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 12 AWS

    Cloud Web API ALB メディアX メディアY メディアZ Message Queue 非同期処理を行うMessage APIで生成されたPDFを連携する 改善案
  11. Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 13 AWS

    Cloud Web API ALB メディアX メディアY メディアZ Message Queue Message API 非同期処理を行うMessage APIで生成されたPDFを連携する 改善案
  12. Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 14 AWS

    Cloud Web API ALB メディアX メディアY メディアZ Message Queue Message API 非同期処理を行うMessage APIで生成されたPDFを連携する 改善案 分離
  13. Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 15 AWS

    Cloud Web API ALB メディアX メディアY メディアZ Message Queue Message API 非同期処理を行うMessage APIで生成されたPDFを連携する 改善案 分離 局所化
  14. Chapter1 Chapter2 Chapter3 Chapter4 何をしているの? 5 min. Copyright © Recruit.co.,

    Ltd. All rights reserved. 今日の流れ 課題とその解決方法は? 10 min. 5 min. 俯瞰したら? もっと俯瞰したら? 5 min. 16
  15. Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? PDF連携が大幅に遅延 18

    AWS Cloud メディアX Message API Message Queue QueueにMessageが 大量に溜まってしまった メディアY メディアZ
  16. Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? PDF連携が大幅に遅延 19

    AWS Cloud メディアX Message API Message Queue > Messageが 入る速度 Message APIの 処理速度 メディアY メディアZ
  17. Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? スループット ほぼ無制限

    制限あり 配信 少なくとも1回 1回のみ 順序 可変 先入れ先出し Group id ×(付与できない) ◦(付与できる) 重複排除 ×(不可) ◦(可能)※ 一定時間再処理不可 重複排除処理を実装 22 標準キュー FIFOキュー
  18. Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? 重複排除処理を実装(As-Is) 23

    AWS Cloud Message API … × 10 を同時処理 不要な処理※が 含まれる ※ 同一会員の重複処理
  19. Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? 重複排除処理を実装(To-Be) 24

    AWS Cloud Message API … Group idごとに 1回だけ処理 Queueでは 重複排除しない Group id※付与 ※ 会員IDごと × 10 を同時処理
  20. Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? Message API

    1タスクが1msgを捌くのに要する時間を計測 27 1タスクで 8 [msg/s] = 1タスクで 0.125 [s/msg]
  21. 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
  22. Copyright © Recruit.co., Ltd. All rights reserved. 課題とその解決方法は? Message API

    FIFOキューによる重複排除 & ECSのAuto Scaling 29 AWS Cloud メディアX メディアY メディアZ Message Queue < Messageが 入る速度 Message APIの 処理速度
  23. Chapter1 Chapter2 Chapter3 Chapter4 何をしているの? 5 min. Copyright © Recruit.co.,

    Ltd. All rights reserved. 今日の流れ 課題とその解決方法は? 10 min. 5 min. 俯瞰したら? もっと俯瞰したら? 5 min. 30
  24. Copyright © Recruit.co., Ltd. All rights reserved. 俯瞰すると何が見えるの? 39 エンジニア

    手段の一部の つもり 完全な手段と 捉えた が抜け落ちた アーキテクト 当然 は作るもの
  25. Copyright © Recruit.co., Ltd. All rights reserved. 俯瞰すると何が見えるの? 40 目的

    PDFを10s以内に生成 手段 QueueとAPIの実装 選定 理由 ボトルネック局所化 水平拡張性の容易性 エンジニア アーキテクト
  26. Copyright © Recruit.co., Ltd. All rights reserved. 俯瞰すると何が見えるの? 41 目的

    PDFを10s以内に生成 手段 QueueとAPIの実装 選定 理由 ボトルネック局所化 水平拡張性の容易性 目的 PDFを10s以内に生成 手段 QueueとAPIの実装 選定 理由 ボトルネック局所化 水平拡張性の容易性 エンジニア アーキテクト
  27. Copyright © Recruit.co., Ltd. All rights reserved. 俯瞰すると何が見えるの? 46 「目的」をエンジニアに伝える

    アーキテクト エンジニア エンジニア 十分な 経験・能力 手段 目的 目的
  28. Chapter1 Chapter2 Chapter3 Chapter4 何をしているの? 5 min. Copyright © Recruit.co.,

    Ltd. All rights reserved. 今日の流れ 課題とその解決方法は? 10 min. 5 min. 俯瞰したら? もっと俯瞰したら? 5 min. 48
  29. Copyright © Recruit.co., Ltd. All rights reserved. 何をしているの? 49 AWS

    Cloud Web API ALB メディアX メディアY メディアZ Message Queue Message API 非同期処理を行うMessage APIで生成されたPDFを連携する 改善案 分離 局所化
  30. Copyright © Recruit.co., Ltd. All rights reserved. もっと俯瞰すると何が見えるの? 53 必要以上に「分離」されたマイクロサービス

    全体を結合して得られる機能要件は、 実現したい「コト」そのものである。 さらに機能要件には、 開発者の「常識」で補完されやすい性質がある。 機能要件は、 抜け漏れが発生することは少ない傾向にある。
  31. Copyright © Recruit.co., Ltd. All rights reserved. もっと俯瞰すると何が見えるの? 54 必要以上に「分離」されたマイクロサービス

    「機能要件以外」と定義される非機能要件は、 どのように「分離」され、 どのように「局所化」されているのか分かりにくい。 開発者に知識や経験がないと、 非機能要件の補完は難しいだろう。 したがって、各サービスの開発者が マイクロサービス全体の非機能要件を把握するのは、 非常に困難だろう。
  32. Copyright © Recruit.co., Ltd. All rights reserved. まとめ 60 明らかに「重い」処理を切り離すために

    非同期処理を導入した。技術的には Message QueueとMessage APIをク ラウド上に構築した。 非同期処理の実現方法 Message APIのスループットを計測し て非同期処理の性能を評価した。拡 張性のために許容バックログに基づ くAuto Scalingを実装した。 性能とスケーリング 「分離」は時として「局所化」した 非機能要件の把握を困難にする。 マイクロサービス化における落 とし穴を説明した。 「分離」と「局所化」