← プロジェクト一覧へ
DevOps & ツール
スケジュールジョブ & ワークフロー
プロセス内 cron から耐久性のある Temporal ワークフローへ
サービスを立ち上げ · Temporal への移行を共同主導 · 2024年12月 — 2025年9月
Go Temporal Kafka gRPC MySQL/GORM
プロジェクト背景
払い出しジョブはプロセス内 cron で動いていた。リトライはなく、どのテナントで失敗したかも見えず、途中で止まった実行を再開する手段もなかった。
主な技術ポイント
01
多通貨のキャッシュバックとロイヤルティボーナスの払い出しを、一意の注文 ID 付きで Kafka 経由でウォレットに入金
02
Temporal SDK、指数バックオフのリトライポリシー、ワーカーレジストリ
03
払い出しジョブを、テナントごとに子ワークフローを1つずつファンアウトする親ワークフローとして再構築。入金メッセージの発行に失敗した場合は補償ステップを実行
04
ハートビート・ページング付きアクティビティによる毎日のセグメンテーション再分類
05
冪等に作成される Temporal Schedule としてのゲストデータクリーンアップ
コア実装
1
テナントごとの親子ワークフロー
親ワークフローがテナントを列挙し、テナントごとに子ワークフローを1つ起動する。各子ワークフローは一意の注文 ID で払い出しを行い、発行に失敗した場合は補償する。
Why: 1つのテナントの失敗が他をブロックしなくなり、各子ワークフローを個別にリトライ・確認できる。
技術的意思決定
| 技術的意思決定 | 選択 | 代替案 | 理由 |
|---|---|---|---|
| スケジューラー | Temporal | 手書きのリトライ付きプロセス内 cron | 耐久性のある実行、バックオフ付きリトライ、ハートビート、すべての実行を確認できる UI が、自前で作らずに手に入る。 |