AmazonはAmazon Simple Workflow Service Recipesを含むホワイトペーパーとコードサンプルを公開した。
Amazon Simple Workflow Service (SWF)とは。
... スケーラブルでリジリエント(素早く回復する)なアプリケーションを構築するためのワークフローサービスです。金融や保険アプリケーションのビジネスプロセスを自動化したり、複雑なデータ分析アプリケーションを構築したり、クラウドインフラサービスを管理したりする場合に、Amazon SWFはアプリケーション内のすべての処理ステップを確実にコーディネートします。
SWFの大きなアドバンテージはフルマネージドなサービスであるという点である。チューニングやパッチ当て、ソフトウェア更新を含む管理やハードウェア調達に追加の投資をする必要は無い。SWFはシンプルなAPIを提供しており、EC2や他のインターネットに接続している機器からワークフローの実行を行うことができる。SWFはポーリングベースであり、その結果EC2や企業内の機器で稼働しているプログラムはSWFへ新しいタスクを投げるだけで良い。また、AWS管理コンソールはワークフローの現在のステータスや実行履歴に関する詳細なレポートを提供している。
SWFは新規または既存のアプリケーションへディサイダー(decider)のコードを追加する必要がある。ディサイダーは処理順やタイミング、失敗条件を指定して、処理コーディネートロジックを定義するために用いられる。また、アクティビティ(activity)を実装する必要がある。アクティビティは処理の各ステップを実行するアプリケーションコンポーネントである。ディサイダーとアクティビティによってワークフロー(workflow)が形成される。ディサイダーとアクティビティが配置されると、SWFサービスはアプリケーションのために処理をコーディネートしていく。
Amazon SWFには多くのアドバンテージがあるが、SWFの実装を行うことは必ずしも簡単ではない。それは、サンプルや実装例が少ないことにある。Amazonによる新しいホワイトペーパーはこの隙間を埋めており、ワークフローパターンの実装例やそれらのパターンを実装しているコードサンプルを豊富に提供している。下記のパターンや実装のグループが提供されている。
· 単一アクティビティの繰り返し実行
o アクティビティを指定回数繰り返すためにループを使用する
o アクティビティを指定回数、非同期に再帰的に実行する
o アクティビティを条件を満たしている間だけ非同期に再帰的に実行する
· 複数アクティビティの並列実行
o 指定回数のアクティビティのフォーク/ジョイン
o 動的に数が決められるアクティビティのフォーク/ジョイン
o 複数のアクティビティをフォークし、最初のアクティビティの結果を用いて完了とする
· ワークフローロジックの条件付き実行
o 条件に基づいていくつかのアクティビティのうちの一つを実行する
o 条件に基づいて大きなグループの複数のアクティビティを実行する
· アクティビティタスクの手動による完了
o マニュアルアクティビティを実装する
· 非同期実行に関する例外ハンドリング
o アクティビティなどのような非同期コードによって発生する例外のハンドリングとtry/catch/finallyを用いたリソースのクリーンナップ
o 他の非同期コードによって発生する例外の別の非同期コード呼び出しによるハンドリング
· 失敗した非同期コードのリトライ
o アクティビティが完了するまで、または特定の上限にリトライの試行が到達するまでリトライ
o リトライ間で次第に長い時間待機するようにし、特定の時点で処理を停止するような指数関数的なリトライ方針を用いることにより自動的にフレームワークがアクティビティをリトライするようにアクティビティにアノテーションを付加する
o RetryDecoratorクラスを用いて指数関数的なリトライの実装。これにより、実行時にリトライポリシーを指定したり、必要に応じて変更することができるようになる
o AsyncRetryingExecutorクラスを用いた指数関数的なリトライの実装。これにより、実行時にリトライポリシーの指定が可能になる。さらに、各リトライの試行においてアクティビティを実行するためにAsyncRetryingExecutor が呼び出す実行時メソッドを実装するためのAsyncRunnable抽象クラスの利用に関しても紹介する
o カスタムリトライ方針の実装
· ワークフローへのシグナル
o 先に進む前に、指定した時間シグナルを待機するワークフローの実装
新しく登場したSWFレシピを用いることにより、新しいカスタムワークフローの実装をより簡単に始めることができるようになる