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
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
Search
Seitaro Fujigaki
March 12, 2026
Programming
1.4k
3
Share
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
Seitaro Fujigaki
March 12, 2026
Other Decks in Programming
See All in Programming
KagglerがMixSeekを触ってみた
morim
0
380
一度始めたらやめられない開発効率向上術 / Findy あなたのdotfilesを教えて!
k0kubun
4
3k
SREに優しいTerraform構成 modulesとstateの組み方
hiyanger
2
120
10年分の技術的負債、完済へ ― Claude Code主導のAI駆動開発でスポーツブルを丸ごとリプレイスした話
takuya_houshima
0
2.5k
アーキテクチャモダナイゼーションとは何か
nwiizo
17
5.1k
mruby on C#: From VM Implementation to Game Scripting (RubyKaigi 2026)
hadashia
2
340
AWS re:Invent 2025の少し振り返り + DevOps AgentとBacklogを連携させてみた
satoshi256kbyte
3
160
VueエンジニアがReactを触って感じた_設計の違い
koukimiura
0
170
L’IA au service des devs : Anatomie d'un assistant de Code Review
toham
0
250
Swift Concurrency Type System
inamiy
0
530
TiDBのアーキテクチャから学ぶ分散システム入門 〜MySQL互換のNewSQLは何を解決するのか〜 / tidb-architecture-study
dznbk
1
170
Coding at the Speed of Thought: The New Era of Symfony Docker
dunglas
0
4.9k
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Fireside Chat
paigeccino
42
3.9k
The browser strikes back
jonoalderson
0
970
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
110
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
260
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.9k
Design in an AI World
tapps
0
190
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
190
How to Talk to Developers About Accessibility
jct
2
180
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Transcript
ポーリング処理廃止による イベント駆動アーキテクチャへの移行 Go Junction #1
自己紹介 所属 • CyberAgent / MGDX • 薬急便(医療系SaaS) • バックエンド兼SRE
最近の趣味 • プレミアリーグ観戦⚽ • 旅⾏✈ @eiaou_f フジガキ セイタロウ 藤垣 成汰朗
予約検索の既存アーキテクチャ ‧各クライアントでポーリング ‧ポーリング間隔: 30sec ‧1回あたりのAPIコール数: 9回 予約検索APIで 2,000 req/sec
課題 高負荷 スケーラビリティへ の懸念 非効率な リソース利用
問題の本質 ポーリングの根本的な問題 は何か?
問題の本質 データに変更があってもなくても、定期的にリクエストが発生する = 無駄なリクエストが多い
変更があったときにサーバーから クライアントへ通知すれば良いのでは…!
サーバープッシュ型の通信方式 選択肢 メリット デメリット WebSocket リアルタイム性が 高い 双方向通信が可能 低レイテンシ 通知用途には過剰機能
接続管理が複雑 スケーリングが難しい ※ Server-Sent Events ブラウザネイティブ対応 HTTP/1.1で動作 自動再接続あり 接続管理が複雑 スケーリングが難しい ※ gRPC Server Streaming 型安全・バイナリ効率が良い モバイル/BFF構成と相性◎ ブラウザはgRPC-Web経由で導入コス ト高 接続管理が複雑 スケーリングが難しい ※ ※接続がPodに固定されるため、別 Podに届いたイベントを他 Podの接続クライアントへ転送する仕組みが別途必要
サーバーからクライアントへの通信方式 選択肢 メリット デメリット WebSocket リアルタイム性が高い 双方向通信が可能 低レイテンシ 通知用途には過剰機能 接続管理が複雑
スケーリングが難しい ※ Server-Sent Events ブラウザネイティブ対応 HTTP/1.1で動作 自動再接続あり 接続管理が複雑 スケーリングが難しい ※ gRPC Server Streaming 型安全・バイナリ効率が良い モバイル/BFF構成と相性◎ ブラウザはgRPC-Web経由で導入コス ト高 接続管理が複雑 スケーリングが難しい ※ ※接続がPodに固定されるため、別 Podに届いたイベントを他 Podの接続クライアントへ転送する仕組みが別途必要
もう少し簡単な⽅法はないのか?
ありました
新アーキテクチャ 1. 予約サービスからイベント発⽕ 2. Pub/Subにメッセージを配信 3. イベント伝播サービスが購読 4. イベント伝播サービスがFirestoreの薬局別 ドキュメントを更新
5. 薬局ドキュメントを監視しているフロント エンドがFirestoreの変更をリアルタイム検 知 6. 予約取得APIから予約データを取得
なぜFirestore? • リアルタイム同期機能が標準装備 ◦ SDKを使うだけで、⾯倒な接続管理なしにリアルタイム同期が実現可能 • スケーラビリティ ◦ クライアント数の増加に対して、インフラ側での対応が不要 •
薬局ごとのドキュメント分離 ◦ 各薬局が⾃⾝に関係するドキュメントのみを購読するため、他の薬局のイベントなど不要 なデータを受信することがない • 既存のGoogle Cloud環境との親和性 ◦ すでにGKEやPub/Subを使⽤していたため、同じエコシステム内で完結できる点も⼤きな メリットでした
短期間に多数のイベントが発⽣した 場合、そのままクライアントに伝播 すると、都度APIを呼び出してしまう 結局⼤量のリクエストが発⽣! 課題:短時間に⼤量のイベントが発⽣するケース
Cloud Tasksを使ったスロットリング 機構を導⼊ ⼀定時間内に発⽣した複数のイベント を、1回の通知にまとめる APIリクエストの集中を回避! 解決策:Cloud Tasksによるスロットリング
リアーキテクチャ後の結果 定性的 • 予約⼀覧更新のリアルタイム性の向上 定量的 指標 改善前 改善後 削減率 予約検索APIの秒間リクエスト数
約2,000/秒 約1,000/秒 50% DBコスト 100% 70% 30%
• 問題 ◦ ポーリング処理によりAPIサーバーやDBへの負荷が⾼い状況 • 解決策 ◦ Firestoreを利⽤することで、サーバーからクライアントへのイベント通知を実現し、ポー リング処理から移⾏することができた ◦
Cloud Tasksを利⽤してスロットリング機構を導⼊し、⼀定期間のイベントを1つのイベン トにまとめることに成功 • 結果 ◦ 対象APIの秒間リクエスト数が半減 ◦ DBコストも30%程度削減成功 まとめ
ご清聴ありがとうございました