[jaws-ug 三都物語 2014] 三都物語でamazon swfと握手!
DESCRIPTION
2014/7/5 JAWS-UG 三都物語2014のSWF紹介資料TRANSCRIPT
三都物語でAmazon SWFと握手!
夏のJAWS-UG三都物語 2014
• 片山 暁雄• アマゾンデータサービスジャパン
• 部長/ソリューションアーキテクト
• 大阪府池田市出身
• Twitter• @c9katayama
• #ヤマン
• 好きなAWSサービス• Amazon SWF
自己紹介
本日のテーマ
Amazon Simple Workflow Service (Amazon SWF)
エスダブルエフ/スウィフ
• Amazon SWFのメカニズム
• デモ
• まとめ
• Amazon SWFのメカニズム
• デモ
• まとめ
Amazon SWFとは
Amazon SWFは
• 「処理のステート管理」
• 「タスク間のコーディネート」
を行うためのフルマネージドサービス
いわゆる「承認を行うアプリ」ではない
Amazon SWFとは
Amazon SWFはシステム構築における以下の問題を解消
スケーラビリティ
アベイラビリティ
並列処理の制御
ネットワーク/FW越しの連携
例えば:動画の処理
ユーザーが動画をアップロード
サムネイルの作成
エンコード処理(スマホ向け)
エンコード処理(PC向け)
不正動画検出
サイト公開
元動画の保存
動画インデックスの更新
メタデータ埋め込み
ユーザー情報の更新
例えば:動画の処理(アーキテクチャその1)
ユーザーが動画をアップロード
サムネイルの作成
エンコード処理(スマホ向け)
エンコード処理(PC向け)
不正動画検出
サイト公開
元動画の保存
動画インデックスの更新
メタデータ埋め込み
ユーザー情報の更新
1つのアプリケーションで逐次処理を実装すれば、システムとしての作りは簡単
ただし・・・
• 全体の処理が長くなる
• 性能向上はスケールアップしかない
• 途中でエラーになった場合にリカバリできない
動画の処理(アーキテクチャその1)
public static void main(String[] args) throws Exception {
AWSCredentials credentials = new PropertiesCredentials(
RemoveNonUsedSecurityGroup.class.getResourceAsStream("/AwsCredentials.properties
AmazonEC2Client ec2 = new AmazonEC2Client(credentials);
ec2.setRegion(Region.getRegion(Regions.SA_EAST_1));
DescribeInstancesResult result = ec2.describeInstances();
Set<String> idSet = new HashSet<String>();
for (Reservation reservation : result.getReservations()) {
for (Instance instance : reservation.getInstances()) {
for (GroupIdentifier sg : instance.getSecurityGroups()) {
idSet.add(sg.getGroupId());
}
}
}
DescribeSecurityGroupsResult describeSecurityGroupsResult =
ec2.describeSecurityGroups();
List<SecurityGroup> sgList = new ArrayList<SecurityGroup>();
for (SecurityGroup sg : describeSecurityGroupsResult.getSecurityGroups()) {
if (idSet.contains(sg.getGroupId()) == false) {
if (sg.getIpPermissions().size() > 0) {
for (IpPermission ip : sg.getIpPermissions()) {
for (UserIdGroupPair pair : ip.getUserIdGroupPairs()) {
pair.setGroupId(null);
}
}
try{
ec2.revokeSecurityGroupIngress(new RevokeSecurityGroupIngressRequest(
sg.getGroupName(), sg.getIpPermissions()));
}catch(Exception e){}
}
sgList.add(sg);
}
}
for (SecurityGroup sg : sgList) {
if (sg.getGroupName().equals("default") == false) {
ec2.deleteSecurityGroup(new DeleteSecurityGroupRequest()
.withGroupId(sg.getGroupId()));
例えば:動画の処理(アーキテクチャその2)
ユーザーが動画をアップロード
サムネイルの作成
エンコード処理(スマホ向け)
エンコード処理(PC向け)
不正動画検出
サイト公開
元動画の保存
動画インデックスの更新
メタデータ埋め込み
ユーザー情報の更新
キュー
各タスクを分割して、キューでつなぐ
• 途中でプロセスエラーになっても落ちても、プロセス復帰後は直前のキューまで戻れる
• 各タスクを別のサーバに乗せることが可能
• スケールアウトと冗長化を実現
ただし・・・
• 全体の処理は長いまま
• 各タスクが、次のタスクを意識しないといけない
エンコード処理(スマホ向け)
エンコード処理(スマホ向け)
動画の処理(アーキテクチャその2)
EC2
EC2
例えば:動画の処理(アーキテクチャその3)
ユーザーが動画をアップロード
サムネイルの作成
エンコード処理(スマホ向け)
エンコード処理(PC向け)
不正動画検出
サイト公開
元動画の保存
動画インデックスの更新
メタデータ埋め込み
ユーザー情報の更新
キュー
タスクの制御
「タスクの制御」処理を導入
• タスク実行の順序をこの処理に集めることで、タスク間を疎結合に
• この処理が状態管理をすることで、タスクの並列実行が可能に
• タスクの戻り値で次のタスクを変えたりできる
• 処理の履歴を記録できる
ただし・・・
• 状態管理や処理履歴記録など、複雑な実装が必要
• 「タスクの制御」処理自体がSPOFで、かつスケーラビリティに欠ける
動画の処理(アーキテクチャその3)
タスクの制御
例えば:動画の処理(アーキテクチャその4)
ユーザーが動画をアップロード
サムネイルの作成
エンコード処理(スマホ向け)
エンコード処理(PC向け)
不正動画検出
サイト公開
元動画の保存
動画インデックスの更新
メタデータ埋め込み
ユーザー情報の更新
出来る奴
次のタスクを決める
キュー
「タスクの制御」を分割する
• 「タスクの制御」のうちでめんどくさいものは「出来る奴」にやってもらう
• 状態管理、次タスクへのキューイング、タスク終了の補足、実行履歴の記録、エラーの補足、etc…
• やることを決める部分だけをステートレスに作る
動画の処理(アーキテクチャその4)
= Amazon SWF出来る奴
Amazon SWF = 出来る中間管理職
Amazon SWFの利点
データを3か所のアベイラビリティで保存
1つのタスクが1つのアプリケーションでしか処理されないことを保証
ワークフローは最大1年間継続、実行履歴は最大3か月間保持
ポーリングベース
次のタスクを決める
次のタスクを決める
ユーザーが動画をアップロード
次のタスクを決める
各種タスク
ワークフロースターター
デサイダー
アクティビティ
デシジョンタスクリスト
アクティビティタスクリスト
ポーリング
ポーリング
ドメイン
ワークフローエグゼキューション
ワークフローエグゼキューション
ワークフローエグゼキューション
SWF用語
ワークフロースターター• ワークフローをキックするプログラム
• キックするたびに「ワークフローエグゼキューション」が作成される
ワークフローエグゼキューション• ワークフローのインスタンス
• 各ワークフローエグゼキューションごとに以下のような情報を保持
• WorkflowID:ユーザー採番の任意ID
– 決済番号や請求書番号などを設定(重複時はエラー)
• RunID:自動生成IDされるユニークID
• ワークフローヒストリー:入出力情報含むタスクの実行履歴
• 開始時間
• タイムアウト設定
SWF用語
ドメイン• この区分ごとに、ワークフローエグゼキューションやタスクリストが管理される
• プログラム言語でいう「ネームスペース」のような概念
タスクリスト• デサイダー/アクティビティがポーリングをするためのキュー
• デサイダーとアクティビティごとにキューを設定
• タスクリストに入った1つのタスクは、1つのデサイダー/アクティビティしか取得しないことを保証
• タスクリストは、ドメイン内で共有
• 異なるワークフロースターターから始まる処理にも利用可能
エンコード処理
画像タスク
タスクリスト=処理キュー
ユーザーが動画をアップロード
動画タスク
ユーザー認証
ワークフローエグゼキューション
ワークフローエグゼキューション
ユーザーが画像をアップロード
理エンコード処理
課金ユーザー
無料ユーザー
共通処理
SWF用語
デサイダー
• 次のタスクを決めるタスク
• タスクリストをポーリングして、タスクがあった場合に、次に実行するアクティビティを指定
アクティビティ
• ワークフロー内の個別のタスクの処理
• デサイダーと同様、タスクリストをポーリングするため、オンプレミスや既存DCでの動作も可能
• 人手を介する処理でもOK
ここまでのまとめ
Amazon SWFは中間管理職
• デサイダーとアクティビティのコーディネート
• ステート管理
SWFのアーキテクチャでシステムを構築すると、以下の問題が解決できる
スケーラビリティ
アベイラビリティ
並列処理の制御
ネットワーク/FW越しの連携
NASA JPL
火星
AWS
AWS SDK
• Java, C#, Ruby, PHP, Python
Flow FrameworkJava, Ruby
• Amazon SWFのメカニズム
• デモ
• まとめ
本日のデモは音系です
ド レ ミ ファ
ソ ラ シアクティビティ(鳴る奴)
デサイダー(演奏する奴)
ド レ ミ ファ
ソ ラ シ
ド!ド!
はい
本日のデモは音系です
マイニングブラウニー 得上さん@tottokug
“まだ一度も成功したことは無いけれど、SWFでのオーケストラはもうやめて2014年はKinesisでオーケストラに方向転換することにしました。”-かれ4ブログより-
デモ1
ド レ ミ ファ
ソ ラ シ
デモ2
ド レ ミ ファ ソ ラ シ
デモ3ド
ミ
ソ
ラ
ド
ミ
ソ
シ
レファ
ラ
シ
© 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.
34
いざ本番
• Amazon SWFのメカニズム
• デモ
• まとめ
詳しくは・・・
• AWS クラウドサービス活用資料集
• Googleで検索!
• AWS Black Belt Tech Webinar– ほぼ毎週水曜18:00から
AWS Summit Tokyo 2014
• 2014年7月17日(木) 〜 18日(金)
• グランドプリンス新高輪 (国際館パミール)
• 来場無料 (要事前登録)
• http://www.awssummittokyo.com/
- 申し込み受付中!
• 登壇企業様多数
- すかいらーく様、HGST様、クオリカ様、 積水化学工業様、コーセー様、良品計画様、SAPジャパン様、NTTデータ様、日通情報システム様、NTTドコモ様、日立製作所様、丸紅様、ソニー銀行様、他多数
AWS認定資格の大阪受験会場が開設!
• 中之島に受験会場を設立
• 以下の試験の受講が可能– AWS 認定ソリューションアーキテクト – アソシエイト
– AWS 認定デベロッパー – アソシエイト
– AWS 認定システムオペレーション(SysOps)アドミニストレーター – アソシエイト
• http://aws.amazon.com/jp/certification/
関西のAWSソリューションアーキテクト募集中!
• 特にゲーム/ソーシャル/スタートアップに興味のある方!
• 詳しくはお近くのソリューションアーキテクトまで!
ありがとうございました