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
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
Seitaro Fujigaki
March 12, 2026
Other Decks in Programming
See All in Programming
act1-costs.pdf
sumedhbala
0
150
Agentic UI
manfredsteyer
PRO
0
220
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
570
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.6k
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.7k
はてなアカウント基盤 State of the Union
cockscomb
1
1.2k
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
330
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.7k
OS アップデート対応の取り組み方がもっと共有されてほしい
andpad
0
110
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
220
これからAgentCoreを触る方へトレンドはGatewayです
har1101
6
460
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
340
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
46
8.2k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
320
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
210
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
340
Unsuck your backbone
ammeep
672
58k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
760
It's Worth the Effort
3n
188
29k
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%程度削減成功 まとめ
ご清聴ありがとうございました