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.3k
3
Share
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
Seitaro Fujigaki
March 12, 2026
Other Decks in Programming
See All in Programming
Smarter Angular mit Transformers.js & Prompt API
christianliebel
PRO
1
120
感情を設計する
ichimichi
5
1.2k
存在論的プログラミング: 時間と存在を記述する
koriym
5
780
ファインチューニングせずメインコンペを解く方法
pokutuna
0
270
Reactive ❤️ Loom: A Forbidden Love Story
franz1981
2
220
飯MCP
yusukebe
0
480
AI時代の脳疲弊と向き合う ~言語学としてのPHP~
sakuraikotone
1
1.8k
20260320登壇資料
pharct
0
160
「効かない!」依存性注入(DI)を活用したAPI Platformのエラーハンドリング奮闘記
mkmk884
0
300
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
3
500
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
540
Go_College_最終発表資料__外部公開用_.pdf
xe_pc23
0
130
Featured
See All Featured
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
120
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
260
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.6k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
64
54k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
170
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
From π to Pie charts
rasagy
0
160
Darren the Foodie - Storyboard
khoart
PRO
3
3.1k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
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%程度削減成功 まとめ
ご清聴ありがとうございました