ワークフローとバッチ処理の違い
最近非常に狭いエリアでワークフローで盛り上がったりしてたので判りにくいかなぁ〜って思った部分。
AWSに最近登場したData Piplineはバッチ処理、ちょっと前になぜかAWSの中の人が推してる?って状態だったのはSWFはワークフロー
この二つの明確な違いについて
ワークフローとバッチ処理がどう違うのか その1
- バッチ処理は複数のデータをひとまとめに処理
- ワークフローは一件ごとのデータを個別に処理
ここが一番大きな違い
なので、Data Piplineは一定時間毎に・・・みたいな記述だし
SWFはデータをきっかけに・・・みたいな感じになってる
ワークフローとバッチ処理がどう違うのか その2
- バッチ処理は途中で止まらない
- ワークフローは途中でユーザの反応を見るために止まる
これも大きな違い。
バッチ処理がエラー等で止まるなんて普通にある話だけど、それは駄目でしょ!ってなるので普通は止まらず最後まで行く前提
もし、バッチフレームワークでワークフローを作ったら・・・
- データ毎にバッチを起動する
- ユーザの反応を見るときにバッチを終了する
- ユーザが反応すると新しいバッチを起動する
こんな感じでちょっと(だいぶ?)複雑な感じになる
もし、ワークフローエンジンでバッチ処理を作ったら・・・
- 扱うデータの塊が時間になる
- 開始タイミングを複数作れない
- 本気のジョブフローを作ると結構高機能なエンジンが必要
こんな感じで本気のジョブフローで使うには大変。
Jenkinsから呼び出すのをワークフローエンジンで・・・ってのは意外と良いアイデアだと思った
結論
見た目は似てるけど向いてる先は違うぞ!!
ワークフロー | バッチ | ESB | |
ユーザの関与 | 有り | 無し | 無し |
データの単位 | 個別 | まとめて | 個別 |