Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
ブログ製本サービス

MyBooks.jpのアーキテクチャ Part.2
∼ Amazon Simple Workflow Serviceについて

2014/01/17 第12回勉強会

欧文印刷株式会社・ソフトウェアエンジニア・田名辺健人
Who am I ?!
(この顔にピンときたら)
田名辺 健人(たなべたけひと)
ソフトウェアエンジニア
!

@dateofrock

!

http://blog.dateofrock.com/

欧文印刷株式会社(東京都)
2011年11月から札幌でテレワーク
好きなサービス: SWF
A. 静的サイト

B. 動的サイト

editor.mybooks.jp

www.mybooks.jp

Elastic IP
Address

EC2
Instance

EBS

WordPress
(AMI元)

EC2
Instan...
S3

LB

Simple Workflow
Service

Book Data

CloudW
Decider

Simpl
Se

Worker
EC2 Instances

omcat7 (Grails/back-end)

S3 (...
ユーザー

フロントエンド

仕上がり見本作成

SWF

バックエンド

組版WFスタート

「後でPDF送ります」

組版処理

メール通知
重
組版処理

た
い
!
組版処理
1.HTMLを解析して、画像を集める
相手サーバーの状況やネットワークに左右されがち
最近の画像はデカい!

2.集めた画像を全てチェックして、印刷最適化する
これをそのまま印刷製本するために処理が必須
画像処理自体、比較的重たいよね...
非同期処理管理
1.昔は自分でキューを作っていた
もちろん取りこぼすw(ごめんなさい)

2.ちょっと前まではSQSを使っていた
ちょっと面倒な所がある。

複数メッセージを受け取った場合

実行履歴管理は自前で作る必要あり
Amazon Simple Queue Service
(SQS)
Amazon Simple Workflow Service
(SWF)
Activity

Decider

Task List

Domain
Activity

Decider

Task List

Domain

Domain: 処理対象区分
Activity

Decider

Task List

Domain

Task List: 実行すべきタスクがキューイングされる場所
Activity

Decider

Task List

Domain

Activity: ビジネスロジック実行
Activity

Decider

Task List

Domain

Decider: 実行すべきActivityを決定
http://www.slideshare.net/AmazonWebServicesJapan/20130424-aws-meisterregenerateswfpublic

概要はこちらを!

ご覧下さいwwwww
•タスク管理はすべてお任せ
•個別にタイムアウトの設定が可能
•自動リトライも可能
•SDKにSWF用のフレームワークがある
•Flow Framework
Flow Framework

•
•
•

JavaとRubyのみ
正直キツいw
• 生APIだけではもっとキツいww
今回はJava版のお話
http://blog.dateofrock.com/2012/03/amazon-swf.html
Flow Framework (Java)

1. 設計する(笑)

•
•

ステートレスを意識する
アクティビティ(ビジネスロジック)
をどう切り分けるか?
ステートレス
Activity Worker

A

Activity Worker

A

Activity 1

Activity 2

ファイル書出

ファイル読込

ローカル領域

ローカル領域

これはうまく行く
ステートレス
Activity Worker

A

Activity 1

ファイル書出

ローカル領域

Activity Worker

B

×
Activity 2

ファイル読込

ローカル領域

これはうまく行かない!!
Flow Framework (Java)

2. interfaceを定義

•
•

アクティビティ、デサイダーの両方
引数、戻り値、例外がJSONシリア
ライズ可能か気をつけて!
DataConverter
•SDKのデフォルトではJackson JSON
processor(https://github.com/FasterXML/jackson)

•JSONシリアライズされるオブジェクトコン
ストラクタは、引数無し...
Flow Framework (Java)

3. 実装する

•
•

アクティビティ、デサイダーの両方
Promise<T>を理解する
Promise<T>

•Future<T>みたいなものだが、get()の振る舞いが
決定的に違う

•Future<T> : readyになるまでブロック
•Promise<T> : readyじゃないと例外スロー
•そもそも同期はフレームワ...
Flow Framework (Java)

ちなみにこんな感じになります
Decider
実

例
装
ちなみにダメな例です。!
どこがマズいか!
解りますか?

実

例
装
Activity
A. 静的サイト

B. 動的サイト

editor.mybooks.jp

www.mybooks.jp

Elastic IP
Address

EC2
Instance

EBS

WordPress
(AMI元)

EC2
Instan...
S3

LB

Simple Workflow
Service

Book Data

CloudW
Decider

Simpl
Se

Worker
EC2 Instances

omcat7 (Grails/back-end)

S3 (...
A. 静的サイト

B. 動的サイト

editor.mybooks.jp

www.mybooks.jp

Elastic IP
Address

EC2
Instance

EBS

WordPress
(AMI元)

EC2
Instan...
A. 静的サイト

B. 動的サイト

www.mybooks.jp

Elastic IP
Address

NFS Sharing

EC2
Instance
WordPress
(AMI元)

EBS

Snapshot
Scale Up...
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)
Upcoming SlideShare
Loading in …5
×

ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)

6,987 views

Published on

第12回JAWS-UG札幌勉強会で発表した資料です。

Published in: Technology, News & Politics

ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2(Amazon Simple Workflow Service編)

  1. 1. ブログ製本サービス MyBooks.jpのアーキテクチャ Part.2 ∼ Amazon Simple Workflow Serviceについて 2014/01/17 第12回勉強会 欧文印刷株式会社・ソフトウェアエンジニア・田名辺健人
  2. 2. Who am I ?! (この顔にピンときたら)
  3. 3. 田名辺 健人(たなべたけひと) ソフトウェアエンジニア ! @dateofrock ! http://blog.dateofrock.com/ 欧文印刷株式会社(東京都) 2011年11月から札幌でテレワーク 好きなサービス: SWF
  4. 4. A. 静的サイト B. 動的サイト editor.mybooks.jp www.mybooks.jp Elastic IP Address EC2 Instance EBS WordPress (AMI元) EC2 Instance ELB EC2 Instances (Auto Scaling) EBS snapshot Tomcat7 (Grails/front-end) Tomcat Session Store S3 Simple Workflow Service Book Data CloudWatch Route53 Decider ELB Simple Email Service Worker EC2 Instances Tomcat7 (Grails/back-end) S3 (App Resources)
  5. 5. S3 LB Simple Workflow Service Book Data CloudW Decider Simpl Se Worker EC2 Instances omcat7 (Grails/back-end) S3 ( Resou
  6. 6. ユーザー フロントエンド 仕上がり見本作成 SWF バックエンド 組版WFスタート 「後でPDF送ります」 組版処理 メール通知
  7. 7. 重 組版処理 た い !
  8. 8. 組版処理 1.HTMLを解析して、画像を集める 相手サーバーの状況やネットワークに左右されがち 最近の画像はデカい! 2.集めた画像を全てチェックして、印刷最適化する これをそのまま印刷製本するために処理が必須 画像処理自体、比較的重たいよね! 3.PDF/EPUB/KF8(Kindle)を生成する 1∼2で収集した画像は再利用出来る
  9. 9. 非同期処理管理 1.昔は自分でキューを作っていた もちろん取りこぼすw(ごめんなさい) 2.ちょっと前まではSQSを使っていた ちょっと面倒な所がある。 複数メッセージを受け取った場合 実行履歴管理は自前で作る必要あり
  10. 10. Amazon Simple Queue Service (SQS)
  11. 11. Amazon Simple Workflow Service (SWF)
  12. 12. Activity Decider Task List Domain
  13. 13. Activity Decider Task List Domain Domain: 処理対象区分
  14. 14. Activity Decider Task List Domain Task List: 実行すべきタスクがキューイングされる場所
  15. 15. Activity Decider Task List Domain Activity: ビジネスロジック実行
  16. 16. Activity Decider Task List Domain Decider: 実行すべきActivityを決定
  17. 17. http://www.slideshare.net/AmazonWebServicesJapan/20130424-aws-meisterregenerateswfpublic 概要はこちらを! ご覧下さいwwwww
  18. 18. •タスク管理はすべてお任せ •個別にタイムアウトの設定が可能 •自動リトライも可能
  19. 19. •SDKにSWF用のフレームワークがある •Flow Framework
  20. 20. Flow Framework • • • JavaとRubyのみ 正直キツいw • 生APIだけではもっとキツいww 今回はJava版のお話
  21. 21. http://blog.dateofrock.com/2012/03/amazon-swf.html
  22. 22. Flow Framework (Java) 1. 設計する(笑) • • ステートレスを意識する アクティビティ(ビジネスロジック) をどう切り分けるか?
  23. 23. ステートレス Activity Worker A Activity Worker A Activity 1 Activity 2 ファイル書出 ファイル読込 ローカル領域 ローカル領域 これはうまく行く
  24. 24. ステートレス Activity Worker A Activity 1 ファイル書出 ローカル領域 Activity Worker B × Activity 2 ファイル読込 ローカル領域 これはうまく行かない!!
  25. 25. Flow Framework (Java) 2. interfaceを定義 • • アクティビティ、デサイダーの両方 引数、戻り値、例外がJSONシリア ライズ可能か気をつけて!
  26. 26. DataConverter •SDKのデフォルトではJackson JSON processor(https://github.com/FasterXML/jackson) •JSONシリアライズされるオブジェクトコン ストラクタは、引数無し or 1つのString引 数である必要がある。 •どうしてもダメな場合は自分で DataConverterを実装する必要あり。 •例外の場合は自分でWrapper作ってもOK。
  27. 27. Flow Framework (Java) 3. 実装する • • アクティビティ、デサイダーの両方 Promise<T>を理解する
  28. 28. Promise<T> •Future<T>みたいなものだが、get()の振る舞いが 決定的に違う •Future<T> : readyになるまでブロック •Promise<T> : readyじゃないと例外スロー •そもそも同期はフレームワーク側で面倒見てく れるので、Promise<T>#get()で例外スローされ るという事自体がフレームワーク外の事をやって しまっている証拠。実質上問題は起きにくい。 •@Asynchronousアノテーション重要。
  29. 29. Flow Framework (Java) ちなみにこんな感じになります
  30. 30. Decider
  31. 31. 実 例 装
  32. 32. ちなみにダメな例です。! どこがマズいか! 解りますか? 実 例 装
  33. 33. Activity
  34. 34. A. 静的サイト B. 動的サイト editor.mybooks.jp www.mybooks.jp Elastic IP Address EC2 Instance EBS WordPress (AMI元) EC2 Instance ELB EC2 Instances (Auto Scaling) EBS snapshot Tomcat7 (Grails/front-end) Tomcat Session Store S3 Simple Workflow Service Book Data CloudWatch Route53 Decider ELB Simple Email Service Worker EC2 Instances Tomcat7 (Grails/back-end) S3 (App Resources)
  35. 35. S3 LB Simple Workflow Service Book Data CloudW Decider Simpl Se Worker EC2 Instances omcat7 (Grails/back-end) S3 ( Resou
  36. 36. A. 静的サイト B. 動的サイト editor.mybooks.jp www.mybooks.jp Elastic IP Address EC2 Instance EBS WordPress (AMI元) EC2 Instance ELB EC2 Instances (Auto Scaling) EBS snapshot Tomcat7 (Grails/front-end) Tomcat Session Store S3 Simple Workflow Service Book Data CloudWatch Route53 Decider ELB Simple Email Service Worker EC2 Instances Tomcat7 (Grails/back-end) S3 (App Resources)
  37. 37. A. 静的サイト B. 動的サイト www.mybooks.jp Elastic IP Address NFS Sharing EC2 Instance WordPress (AMI元) EBS Snapshot Scale Up Floating IP EC2 Instance Snapshot ELB EC2 Instances (Auto Scaling) EBS snapshot Tomcat7 (Grails/front-end) Multi Datacenter Bootstrap Cloud DI Web Strage Archive Functional Firewall Operational Firewall editor.mybooks.jp Tomcat Session Store DB Replication State Sharing S3 Private Distribution Simple Workflow Service Book Data Queuing Chain CloudWatch Route53 Decider Multi Datacenter Bootstrap Cloud DI Web Strage Archive Functional Firewall Operational Firewall ELB Simple Email Service Worker EC2 Instances Tomcat7 (Grails/back-end) S3 (App Resources)

×