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

メッセージキュー型の非同期処理から Temporal 移行へ

Avatar for shibutani shibutani
April 27, 2026
4.8k

メッセージキュー型の非同期処理から Temporal 移行へ

Avatar for shibutani

shibutani

April 27, 2026

Transcript

  1. 自己紹介 shibutani / @s_k_526 株式会社 LayerX Platform Engineering 部 Enabling

    チーム 2025年新卒入社 最近はCLI盆栽に勤しむ(特にcc〇〇とかagent- 〇〇を作っています) © LayerX Inc. 2
  2. 前提:対象システムの構造 システム構成 非同期処理が必要な場面 © LayerX Inc. マルチテナントシステムのバックエンド 複数の Connect RPC

    サーバーがドメインごとに分かれて稼働 長時間・重い処理が日常的に存在 ドキュメント処理パイプライン LLM を使った長時間処理 6
  3. これまでの非同期処理基盤 Source EventBridge SQS Worker Connect RPC Server © LayerX

    Inc. EventBridge → SQS → Worker → Connect RPC のパイプライン 7
  4. この構成のメリットとデメリット メリット デメリット © LayerX Inc. 非同期処理が通常の Connect RPC と同じ形で書ける

    開発、デバッグに既存のエコシステムがそのまま利用できる 同期と非同期のリクエストが同じ Connect RPC サーバーに到達 非同期は重く長いので、同期 API のレイテンシ・スループットを劣化させる 状態永続化も無く、途中再開やリトライロジックがアプリ側に必要 8
  5. Temporal とは © LayerX Inc. Workflow を中心とする Durable Execution エンジン

    Workflow の状態を自動永続化 → 障害が起きても続きから再開可能 Worker / Task Queue モデルで処理の分散・スケールを担保 実行状況・履歴をWeb UI で可視化・失敗リトライも Web UIで可能 10
  6. 比較検討した 3 案 Option 概要 A EventBridge → SQS ->

    Worker → Temporal B 各サービスから直接 Workflow を起動 C EventBridge → Lambda → Temporal © LayerX Inc. 12
  7. A: 既存Worker拡張の問題点 SQS と Temporal Task Queue の二重管理 StartWorkflow Source

    EventBridge SQS Worker Connect RPC Server Temporal © LayerX Inc. Temporal 自体がキューイング・リトライ・可視化を備える それなのに SQS 側のキューも並行で運用 13
  8. A: 既存Worker拡張の問題点 既存 Worker の責務肥大化 StartWorkflow Source EventBridge SQS Worker

    Connect RPC Server Temporal © LayerX Inc. 元々 RPC コール特化の設計 そこに Temporal 起動が乗り、単一 Worker が 2 種類の下流を抱える 14
  9. B: 直接 Workflow 起動する場合の問題点 サービス間の依存関係記述が分散する StartWorkflow StartWorkflow Source A Temporal

    Source B © LayerX Inc. サービス境界を超えるようなイベントの場合に、依存関係が各サービス内に記述される システム全体として依存関係のトラッキングが困難になる 15
  10. B: 直接 Workflow 起動する場合の問題点 1:N 起動の責務が発火元に寄る StartWorkflow StartWorkflow Source A

    Temporal Source B © LayerX Inc. 1イベントから複数 Workflow を起動する場合、発火元が順次 StartWorkflow を呼ぶ 片方だけ失敗した際のリトライ、フォールバックを発火元が自前で管理する必要 16
  11. C: EventBridge → Lambda → Temporal を採用 publish StartWorkflow Source

    EventBridge Lambda Temporal © LayerX Inc. キュー基盤は Temporal Task Queue に一元化 専用 Lambda を新設、既存 Worker と責務を分離 1:N 起動・リトライは EventBridge / Lambda 側で吸収 EvB がバッファとなり、Temporal 障害が発火元に直接波及しない 17
  12. Before / After Before Source EventBridge SQS Worker Connect RPC

    Server After publish StartWorkflow Source EventBridge Lambda Temporal Proto 由来の ⽣成ルーティング テーブル © LayerX Inc. 18
  13. Protobuf 一枚で Source から Temporal まで繋がる © LayerX Inc. Workflow

    / Activity の Go コードは cludden/protoc-gen-go-temporal で生成 protobuf option を用いて ルーティングコードを生成する内製 protoc pluginを用意 20
  14. コンテキスト伝搬 コンテキストとは なぜTemporalで問題になるのか © LayerX Inc. 1リクエストの処理を通して引き回したい横断情報 テナント ID /

    リクエスト ID 分散トレース情報 (trace ID / span ID) Workflow と Activity は別プロセス・ネットワーク分離で動作 Go の context.Context や Node.js の AsyncLocalStorage はそのまま渡らない 非同期処理でもこれらの横断情報は引き継ぎたい 22
  15. Goの場合 Temporal SDK 公式の ContextPropagator インターフェースの実装を内製ライブラリで提供 © LayerX Inc. Client

    → Workflow → Activity の各境界で Header 経由で値を受け渡し Workflow / Activity 内では context.Context に載せ替えて参照 アプリは Worker / Client 起動時に注入し、 context.Context から取り出すだけ 23
  16. TypeScriptの場合 TS SDK の Interceptor + AsyncLocalStorage で自作 © LayerX

    Inc. Client → Workflow → Activity の各境界で Header 経由で値を受け渡し Workflow / Activity 内では AsyncLocalStorage に載せ替えて参照 24
  17. なぜ専用の認可トークンが必要になるのか ここでいう認可トークンとは なぜ Temporal で問題になるのか © LayerX Inc. API 呼び出し時に「誰として呼んだか」を示す情報

    Temporal Activity からAPIを叩く際にも必要 WorkflowはDurable → 中断、再開を許容される長寿命 Activityは何度もリトライされ得る → 冪等が前提 上記より通常の短命な認可トークンは使えない 26
  18. トークン引き換え方式 引き換え ContextPropagator 再引き換え User Token API Server Workflow ⽤

    Token Workflow / Activity User Token 社内 API / 外部 API © LayerX Inc. StartWorkflow のタイミングで、認可トークンを Workflow 専用の長寿命認可トークンに引き換える コンテキスト伝搬で Workflow / Activity に伝搬 Activity 内で再度認可トークンに引き換える 27
  19. まとめ © LayerX Inc. 移行:ワークロード混在と状態永続化不足を解消するため Temporal を採用 アーキテクチャ:EventBridge → Lambda

    → Temporal の構成を採用 浸透に向けて①:Protobuf からのインフラ生成の仕組み作り 浸透に向けて②:コンテキスト伝搬の仕組み作り 浸透に向けて③:冪等なActivity向けの認可トークン発行方式の整備 29