← プロジェクト一覧へ
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 が、自前で作らずに手に入る。