AWS Flow Framework 基本概念: 分散実行 - AWS Flow Framework for Java

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Flow Framework 基本概念: 分散実行

ワークフローインスタンスは、本質的に、複数のリモートコンピュータ上で実行されるアクティビティやオーケストレーションロジックにまたがる仮想実行スレッドです。Amazon SWF と AWS Flow Framework は、次の方法で仮想 CPU 上のワークフローインスタンスを管理するオペレーティングシステムとして機能します。

  • 各インスタンスの実行状態を管理する。

  • インスタンス間で切り替える。

  • インスタンスの実行を切り替え時点で再開する。

ワークフローを再生する

アクティビティは長期的に実行される可能性があるため、完了するまでワークフローをブロックするのは望ましくありません。その代わりに、AWS Flow Framework は、再生 メカニズムを使用して、ワークフロー実行を管理します。これにより、Amazon SWF で管理されるワークフロー履歴を使用して、エピソードのワークフローを実行します。

各エピソードは、各アクティビティを一度だけ実行するワークフローロジックを再生し、Promise オブジェクトが準備状態になるまで、アクティビティと非同期メソッドが実行されないようにします。

ワークフロースターターは、ワークフロー実行を開始する際、最初の再生エピソードを開始します。フレームワークは、ワークフローのエントリポイントメソッドを呼び出し、次のように動作します。

  1. アクティビティ完了に依存しないすべてのワークフロータスク (例: すべてのアクティビティクライアントメソッドの呼び出し) を実行します。

  2. 実行するためにスケジュールが設定されるアクティビティのリストを Amazon SWF に渡します。最初のエピソードでは、このリストは、Promise に依存しないアクティビティのみで構成されており、ただちに実行することができます。

  3. エピソードが完了したことを Amazon SWF に通知します。

Amazon SWF は、ワークフロー履歴にアクティビティタスクを保存し、それらのタスクをアクティビティリストに配置して、実行用にスケジュールを設定します。アクティビティワーカーは、タスクリストをポーリングし、タスクを実行します。

タスクを完了すると、アクティビティワーカーはその結果を Amazon SWF に返します。これにより、結果がワークフロー実行履歴に記録された後、ワークフローワーカーの新しいワークフロータスクのスケジュールを設定するために、ワークフロータスクリストにその結果を配置します。ワークフローワーカーはタスクリストをポーリングし、タスクを受け取ると、次のように次の再生エピソードを実行します。

  1. フレームワークは、ワークフローのエントリポイントメソッドを再度実行し、次の操作を行います。

    • アクティビティ完了に依存しないすべてのワークフロータスク (例: すべてのアクティビティクライアントメソッドの呼び出し) を実行します。ただし、フレームワークによって実行履歴がチェックされるため、アクティビティタスクが重複している場合はスケジュール設定されません。

    • 履歴から、完了したアクティビティタスクを確認し、そのようなアクティビティに依存する非同期ワークフローメソッドがある場合には実行します。

  2. 実行できるワークフロータスクがすべて完了すると、フレームワークは、Amazon SWF にレポートを返します。

    • 最後のエピソード以降、入力 Promise<T> オブジェクトが準備状態になったアクティビティのリストが Amazon SWF に渡されるため、実行用にスケジュールを設定できます。

    • 追加のアクティビティタスクがエピソードで生成されていないが、未完了のアクティビティがある場合、フレームワークは、エピソードが完了したことを Amazon SWF に通知します。その後、もう 1 つのアクティビティが完了するまで待機し、次の再生エピソードを開始します。

    • エピソードで、追加のアクティビティタスクが生成されておらず、アクティビティがすべて完了している場合、フレームワークは、ワークフロー実行が完了したことを Amazon SWF に通知します。

再生の動作例については、「AWS Flow Framework for Java の再生動作」を参照してください。

再生と非同期ワークフローメソッド

メソッドでは、すべての入力 Promise<T> オブジェクトが準備状態になるまで実行が延期されるため、非同期ワークフローメソッドは、多くの場合、アクティビティとほとんど同じように使用されます。ただし、再生メカニズムでは、アクティビティとは異なる方法で非同期メソッドを処理します。

  • 再生では、非同期メソッドが一度だけ実行されるとは限りません。入力 Promise オブジェクトの準備ができるまで非同期メソッドの実行は延期されますが、その後のエピソードのメソッド用に実行されます。

  • 非同期メソッドが完了すると、新しいエピソードは開始しません。

非同期ワークフローの再生例については、「AWS Flow Framework for Java の再生動作」で確認できます。

再生とワークフロー実装

ほとんどの場合、再生メカニズムの詳細は気にする必要はありません。これらは基本的に裏側で起こる内容です。ただし、再生には、ワークフロー実装に 2 つの重要な意味があります。

  • 再生では、タスクを複数回繰り返すため、ワークフローメソッドを使用して長期実行タスクを実行しないでください。非同期ワークフローメソッドの場合でも、通常は複数回実行されます。代わりに、長時間実行するタスクにはアクティビティを使用します。したがって、再生はアクティビティを 1 回だけ実行します。

  • ワークフローロジックは、完全に決定論的でなければなりません。エピソードごとに同じ制御フローパスを使用する必要があります。たとえば、制御フローパスは、現在の時間に依存しないものにします。再生の詳細な説明および決定論の要件については、「非決定論」を参照してください。