読者です 読者をやめる 読者になる 読者になる

aws memo

AWS関連の備忘録 (※本ブログの内容は個人的見解であり、所属組織及び企業の意見を代弁するものではありません。1年以上古いエントリは疑ってかかってください)

訳:SWF : クラウドを拡張するSimple Workflow Service

Expanding the Cloud – The Amazon Simple Workflow Service - All Things Distributed

http://www.allthingsdistributed.com/2012/02/Amazon-Simple-Workflow-Service.html

超意訳

===

今日、AWSは開発者向けの新サービス Amazon Simple Workflow Service をリリースした。Amazon SWFはスケーラブルな分散アプリケーションを構築するためのオーケストレーションサービスである。複数の子となるタスクが特定の順序で(動的な条件セットに基づき)実行されるアプリケーションがよくある。AWS SWFは、開発者がとても容易に設計・開発でき、クラウドとオンプレミスの両方で動き、フローをコーディネイトできる。Amazon SWFは登録されたワーカーをまたいだ負荷分散するようなタスクの実行を管理する。内部タスクの依存関係も重視し、並列度も適切にハンドリングし、子ワークフローも実行する。

 非同期・分散プロセスに依存しているスケーラブルなアプリケーションの数は増えている。自律的な分散コンポーネントの設計により、負荷が増えた時に、開発者が独立してアプリケーションのパーツをデプロイしたりスケールアウトしたりすることが柔軟になってきた。非同期・分散モデルは疎結合とスケーラビリティを選べる利点があるが、増加するレイテンシやリモート通信につきものの低信頼性を扱わなくてはならない。 開発者は、この問題を克服するために、複雑なインフラ上で書くことを強いられている。同期をとるために複雑なロジックを使って、メッセージキューとデータベースを呼び出したりしている。この「配管工事(plumbing)」が、ビジネスロジックとは本来無関係で、不必要にアプリケーションのコードを複雑にし、メンテナンスを困難にしている。

Amazon SWFは、deciderプロセスによってコーディネイトされるオーケストレーションタスクでアプリケーションを構築可能にする。タスクは論理的な仕事の単位を表し、アプリケーションコンポーネント(実行コード、スクリプト、Web Service呼び出し、人間のアクション)が実際の実行を行う。開発者は、進捗のトラッキングや状態を維持するような複雑さによる心配をせずに、実装とオーケストレーションの完全な制御ができる。

開発者は、タスク(task)を行うためのworkerを実装する。タスクは、Amazon EC2のようなクラウドインフラかオンプレミスのどちらの上でもworkerを実行する。タスクは長時間実行が可能で、失敗することもあり、タイムアウトすることもあり、様々なスループットやレイテンシで完了することもある。Amazon SWFはworker用のtaskを保存し、workerが実行可能になるとタスクを割り当て、進捗を追跡し、詳細な完了状態を含む最新の状態を把握する。タスクをオーケストレーションするために、Amazon SFWからタスクの最新状態を取得するプログラムを書いて、後続のタスクを呼び出すために取得した状態を使う。

Amazon SWFの重要な機能の一つは、可監査性(auditability)である。Amazon SWFはアプリケーションにおける実行の各段階を可視化している。マネジメントコンソールとAPIで、アプリケーションの実行を見ることができる。顧客は、ある実行をズームインして個別にタスクの状態やIn/Outデータを見ることができる。問題分析や過去分析を行うために、実行履歴を指定された期間(最大90日)保持する。

Amazon SWFは、より上位の実行エンジンを構築するための強力なビルディングブロック群を提供する。初期顧客の一部は、特化したビジネスプロセス実行を行うDL(domain specific languages)を実装するのにAmazon SWFを使っている。これは、Amazon SWFの可用性がたくさんのイノベーションを起こすと考えている領域の一つである。

AWS SDKの一部であるAWS Flow Framework によって、開発者は、素早く簡単に Amazon SWFベースのアプリケーションを作ることができる。JavaSDKは言語レベルで素晴らしい統合を含んでおり、javaコードをタスクに自動変換し、正しい依存関係を作り、ワークフローの実行を管理することができる。これは分散・並列機能を持つErlangのような力をJavaにもたらす。

ワークフロー実行、タスクコーディネイト、タスクルーティング、タスク分散、例外ハンドリング、子ワークフロー、タイマー、シグナル、マーカー、その他をより深く見るには、Amazon SWFのページを参照のこと。SDKについての詳細は開発者ガイドを参照のこと。AWS developer blogは常に追加の詳細が載っている。Rightscale blogには、RightscaleでのSWFの使い方について Thorsten von Eickenが語っている。