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
メッセージキュー型の非同期処理から Temporal 移行へ
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
shibutani
April 27, 2026
1.1k
1
Share
メッセージキュー型の非同期処理から Temporal 移行へ
shibutani
April 27, 2026
More Decks by shibutani
See All by shibutani
はじめてのOSS開発からみえたGo言語の強み
shibukazu
4
1.4k
全自動コードレビューの夢 〜実際に活用されるAIコードレビューの実現に向けて〜
shibukazu
11
5.5k
Perceiver: General Perception with Iterative [輪講発表資料]
shibukazu
0
110
Hybrid Autoregressive Transducer [輪講発表資料]
shibukazu
0
380
Featured
See All Featured
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
110
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
The browser strikes back
jonoalderson
0
970
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
10k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Paper Plane (Part 1)
katiecoart
PRO
0
6.6k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
98
Technical Leadership for Architectural Decision Making
baasie
3
330
Designing for humans not robots
tammielis
254
26k
Transcript
メッセージキュー型の非同期処理から Temporal 移行へ ── アーキテクチャ選定と浸透のための取り組み shibutani / @s_k_526 2026 年
4 月 27 日 Background Job Talk
自己紹介 shibutani / @s_k_526 株式会社 LayerX Platform Engineering 部 Enabling
チーム 2025年新卒入社 最近はCLI盆栽に勤しむ(特にcc〇〇とかagent- 〇〇を作っています) © LayerX Inc. 2
今日の内容
今日の内容 © LayerX Inc. メッセージキュー型の非同期処理から Temporal への移行 浸透のための取り組み①:Protobuf からのインフラコード生成 浸透のための取り組み②:コンテキスト伝搬
浸透のための取り組み③:Temporal向け認可トークン 4
1. メッセージキュー型の非同期処理から Temporal への移行
前提:対象システムの構造 システム構成 非同期処理が必要な場面 © LayerX Inc. マルチテナントシステムのバックエンド 複数の Connect RPC
サーバーがドメインごとに分かれて稼働 長時間・重い処理が日常的に存在 ドキュメント処理パイプライン LLM を使った長時間処理 6
これまでの非同期処理基盤 Source EventBridge SQS Worker Connect RPC Server © LayerX
Inc. EventBridge → SQS → Worker → Connect RPC のパイプライン 7
この構成のメリットとデメリット メリット デメリット © LayerX Inc. 非同期処理が通常の Connect RPC と同じ形で書ける
開発、デバッグに既存のエコシステムがそのまま利用できる 同期と非同期のリクエストが同じ Connect RPC サーバーに到達 非同期は重く長いので、同期 API のレイテンシ・スループットを劣化させる 状態永続化も無く、途中再開やリトライロジックがアプリ側に必要 8
独立した非同期処理基盤が欲しい 要件 → これらを満たす基盤として、Temporal を採用 © LayerX Inc. 同期処理 とワークロードを物理的に分離
状態永続化・途中再開・リトライを基盤側で担保 運用の可視性(実行状況・失敗調査) 9
Temporal とは © LayerX Inc. Workflow を中心とする Durable Execution エンジン
Workflow の状態を自動永続化 → 障害が起きても続きから再開可能 Worker / Task Queue モデルで処理の分散・スケールを担保 実行状況・履歴をWeb UI で可視化・失敗リトライも Web UIで可能 10
どう組み込むか ── アーキテクチャ選定
比較検討した 3 案 Option 概要 A EventBridge → SQS ->
Worker → Temporal B 各サービスから直接 Workflow を起動 C EventBridge → Lambda → Temporal © LayerX Inc. 12
A: 既存Worker拡張の問題点 SQS と Temporal Task Queue の二重管理 StartWorkflow Source
EventBridge SQS Worker Connect RPC Server Temporal © LayerX Inc. Temporal 自体がキューイング・リトライ・可視化を備える それなのに SQS 側のキューも並行で運用 13
A: 既存Worker拡張の問題点 既存 Worker の責務肥大化 StartWorkflow Source EventBridge SQS Worker
Connect RPC Server Temporal © LayerX Inc. 元々 RPC コール特化の設計 そこに Temporal 起動が乗り、単一 Worker が 2 種類の下流を抱える 14
B: 直接 Workflow 起動する場合の問題点 サービス間の依存関係記述が分散する StartWorkflow StartWorkflow Source A Temporal
Source B © LayerX Inc. サービス境界を超えるようなイベントの場合に、依存関係が各サービス内に記述される システム全体として依存関係のトラッキングが困難になる 15
B: 直接 Workflow 起動する場合の問題点 1:N 起動の責務が発火元に寄る StartWorkflow StartWorkflow Source A
Temporal Source B © LayerX Inc. 1イベントから複数 Workflow を起動する場合、発火元が順次 StartWorkflow を呼ぶ 片方だけ失敗した際のリトライ、フォールバックを発火元が自前で管理する必要 16
C: EventBridge → Lambda → Temporal を採用 publish StartWorkflow Source
EventBridge Lambda Temporal © LayerX Inc. キュー基盤は Temporal Task Queue に一元化 専用 Lambda を新設、既存 Worker と責務を分離 1:N 起動・リトライは EventBridge / Lambda 側で吸収 EvB がバッファとなり、Temporal 障害が発火元に直接波及しない 17
Before / After Before Source EventBridge SQS Worker Connect RPC
Server After publish StartWorkflow Source EventBridge Lambda Temporal Proto 由来の ⽣成ルーティング テーブル © LayerX Inc. 18
2. 浸透のための取り組み① Protobuf からのインフラコード生成
Protobuf 一枚で Source から Temporal まで繋がる © LayerX Inc. Workflow
/ Activity の Go コードは cludden/protoc-gen-go-temporal で生成 protobuf option を用いて ルーティングコードを生成する内製 protoc pluginを用意 20
3. 浸透のための取り組み② コンテキスト伝搬
コンテキスト伝搬 コンテキストとは なぜTemporalで問題になるのか © LayerX Inc. 1リクエストの処理を通して引き回したい横断情報 テナント ID /
リクエスト ID 分散トレース情報 (trace ID / span ID) Workflow と Activity は別プロセス・ネットワーク分離で動作 Go の context.Context や Node.js の AsyncLocalStorage はそのまま渡らない 非同期処理でもこれらの横断情報は引き継ぎたい 22
Goの場合 Temporal SDK 公式の ContextPropagator インターフェースの実装を内製ライブラリで提供 © LayerX Inc. Client
→ Workflow → Activity の各境界で Header 経由で値を受け渡し Workflow / Activity 内では context.Context に載せ替えて参照 アプリは Worker / Client 起動時に注入し、 context.Context から取り出すだけ 23
TypeScriptの場合 TS SDK の Interceptor + AsyncLocalStorage で自作 © LayerX
Inc. Client → Workflow → Activity の各境界で Header 経由で値を受け渡し Workflow / Activity 内では AsyncLocalStorage に載せ替えて参照 24
4. 浸透のための取り組み③ Temporal向け認可トークン
なぜ専用の認可トークンが必要になるのか ここでいう認可トークンとは なぜ Temporal で問題になるのか © LayerX Inc. API 呼び出し時に「誰として呼んだか」を示す情報
Temporal Activity からAPIを叩く際にも必要 WorkflowはDurable → 中断、再開を許容される長寿命 Activityは何度もリトライされ得る → 冪等が前提 上記より通常の短命な認可トークンは使えない 26
トークン引き換え方式 引き換え ContextPropagator 再引き換え User Token API Server Workflow ⽤
Token Workflow / Activity User Token 社内 API / 外部 API © LayerX Inc. StartWorkflow のタイミングで、認可トークンを Workflow 専用の長寿命認可トークンに引き換える コンテキスト伝搬で Workflow / Activity に伝搬 Activity 内で再度認可トークンに引き換える 27
まとめ
まとめ © LayerX Inc. 移行:ワークロード混在と状態永続化不足を解消するため Temporal を採用 アーキテクチャ:EventBridge → Lambda
→ Temporal の構成を採用 浸透に向けて①:Protobuf からのインフラ生成の仕組み作り 浸透に向けて②:コンテキスト伝搬の仕組み作り 浸透に向けて③:冪等なActivity向けの認可トークン発行方式の整備 29
ご清聴ありがとうございました