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

ポーリング処理廃止によるイベント駆動アーキテクチャへの移行

 ポーリング処理廃止によるイベント駆動アーキテクチャへの移行

Avatar for Seitaro Fujigaki

Seitaro Fujigaki

March 12, 2026
Tweet

Other Decks in Programming

Transcript

  1. 自己紹介 所属 • CyberAgent / MGDX • 薬急便(医療系SaaS) • バックエンド兼SRE

    最近の趣味 • プレミアリーグ観戦⚽ • 旅⾏✈   @eiaou_f フジガキ セイタロウ 藤垣 成汰朗
  2. サーバープッシュ型の通信方式 選択肢 メリット デメリット WebSocket リアルタイム性が 高い 双方向通信が可能 低レイテンシ 通知用途には過剰機能

    接続管理が複雑 スケーリングが難しい ※ Server-Sent Events ブラウザネイティブ対応 HTTP/1.1で動作 自動再接続あり 接続管理が複雑 スケーリングが難しい ※ gRPC Server Streaming 型安全・バイナリ効率が良い モバイル/BFF構成と相性◎ ブラウザはgRPC-Web経由で導入コス ト高 接続管理が複雑 スケーリングが難しい ※ ※接続がPodに固定されるため、別 Podに届いたイベントを他 Podの接続クライアントへ転送する仕組みが別途必要
  3. サーバーからクライアントへの通信方式 選択肢 メリット デメリット WebSocket リアルタイム性が高い 双方向通信が可能 低レイテンシ 通知用途には過剰機能 接続管理が複雑

    スケーリングが難しい ※ Server-Sent Events ブラウザネイティブ対応 HTTP/1.1で動作 自動再接続あり 接続管理が複雑 スケーリングが難しい ※ gRPC Server Streaming 型安全・バイナリ効率が良い モバイル/BFF構成と相性◎ ブラウザはgRPC-Web経由で導入コス ト高 接続管理が複雑 スケーリングが難しい ※ ※接続がPodに固定されるため、別 Podに届いたイベントを他 Podの接続クライアントへ転送する仕組みが別途必要
  4. 新アーキテクチャ 1. 予約サービスからイベント発⽕ 2. Pub/Subにメッセージを配信 3. イベント伝播サービスが購読 4. イベント伝播サービスがFirestoreの薬局別 ドキュメントを更新

    5. 薬局ドキュメントを監視しているフロント エンドがFirestoreの変更をリアルタイム検 知 6. 予約取得APIから予約データを取得
  5. なぜFirestore? • リアルタイム同期機能が標準装備 ◦ SDKを使うだけで、⾯倒な接続管理なしにリアルタイム同期が実現可能 • スケーラビリティ ◦ クライアント数の増加に対して、インフラ側での対応が不要 •

    薬局ごとのドキュメント分離 ◦ 各薬局が⾃⾝に関係するドキュメントのみを購読するため、他の薬局のイベントなど不要 なデータを受信することがない • 既存のGoogle Cloud環境との親和性 ◦ すでにGKEやPub/Subを使⽤していたため、同じエコシステム内で完結できる点も⼤きな メリットでした
  6. • 問題 ◦ ポーリング処理によりAPIサーバーやDBへの負荷が⾼い状況 • 解決策 ◦ Firestoreを利⽤することで、サーバーからクライアントへのイベント通知を実現し、ポー リング処理から移⾏することができた ◦

    Cloud Tasksを利⽤してスロットリング機構を導⼊し、⼀定期間のイベントを1つのイベン トにまとめることに成功 • 結果 ◦ 対象APIの秒間リクエスト数が半減 ◦ DBコストも30%程度削減成功 まとめ