• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
[AWSマイスターシリーズ]Amazon Simple Workflow Service (SWF)
 

[AWSマイスターシリーズ]Amazon Simple Workflow Service (SWF)

on

  • 6,279 views

 

Statistics

Views

Total Views
6,279
Views on SlideShare
5,013
Embed Views
1,266

Actions

Likes
13
Downloads
87
Comments
0

7 Embeds 1,266

http://shinodogg.com 824
http://okochang.hatenablog.jp 419
http://cloud.feedly.com 16
http://webcache.googleusercontent.com 4
https://twitter.com 1
https://www.google.co.jp 1
http://translate.googleusercontent.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    [AWSマイスターシリーズ]Amazon Simple Workflow Service (SWF) [AWSマイスターシリーズ]Amazon Simple Workflow Service (SWF) Presentation Transcript

    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.AWSマイスターシリーズAmazon Simple Workflow Service2013.4.24アマゾンデータサービスジャパン株式会社部長/ソリューション アーキテクト片山暁雄
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.2Amazon Simple Workflow Serviceの概要
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.3Amazon Simple Workflow Serviceとはスケーラブルで分散したワークフローを実現するための実行基盤を提供するサービス• 通称:Amazon SWF• 全リージョンに展開リージョンをまたいだワークフローや、AWSとオンプレミスを連携したワークフローも実現• 途中で人手が入るワークフローも実現可能SWFが提供するのは、ワークフローの実行基盤のみ• 例えば「企業の組織構造を登録しておいて、稟議書を課長が承認したら部長に承認プロセスが回る」というような業務ワークフローはSWFの提供範囲外• 業務フローはAWS利用者が実装
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.4Amazon Simple Workflow Serviceとはワークフローの管理、実行タスクの管理、タスク間の処理ルーティング、一貫性の担保、実行履歴・リトライやタイムアウトなどの状態管理はAWS側(SWF)が担当ワークフローの登録、各タスク処理の実装および処理順番の決定はAWS利用者が実施SWFSWF user
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.5利用例動画や音声のエンコーディングEコマースサイトの決済バッチ処理システム構築やバックアップ途中で出荷処理などの人手が入る処理フロー長時間に渡る処理
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.6NASAの利用事例(画像処理)NASA JPL火星AWS
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.7Amazon SWFを使ったシステムの特徴疎結合ステートレス非同期処理柔軟なスケールアップ/ダウン高い冗長性・可用性
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.8Amazon SWFの動作原理
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.9SWF利用時の用語説明ドメインワークフローワークフローエグゼキューションアクティビティタイプタスクリスト• デシジョンタスクリスト• アクティビティタスクリストワークフロースターターアクティビティデサイダーワーカー• アクティビティワーカー• ワークフローワーカーSWFに登録するもの/SWFが提供するものSWF利用者が動作させるもの(アクター)
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.10SWFに登録するもの/SWFが提供するもの(その1)ドメイン• トップレベルの論理区分ワークフロー• 実行する処理の一連の流れを定義する単位• デサイダーと紐づくワークフローエグゼキューション• ワークフローのプロセス。例えばEコマースサイトの場合、顧客が購入ボタンをクリックするごとに、ワークフローエグゼキューションが生成されるイメージ• 各々のワークフローエグゼキューションは、任意のID(WorkflowID)と自動生成ID(runID)を持つ。• 任意のID(WorkflowID)は、ユーザーが採番し、通常、決済番号や請求書番号などを設定する(重複時はエラーとなる)• 自動生成ID(runID)は、システムが生成したものが付与される。
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.11アクティビティタイプ• ワークフロー中の処理の論理単位。各アクティビティタイプごとにアクティビティが紐づき、実際の処理を行うタスクリスト• Amazon SQSのキューのようなもの• タスクリストには、タスク(SQSのメッセージ相当)が入る• デシジョンタスクリスト• ワークフローの処理ロジックを動かすためのタスク(デシジョンタスク)を入れるリスト• ワークフローエグゼキューションは、必ず1つのデシジョンタスクリストに紐づく• アクティビティタスクリスト• アクティビティに処理を指示するためのタスク(アクティビティタスク)を入れるリスト• 「画像を変換する」「データをコピーする」など、アクティビティを動かすためのタスクが入るSWFに登録するもの/SWFが提供するもの(その2)
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.12
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.13SWF利用者が動作させるもの(アクター)ワークフロースターター• ワークフローを開始するアクター• 例えばアプリケーションサーバや、定期処理を行うcronサーバアクティビティ• アクティビティタイプごとに発生するタスクを実際に処理するアクター• ビジネスロジック部分• 例えば画像変換処理や、カード決済処理などデサイダー• タスク処理のルーティングを決めるアクター• ワークフローの流れの定義を行なう部分• 次に実行するアクティビティワーカーを決定するワーカー• アクティビティおよびデサイダーを動かすプログラム• アクティビティワーカー/ワークフローワーカー• mainメソッドやデーモンプログラムなど
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.14SWF - 動作のポイントタスクリストを中心に、デサイダーとアクティビティが交互に動作デサイダーとアクティビティは、ロングポーリングでタスクリストに接続タスクリストにタスクが入ってくると、接続しているデサイダー/アクティビティのうちの1つにタスクを返す• SQSのように複数にメッセージを返さない• 一貫性の担保AmazonSWFタスクリストデサイダー アクティビティ
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.15デサイダー動画変換ワークフローの例AmazonSWF2.ビデオエンコードのタスクをタスクリストに入れる6.処理の終了デサイダーWebServerLongPollアクティビティタスク(エンコード処理)デシジョンタスクアクティビティタスク(DRM処理)アクティビティデシジョンタスクLongPollデシジョンタスクLongPollLongPollLongPoll1.ワークフロー開始3.エンコード処理を実施4.DRM付与タスクをタスクリストに入れる5.DRMの追加処理を実施処理フロー(処理開始>エンコーディング>DRM付与)ワークフロースターターアクティビティ デサイダーアクティビティタスクリストデシジョンタスクリストワークフローエグゼキューションワーカー
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.16SWF – 設計のポイント処理の細分化• 処理を細分化しておき、処理同士を疎結合にすることで、処理の再利用やワークフロー間での共通利用が可能• 細分化することで、特定の処理だけサーバを追加して、パフォーマンスを向上させることが可能ステートレス• デサイダーやアクティビティを作る際、データをローカルに持たないように設計する• 例えば画像処理の場合、画像データはS3などに入れ、各アクティビティが処理時にS3から取得するようにしておく• ステートレスにしておくことで、容易に冗長性やパフォーマンスを向上させることができる
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.17開発SWF実行までの流れアプリケーションやワークフローの設計、必要なアクティビティの洗い出しドメインの作成ワークフローとアクティビティタイプの設定アクティビティの実装デサイダーの実装ワーカー/ワークフロースターターの実装ワークフロースターターの実行ワークフローエグゼキューションデサイダーやアクティビティワーカーのデプロイと実行設計 実行
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.18Amazon SWFの機能
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.19Amazon SWFの機能(1)デサイダー/アクティビティへのタスクルーティング(基本機能)• デサイダー/アクティビティ間のデータ受け渡しワークフローエグゼキューションの実行履歴保持• どのようなアクティビティが呼ばれたかの履歴を保持• 渡された値や戻り値の情報も保持タイムアウト・リトライの設定• ワークフローエグゼキューション全体のタイムアウト時間• アクティビティワーカーごとのタイムアウト時間• リトライ回数/リトライポリシーマニュアル実行のアクティビティワーカーのサポート• メールでの承認作業や、発送処理などの手作業が入る場合
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.20Amazon SWFの機能(2)子プロセスサポート• ワークフロー実行中にサブワークフローを実行シグナル• ワークフロー処理への割り込みタグ• ワークフローエグゼキューションにタグを付与(5つまで)タイマー(ワークフロークロック)• 指定時間後にデサイダーを再コール実行中のワークフローのキャンセル
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.21プログラミングモデル
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.22AWS SDKワークフロースターター、デサイダー、アクティビティの実装には、基本的にAWS SDKを使用例:• AWS SDK for Java• AWS SDK for .NET• AWS SDK for PHP• AWS SDK for RubySDKにはドメインやワークフローの登録、タスクリストのポーリング、実行履歴取得など、SWFの機能を利用するAPIが実装済みAWS SDK for Javaは「AWS Flow Framework」を提供
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.23AWS Flow Frameworkワークフロースターター、デサイダー、アクティビティワーカーを実装するためのJavaフレームワークJavaのAPT機能を使用• アクティビティワーカーの実装と、SWF固有処理を分離• デサイダーのロジック実装から、非同期処理の実装を分離• 各種スタブコードを生成JUnitを使用したテストのサポート機能
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.24クラス構成と実装順MyActivityImplMyActivityMyActivityClientImplMyActivityClientAPTMyWorkflowClientExternalMyWorkflowClientExternalImplMyWorkflowClientExternalFactoryMyWorkflowClientExternalFactoryImplAPTAPTMyActivityWorkerMyWorkflowWorkerMyWorkflowStarterActivityWorkerAmazonSimpleWorkflowMyWorkflowImplMyWorkflowWorkflowWorker認証情報実装する部分生成される部分SDK提供部分利用アクティビティの実装デサイダーの実装ワーカー/ワークフロースターターの実装
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.25アクティビティの実装アクティビティのインターフェースを定義@Activities(version = "1.0")@ActivityRegistrationOptions(defaultTaskList = “MyActivityTaskList”,defaultTaskScheduleToStartTimeoutSeconds = 30,defaultTaskStartToCloseTimeoutSeconds = 30)public interface MyActivity {String activity1();}インターフェースを実装public class MyActivityImpl implements MyActivity {@Overridepublic String activity1() {return "a1";}}
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.26デサイダーの実装デサイダーのインターフェースを実装@Workflow@WorkflowRegistrationOptions(defaultTaskList = Constants.DECIDER_TASK_LIST,defaultExecutionStartToCloseTimeoutSeconds = 300,defaultTaskStartToCloseTimeoutSeconds = 30)public interface MyWorkflow{@Execute(version = "1.0")void execute();}インターフェースを実装public class MyWorkflowImpl implements MyWorkflow {private MyActivityClient client = new MyActivityClientImpl();@Overridepublic void execute() {client.activity1();}}
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.27ワーカー/ワークフロースターターの実装ワーカーを実装public class MyActivityWorker {public static void main(String[] args) throws Exception {AmazonSimpleWorkflow swfClient = Helper.createClient();String domain = CreateDomain.DOMAIN;// アクティブワーカークラスをインスタンス化ActivityWorker worker = new ActivityWorker(swfClient, domain,”ACTIVITY_TASK_LIST”);// 実行するアクティビティを登録MyActivityImpl ac = new MyActivityImpl();worker.addActivitiesImplementation(ac);// タスクの待ち受けを開始worker.start();}}public class MyWorkflowWorker {public static void main(String[] args) throws Exception {AmazonSimpleWorkflow swfClient = Helper.createClient();String domain = CreateDomain.DOMAIN;WorkflowWorker worker = new WorkflowWorker(swfClient, “DECIDER_TASKLIST”);worker.addWorkflowImplementationType(MyWorkflowImpl.class);worker.start();}}ワークフロースターターを実装public class MyWorkflowStarter {public static void main(String[] args) throws Exception {AmazonSimpleWorkflow swfClient = Helper.createClient();String domain = CreateDomain.DOMAIN;MyDeciderClientExternalFactory factory = new MyDeciderClientExternalFactoryImpl(swfClient, domain);String workflowId = “DEMO” + new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss").format(new Date());MyDeciderClientExternal client = factory.getClient(workflowId);StartWorkflowOptions options = new StartWorkflowOptions();options.setTaskList(Constants.DECIDER_TASK_LIST);client.execute();}}
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.28デサイダーの実装方法デサイダーはワークフローのフローロジックの要• 逐次処理、平行処理、フォーク/ジョインはデサイダーで実装Promise<>と@Asynchronusが処理フロー実装の基本• ActivityClientのメソッド、もしくは@AsynchronousのついたメソッドにPromise<>を渡すと、そのPromise<>の状態がReadyになるまで処理が実行されない• 逐次処理をしたい場合は、直前の処理の戻り値(Promise<>)を、次の処理の引数にする。並行処理の場合は、戻り値を渡さないMyWorkflowImplMyWorkflowMyActivityClientImplMyActivityClient
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.29Flow ChartprocessStartfileTransferdataProcessingAcombinResultshowReportdataProcessingB dataProcessingCdataProcessingD
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.30public void processStart(final String srcImagePath) {Promise<String> s3ImagePath = jpl.fileTransfer(srcImagePath);//3分岐の処理Promise<ProcessingResultA> resultA =aws.dataProcessingA(s3ImagePath);Promise<ProcessingResultB> resultB =aws.dataProcessingB(s3ImagePath);Promise<ProcessingResultC> resultC =aws.dataProcessingC(s3ImagePath);//dataProcessingCの終了後にDを実行Promise<ProcessingResultD> resultD = aws.dataProcessingD(resultC);//全てのdataProcessiongを待つPromise<CombineResult> combineResult= jpl.combineResult(resultA, resultB, resultD);Promise<Void> endResult = jpl.showResult(combineResult);}Jpl, awsは生成されたActivetyClientデサイダー実装例
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.31デサイダーの実装方法(Tips)その他分岐処理を実装するためのクラスやアノテーションを活用• AndPromise<>,OrPromise<>クラス• @Wait,@NoWait• Settable<>クラス• @Asynchronous、Taskクラス• TryCatch、TryFinally、TryCatchFinallyクラス• @Signal
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.32利用料金
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.33SWFの利用料金1ワークフローエグゼキューションごとに$0.00012• 初回1000回は無料1ワークフローエグゼキューションの実行時間、24時間ごとに$0.000006• ただし最初の30000回、24時間までは無料完了した1ワークフローの実行履歴を残すのに、1日当たり$0.000006• ただし最初の30000回、24時間までは無料1タスク、マーカー、タイマー、シグナルごとに$0.00003• 最初の10000回は無料金
    • © 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.34Appendix参考資料• Amazon Simple Workflow Service• http://aws.amazon.com/jp/swf/• AWS Flow Framework Recipes• http://aws.amazon.com/code/2535278400103493• AWS Flow Framework samples for Amazon SWF• http://aws.amazon.com/code/3015904745387737