Temporal
エンジニアのためのWebチートシート
Temporalは、障害に強い分散ワークフローオーケストレーションプラットフォームです。 Workflow、Activity、Worker、Signal/Query、リトライポリシー、CLIコマンドなどをチートシートにまとめました。
コア概念
基本コンポーネント
| 概念 | 説明 |
|---|---|
| Workflow | 決定論的なオーケストレーション関数。障害発生時も正確に再開できます。数秒〜数年にわたる実行をサポート。 |
| Activity | 実際のビジネスロジック(I/O、API呼び出し、DB操作等)を実行するユニット。失敗・タイムアウト・リトライが可能。 |
| Worker | Task Queueをポーリングし、Workflow/Activityを実行するプロセス。アプリケーションコードをホストします。 |
| Task Queue | ワーカーがリッスンする名前付きバッファ。Workflowの実行をWorkerにルーティングします。 |
| Signal | 実行中のWorkflowに送信できる外部イベント。ワークフローの挙動を動的に変更します。 |
| Query | Workflowの状態をリアルタイムに読み取る操作。状態を変更せずに現在の値を取得します。 |
| Child Workflow | Workflow内からネストして実行するサブWorkflow。複雑なプロセスの分割に使用します。 |
| ContinueAsNew | 長期実行Workflowの履歴を新しい実行にリセットするパターン。メモリ効率を保ちます。 |
| Namespace | Workflowの論理的な分離単位。環境(dev/staging/prod)やチームごとに使い分けます。 |
Workflow定義
基本的なWorkflow
proxyActivitiesでActivityを呼び出すWorkflowの基本パターンです。
並列Activity実行
Promise.allで複数のActivityを並列に実行するパターンです。
Workflowの制約
| ルール |
|---|
| 決定論的であること(同じ入力で常に同じ結果を返す) |
| 直接I/Oを行わない(I/OはActivityに委譲する) |
| setTimeout等のネイティブタイマーを使わない(workflow.sleep()を使う) |
| 引数と戻り値はシリアライズ可能なJSON型であること |
| グローバル状態を変更しない |
| Math.random()を使わない(workflow.random()を使う) |
Activity定義
基本的なActivity
外部API呼び出しやDB操作を行うActivityの定義です。
ハートビート
長時間実行するActivityで進捗を報告するパターンです。
Worker設定
Worker起動
WorkflowとActivityを実行するWorkerの設定です。
Workflowの開始(Client)
Temporal Clientを使ってWorkflowを開始するコードです。
シグナル & クエリ
シグナル定義
外部からWorkflowに送信するシグナルの定義と受信パターンです。
クエリ定義
Workflowの状態を読み取るクエリの定義パターンです。
外部からのシグナル送信
Clientを使ってWorkflowにシグナルを送信するコードです。
リトライ & タイムアウト
タイムアウト種別
| タイムアウト | 対象 |
|---|---|
| Workflow Execution Timeout | リトライ・ContinueAsNew含む全体の実行時間上限 |
| Workflow Run Timeout | 単一Workflow実行の時間上限 |
| Schedule-To-Close Timeout | Activityがスケジュールされてから完了するまでの上限(リトライ含む) |
| Start-To-Close Timeout | Activityの1回の実行時間上限 |
| Schedule-To-Start Timeout | Activityがスケジュールされてから開始するまでの上限 |
| Heartbeat Timeout | ハートビート間隔の上限(超過するとActivityがタイムアウト) |
リトライポリシー
Activity Retry Policy
Workflow-level Timeout
CLIコマンド
開発サーバー
| コマンド | 説明 |
|---|---|
| temporal server start-dev | ローカル開発サーバーを起動します。 |
Workflow操作
| コマンド | 説明 |
|---|---|
| temporal workflow start --task-queue q --type Wf | Workflowの実行を開始します。 |
| temporal workflow describe -w <id> | Workflowの詳細情報を表示します。 |
| temporal workflow list | Workflowの一覧を表示します。 |
| temporal workflow show -w <id> | Workflowのイベント履歴を表示します。 |
| temporal workflow signal -w <id> --name sig | 実行中のWorkflowにシグナルを送信します。 |
| temporal workflow query -w <id> --name q | Workflowにクエリを送信します。 |
| temporal workflow terminate -w <id> | Workflowを強制終了します。 |
| temporal workflow cancel -w <id> | Workflowにキャンセルリクエストを送信します。 |
| temporal workflow reset -w <id> --event-id N | Workflowを特定のポイントからリセットします。 |
その他
| コマンド | 説明 |
|---|---|
| temporal task-queue describe --task-queue q | Task Queueの情報を表示します。 |
| temporal activity complete -w <id> -a <aid> | Activityの完了を手動で報告します。 |
| temporal activity fail -w <id> -a <aid> | Activityの失敗を手動で報告します。 |
| temporal env get | 環境設定を表示します。 |
デプロイ & エコシステム
Temporal Cloud vs Self-Hosted
| 特性 | Temporal Cloud | Self-Hosted |
|---|---|---|
| 説明 | フルマネージド | 完全な制御 |
| Scaling | 自動スケーリング | 自己メンテナンス |
| Cost | 従量課金 | Infra + Ops |
対応SDK
| 言語 | ステータス |
|---|---|
| Go | 最も成熟したSDK |
| Java | 安定版・エンタープライズ利用多数 |
| TypeScript | 急成長中・人気No.1 |
| Python | 安定版 |
| .NET | 安定版 |
| PHP | コミュニティサポート |