AWS Flow Framework 基本概念: 信頼性の高い実行 - AWS Flow Framework Java 用

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

AWS Flow Framework 基本概念: 信頼性の高い実行

非同期分散アプリケーションは、次のような従来のアプリケーションでは発生しない信頼性の問題に対処します。

  • 非同期分散コンポーネント (例: リモートシステムでの長時間コンポーネント) 間で信頼性の高い通信を提供する方法。

  • 特に長時間稼働アプリケーションなど、コンポーネントでエラーが発生するか、切断された場合に結果を紛失しない方法。

  • エラーが発生した分散コンポーネントに対処する方法。

アプリケーションは、AWS Flow Framework および Amazon SWF を使用してこれらの問題を解決します。長時間稼働しており、高い演算負荷や、ユーザーによる操作で非同期タスクが実行されている場合でも、信頼性が高く、予測可能な方法でワークフローを実行する Amazon SWF のメカニズムについて説明します。

信頼性の高い通信を保証する

AWS Flow Framework は Amazon SWF を使用して分散アクティビティワーカーにタスクをディスパッチし、その結果をワークフローワーカーに返すことによって、ワークフローワーカーとそのアクティビティワーカー間の信頼性の高い通信を実現します。Amazon SWF は、次の方法を使用して、ワーカーとそのアクティビティ間の信頼性の高い通信を確実にします。

  • Amazon SWF は、スケジュールされたアクティビティとワークフロータスクを永続的に保存し、一度だけ実行されることを保証します。

  • Amazon SWF では、アクティビティタスクを正常に実行して有効な結果を返すか、タスクが失敗したことをワークフローワーカーに通知することができます。

  • また、Amazon SWF は、完了した各アクティビティの結果を永続的に保存するか、失敗したアクティビティでは、エラー情報を保存します。

その後、AWS Flow Framework は、Amazon SWF のアクティビティ結果から、ワークフローの処理方法を決定します。

結果を保持する

ワークフロー履歴の維持

ペタバイトのデータのデータマイニングオペレーションを実行するアクティビティは、完了するのに数時間かかるのに対し、複雑なタスクを行うよう人間のワーカーに指示するアクティビティは数日間、場合によっては数週間かかる場合があります。

このようなシナリオに対応するために、AWS Flow Framework ワークフローおよびアクティビティは、完了するまでに長時間かかる場合があります。たとえば、ワークフロー実行では最大 1 年かかることがあります。信頼性の高い方法で長時間稼働プロセスを実行するには、継続的なワークフローの実行履歴を永続的に保存するメカニズムが必要です。

AWS Flow Framework では、Amazon SWF を使用してこの作業を行います。これにより、各ワークフローインスタンスの実行履歴が保持されます。ワークフローの履歴には、すべてのワークフローやアクティビティタスクのスケジュールや完了など、ワークフローに関する信頼性の高い完全な進行状況の記録が含まれます。

AWS Flow Framework アプリケーションでは、必要に応じてワークフロー履歴にアクセスすることができますが、通常、直接アクセスする必要はありません。ほとんどの場合、アプリケーションは、フレームワークからバックグラウンドでワークフロー履歴にアクセスできます。ワークフロー履歴の詳細については、「Amazon Simple Workflow Service デベロッパーガイド」の「Workflow History」(ワークフロー履歴) を参照してください。

ステートレスな実行

実行履歴を使用することで、ワークフローワーカーをステートレスにできます。ワークフローワーカーまたはアクティビティワーカーの複数のインスタンスがある場合、どのワーカーも任意のタスクを実行できます。Amazon SWF からタスクを実行する必要のあるステート情報はすべてワーカーに送信されます。

このアプローチにより、ワークフローの信頼性は高まります。たとえば、アクティビティワーカーが失敗しても、ワークフローをやり直す必要はありません。ワーカーを再起動するだけで、障害が発生したタイミングに関係なく、タスクがリストに入るとそのタスクリストがポーリングされ、処理されます。2 つ以上のワークフロー、アクティビティワーカーを別々に使用して、ワークフロー全体の耐障害性を強化します。ワーカーのいずれかに失敗した場合、それ以外のワーカーは、ワークフローの進行を妨げることなく、スケジュールされたタスクに対応し続けます。

エラーが発生した分散コンポーネントに対処する

アクティビティは一時的な切断などの一時的な理由でエラーになることが多いため、失敗したアクティビティを処理する一般的な方法として、アクティビティを再試行します。再試行プロセスを処理せずに、複雑なメッセージを引き渡す戦略を実装することによって、アプリケーションで AWS Flow Framework を使用することができます。この機能では、失敗したアクティビティを再試行する複数のメカニズムや、ワークフローでタスクの分散的な非同期実行を使用する組み込みの例外処理を行うメカニズムを使用できます。