# 周期パイプライン ## 定義 周期パイプライン(periodic pipeline)とは、cronなどの周期実行スケジューラの制御下でデータ処理を実行する設計パターンである。単一プログラムで完結する浅いパイプラインから、複数プログラムを連結し前段の出力を後段の入力とする多段パイプライン(multiphase pipeline、連結数=深さ(depth)が数十〜数百に達することもある)まで幅を持つ。ワーカー数がデータ量に対して十分でジョブ間の相対スループットが均一な間は安定して動作するが、有機的な成長に伴いジョブの実行超過・リソース枯渇・ハングしたチャンクといった問題を蓄積する構造的な脆さを内在する。(Source: [[@2016__OReilly__SRE Book - Chapter 25 Data Processing Pipelines]]) ## 周期実行という設計選択が生む構造的な脆さ - **ハングしたチャンク(hanging chunk)**: クラスタ内のマシン間差やジョブへの過剰割り当てに起因して滞留するデータチャンク。ソートのようにストリームの全データ到着を待つ処理パターンでは、最悪ケースのチャンクによってパイプライン全体の完了がブロックされる。検知時の「賢明な」対応(即座にジョブをkillして再起動する)は、パイプライン実装が通常チェックポイントを持たないため、全チャンクの作業をやり直させ時間・CPU・人的努力を浪費する。 - **サンダリングハード問題(thundering herd)**: 各実行サイクルで数千のワーカーが一斉に処理を開始し、ワーカー数が過剰・設定不良・不良なリトライロジックの場合、実行サーバ・共有クラスタサービス・ネットワークインフラを圧倒する。 - **モアレ負荷パターン(Moiré load pattern)**: 2つ以上の周期パイプラインの実行シーケンスがときおり重なることで、共有リソースへの負荷が一時的に集中する現象。個々のパイプラインを単独で見ても気づきにくく、共有リソースの負荷を重ねてプロットして初めて可視化される。サンダリングハード問題が単発の急増であるのに対し、モアレ負荷パターンは複数の周期性が干渉して生む反復的な負荷スパイクという点で異なる。 - **スケジューリング遅延の下限**: 実行間隔をジョブの実行時間の下限近くまで縮めると、新しい実行がスケジューラ上に積み上がる、あるいはほぼ終わりかけの実行が次の実行開始時にkillされるといった有害な挙動を招くだけで進捗は増えない。 - **監視の欠落**: 典型的な監視モデルはジョブ実行中にメトリクスを収集しつつ完了時にのみ報告するため、途中で失敗すると統計がまったく得られない。継続パイプラインはタスクが常時稼働しテレメトリもリアルタイムに設計されるため、この問題を共有しない。 (Source: [[@2016__OReilly__SRE Book - Chapter 25 Data Processing Pipelines]]) ## 継続処理への移行 周期パイプラインが本質的に継続的な処理需要、あるいは有機的な成長によって継続的になっていく需要に直面したとき、開発チームは既存設計をリファクタリングするか継続処理モデルへ移行するかを迫られる。[[Google Workflow]]は、この移行先としてリーダー・フォロワー(leader-follower、worker)パターンと system prevalence パターンを組み合わせ、ユーザーインターフェース設計のMVC(モデル・ビュー・コントローラ)パターンを分散システムへ翻案することで、exactly-onceの正しさを保証する継続的パイプラインを実現する例である。(Source: [[@2016__OReilly__SRE Book - Chapter 25 Data Processing Pipelines]]) ## 横断的知見 - (本ページは現時点で [[@2016__OReilly__SRE Book - Chapter 25 Data Processing Pipelines]] 単独の情報を集約している段階である。複数ソースの突き合わせで見える知見が得られ次第、次のソースが加わった時点で追記する。) ## 未解決の問い - SRE Book第25章はMapReduce・Flumeを周期パイプラインの実装フレームワーク例として挙げるが、それぞれの実装がハングしたチャンク問題・モアレ負荷パターンにどう対処しているか(あるいはしていないか)は本章の範囲外である。 - モアレ負荷パターンを事前に検知・予測する手法は他ソースで論じられているか。 - 継続処理モデル(Workflowのような)への移行コスト・移行判断の具体的な閾値(データ量・更新頻度のどのラインを超えたら移行すべきか)は本章では定量化されていない。 ## 関連 - 概念: [[パイプライン処理]](名称は同じだがCPUの命令パイプライン処理を扱う別領域の概念であり、本概念とは扱う対象が異なる) / [[ストラグラー]](分散処理におけるワーカー遅延という近接した問題) / [[分散ロックとリース]](Google Workflow の Task Master が用いるリース機構) / [[分散コンセンサス]] - エンティティ: [[Google Workflow]] / [[Dan Dennison]] / [[Borg]] / [[Spanner]] / [[Chubby]] / [[MapReduce]] - ソース: [[@2016__OReilly__SRE Book - Chapter 25 Data Processing Pipelines]] ## 出典 - [[@2016__OReilly__SRE Book - Chapter 25 Data Processing Pipelines]]