SWF

594 views
479 views

Published on

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

No Downloads
Views
Total views
594
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
5
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

SWF

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

×