Your SlideShare is downloading. ×
0
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
SWF
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

SWF

303

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
303
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
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. Amazon SWF を用いた タスク実行機構の模索 ! @rf0444
  • 2. Amazon SWF とは Amazon Simple Workflow Service タスク実行用のキューと、現在の タスクの状態管理を提供 実行完了したタスクの状態ログを 一定期間保管
  • 3. SQSとの比較 SQS SWF 提供してくれる もの メッセージキュー 一連の処理の流れ (ワークフロー)の管理 順序 保証しない ワークフロー内で保証 キューからの 削除 指定時間だけ不可視 その間に手動で削除 取得の際に削除される 実行保証 少なくとも1つ ただ1つ 信頼性保証 キューに入れたメッセージが 勝手に消えない ワークフローが途中で 勝手に消えない
  • 4. ワークフロー バックアップ開始 例: バックアップ バックアップ完成待ち 復元確認
  • 5. ワークフロー 例: バックアップ “バックアップ” 実行が 投入されました
  • 6. ワークフロー 例: バックアップ 「さて、何しましょう?」
  • 7. ワークフロー 例: バックアップ 「まだ何もしていないので、 次は ”バックアップ開始” タスクを してください」 イベントログ 1 ”バックアップ” 実行が 投入されました Decider
  • 8. ワークフロー バックアップ開始 例: バックアップ 「”バックアップ開始”タスク を実行してください」
  • 9. ワークフロー バックアップ開始 例: バックアップ Worker 「あいよ」
  • 10. ワークフロー バックアップ開始 例: バックアップ Worker 「てことでよろしく」 なんとかサーバ 「あいよ」
  • 11. ワークフロー バックアップ開始 例: バックアップ Worker「”バックアップ開始”タスク 終わったよ」
  • 12. ワークフロー 例: バックアップ 「さて、次は何しましょう?」 バックアップ開始
  • 13. ワークフロー 例: バックアップ バックアップ開始 「”バックアップ開始” タスクまで 終わっているので、 次は “バックアップ完成待ち”タスクを してください」 イベントログ 1 ”バックアップ” 実行が 投入されました 2 “バックアップ開始”タスク が終了しました Decider
  • 14. ワークフロー バックアップ開始 例: バックアップ 「”バックアップ完成待ち”タスク を実行してください」 バックアップ完成待ち
  • 15. ワークフロー バックアップ開始 例: バックアップ バックアップ完成待ち Worker 「あいよ」
  • 16. ワークフロー バックアップ開始 例: バックアップ バックアップ完成待ち Worker なんとかサーバ 「まだだよ」 「バックアップ終わった?」
  • 17. ワークフロー バックアップ開始 例: バックアップ バックアップ完成待ち Worker 「少し待つか」
  • 18. ワークフロー バックアップ開始 例: バックアップ バックアップ完成待ち Worker 1時間後…
  • 19. ワークフロー バックアップ開始 例: バックアップ バックアップ完成待ち Worker なんとかサーバ 「終わったよ」 「バックアップ終わった?」
  • 20. ワークフロー バックアップ開始 例: バックアップ バックアップ完成待ち Worker 「”バックアップ完成待ち”タスク 終わったよ」
  • 21. ワークフロー 例: バックアップ 「さて、次は何しましょう?」 バックアップ開始 バックアップ完成待ち
  • 22. ワークフロー 例: バックアップ バックアップ開始 バックアップ完成待ち (中略)
  • 23. ワークフロー 例: バックアップ 「さて、次は何しましょう?」 バックアップ開始 復元確認バックアップ完成待ち
  • 24. ワークフロー 例: バックアップ バックアップ開始 復元確認バックアップ完成待ち Decider イベントログ 1 ”バックアップ” 実行が 投入されました 2 “バックアップ開始” タスクが終了しました 3 “バックアップ完成待ち” タスクが終了しました 4 “復元確認” タスクが終了しました 「全てのタスクが 終了しているので、 “バックアップ” 実行は これで終了です」
  • 25. ワークフロー バックアップ開始 例: バックアップ バックアップ完成待ち 復元確認
  • 26. ワークフロー バックアップ開始 例: バックアップ バックアップ完成待ち 復元確認 イベントログ 1 ”バックアップ” 実行が 投入されました 2 “バックアップ開始” タスクが終了しました 3 “バックアップ完成待ち” タスクが終了しました 4 “復元確認” タスクが終了しました 5 ”バックアップ” 実行が 終了しました
  • 27. Decider の実装 Decider SWF DecisionTask List ActivityTask List
  • 28. SWF Decider の実装 DeciderDecisionTask List PollForDecisionTask DecisionTask List に要素があれば、 先頭1件を取ってくる。 なければ、最大1分間繋ぎ続けて 要素が入ってくるのを待つ。 待っても入ってこなければ、 taskToken (後述)が空の DecisionTask を返す。 ActivityTask List
  • 29. SWF Decider Decider の実装 PollForDecisionTask DecisionTask List ActivityTask List
  • 30. SWF Decider Decider の実装 PollForDecisionTask DecisionTask: taskToken: この DecisionTask の識別子 events: イベントログ DecisionTask List ActivityTask List
  • 31. SWF Decider Decider の実装 DecisionTask List taskToken: 取得した DecisionTask の識別子 decisions: 判断のリスト。普通1つ RespondDecisionTaskCompleted 判断 (一部) ScheduleActivityTask 次のタスクを登録 CompleteWorkflowExecution この実行を終了(成功) FailWorkflowExecution この実行を終了(失敗) CancelWorkflowExecution この実行を終了(キャンセル) ActivityTask List
  • 32. SWF Decider Decider の実装 DecisionTask List taskToken: 取得した DecisionTask の識別子 decisions: 判断のリスト。普通1つ RespondDecisionTaskCompleted 判断 (一部) ScheduleActivityTask 次のタスクを登録 CompleteWorkflowExecution この実行を終了(成功) FailWorkflowExecution この実行を終了(失敗) CancelWorkflowExecution この実行を終了(キャンセル) ActivityTask List
  • 33. SWF Worker の実装 Worker DecisionTask List ActivityTask List PollForActivityTask ActivityTask List に要素があれば、 先頭1件を取ってくる。 なければ、最大1分間繋ぎ続けて 要素が入ってくるのを待つ。 待っても入ってこなければ、 taskToken が空の ActivityTask を返す。
  • 34. SWF Worker の実装 Worker DecisionTask List ActivityTask List PollForActivityTask ActivityTask: taskToken: この ActivityTask の識別子 activityType: 実行種別 input: ActivityTask 登録時の入力(あれば)
  • 35. SWF Worker の実装 Worker DecisionTask List ActivityTask List RespondActivityTaskCompleted: タスクが正常に終了 ! RespondActivityTaskFailed: タスクの実行に失敗 ! RespondActivityTaskCanceled: タスクの実行がキャンセルされた
  • 36. 内部実装 SWF Task List Decider/Worker
  • 37. 固定 Actor SWF Task List Decider/Worker poll respond poll respond poll respond work work work
  • 38. 固定 Actor 固定数の作業者を用意し、作業者内 でタスクの取得/実行/返信を行う 一度に大量にタスクが投入された 場合、作業者数が少ないと完了に 時間がかかる
  • 39. 無制限 Actor SWF Task List Decider/Worker poll
  • 40. 無制限 Actor SWF Task List Decider/Worker work delegate
  • 41. 無制限 Actor SWF Task List Decider/Worker poll work
  • 42. 無制限 Actor SWF Task List Decider/Worker work delegate work
  • 43. 無制限 Actor SWF Task List Decider/Worker work work . . .
  • 44. 無制限 Actor SWF Task List Decider/Worker work work . . . respond
  • 45. 無制限 Actor SWF Task List Decider/Worker work . . .
  • 46. 無制限 Actor とれるだけ取ってきて、その度に作 業者を作る 一度に大量にタスクが投入された 場合、作業者でリソースを食い尽 くす
  • 47. 制限付き Actor SWF Task List Decider/Worker poll (limit = 2) work work
  • 48. 制限付き Actor SWF Task List Decider/Worker work work (limit = 2) enqueue
  • 49. 制限付き Actor SWF Task List Decider/Worker work work (limit = 2) poll
  • 50. 制限付き Actor SWF Task List Decider/Worker work work (limit = 2) enqueue
  • 51. 制限付き Actor SWF Task List Decider/Worker work (limit = 2) enqueue
  • 52. 制限付き Actor SWF Task List Decider/Worker work (limit = 2) dequeue work delegate
  • 53. 制限付き Actor とれるだけ取ってくるが、作業者が 一杯なら一旦貯めておく SWF と内部キューの二重管理 沢山貯まっているときに死ぬとや ばい
  • 54. 取得制限付き Actor SWF Task List Decider/Worker (limit = 2) work work
  • 55. 取得制限付き Actor SWF Task List Decider/Worker (limit = 2) work
  • 56. 取得制限付き Actor SWF Task List Decider/Worker (limit = 2) work poll
  • 57. 取得制限付き Actor SWF Task List Decider/Worker (limit = 2) work work delegate
  • 58. 取得制限付き Actor 作業者が一杯なら、タスクを取って こない 作業者の作業が終わったら、タス クを取ってくる

×