Your SlideShare is downloading. ×
  • Like
SWF
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply
Published

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
223
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
1
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 作業者が一杯なら、タスクを取って こない 作業者の作業が終わったら、タス クを取ってくる