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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

3,590
views

Published on

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

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

Published in: Technology, News & Politics

0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,590
On Slideshare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
5
Comments
0
Likes
8
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×