TL;DR

  • 外部サービスの呼び出しに長い時間がかかるワークフローは、状態を保存してメッセージを待ちながら進む。これをサーガと呼ぶ。
  • このようなワークフローは、一連の小さなワークフローとして考えられる。

内容

Modeling Workflows as Pipelines の一節である。

外部サービスの呼び出しにとても長い時間がかかるケースを考える。マイクロサービスアーキテクチャのほか、検証を機械ではなく人が行い、作業に 1 日かかるような場合である。このとき、ステップの実行には次の処理が必要になる。

  1. サービスを呼び出す前に、状態をストレージに保存する。
  2. サービスが終わったことを知らせるメッセージを待つ。
  3. メッセージを受け取ったら、ストレージから状態を読み込み直し、次のステップに進む。

このようなワークフローをサーガと呼ぶ。各ステップの状態を保存する必要があるので、通常の非同期呼び出しよりも時間がかかる。

この場合、全体を 1 つのワークフローではなく、一連の小さなワークフローと考えることができる。小さなワークフローは、事前にストレージから読み込んだデータを入力として受け取る。そして、元の状態から新しい状態に遷移させ、その状態を永続化する。

イベントや状態の数が増えて状態遷移が複雑になった場合は、プロセスマネージャを作る必要があるかもしれない。

キーワード