-
Maestro: Netflixのワークフローオーケストレーター
-
TL;DR
- NetflixはMaestroのソースコードを公開
- GitHubリポジトリから始められ、役に立ったらスターを付けてほしいとのこと
-
Maestroとは何か
- Maestroは大規模なワークフローを管理するために設計された、汎用で水平スケーラブルなワークフローオーケストレーター
- データパイプラインや機械学習モデルの学習パイプラインなど、ワークフローのライフサイクル全体を管理
- ユーザーはDockerイメージ、ノートブック、bashスクリプト、SQL、Pythonなど、さまざまな形式でビジネスロジックをパッケージ化できる
- 従来のDAG(Directed Acyclic Graph)のみをサポートするワークフローオーケストレーターとは異なり、Maestroは非循環および循環ワークフローの両方をサポートし、foreachループ、サブワークフロー、条件分岐など複数の再利用可能なパターンを含む
-
Maestroとともに歩んだ道のり
- 数十万件のワークフローを、ユーザーへの影響を最小限に抑えながら成功裏に移行
- 過去1年間で実行されたジョブは87.5%増加し、1日平均50万件のジョブを実行中
-
スケーラビリティと汎用性
- Maestroは、Netflixの数千人のエンドユーザー、アプリケーション、サービスにWorkflow-as-a-Serviceを提供するフルマネージドなワークフローオーケストレーター
- ETLパイプライン、MLワークフロー、ABテストパイプラインなど、さまざまなワークフローのユースケースをサポート
- Netflixのデータテーブルは単一のデータウェアハウスに存在するため、単一のオーケストレーターがそれを扱うべきだと考えている
-
Maestroの紹介
- JSON形式で定義されたワークフロー定義を使用
- ユーザー提供フィールドとMaestroが管理するフィールドを組み合わせ、柔軟で強力なオーケストレーション定義を構成
- ワークフロー定義はプロパティとバージョン管理されたワークフローで構成される
- プロパティには作成者や所有者の情報、実行設定などが含まれる
- バージョン管理されたワークフローには、一意識別子、名前、説明、タグ、タイムアウト設定、優先度レベルが含まれる
-
ワークフロー実行戦略
- 逐次実行戦略: FIFO順でワークフローを1つずつ実行
- 厳格な逐次実行戦略: ブロッキングエラーがある場合は実行を停止し、手動でエラーを解決する必要がある
- 最初のみ実行戦略: 現在実行中のワークフローが完了するまで、新しいワークフローインスタンスをキューから取り除く
- 最後のみ実行戦略: 最新にトリガーされたワークフローのみを実行し、既存の実行中インスタンスを停止する
- 同時実行数制限付き並列実行戦略: 事前定義された同時実行数の制限に従って、複数のワークフローインスタンスを並列実行する
-
パラメーターと式言語のサポート
- 動的パラメーターとコード挿入をサポートし、ワークフローの柔軟性と動的性を大幅に向上
- セキュリティおよび安全性の問題に対処するため、独自のカスタム式言語パーサーを開発
- Simple and Safe Expression Language (SEL): コード挿入に関連するリスクに対処するために開発された、シンプルで安全な式言語
- 出力パラメーター: ユーザー実行から出力パラメーターをシステムへ返せる
- パラメーター化ワークフロー: ユーザー定義パラメーターに基づいて、ランタイム時に段階的に初期化される
-
ワークフロー実行パターン
- Foreachサポート: 同じタスクを異なるパラメーターで繰り返し実行するために使用
- 条件分岐サポート: 特定の条件が満たされた場合にのみ後続ステップを実行
- サブワークフローサポート: 共通機能を複数のワークフローで共有できるようにする
-
ステップランタイムとステップパラメーター
- ステップランタイムインターフェース: 実行時にタスクを記述するインターフェース
- ステップパラメーターのマージ: ステップ実行前にランタイムパラメーターとタグを注入し、ステップ動作を動的に制御する
-
ステップ依存関係とシグナル
- ステップ依存関係を使って実行依存関係を表現できる
- シグナルは、パラメーター値を含む情報を伝達するメッセージ片
-
ブレークポイント
- ワークフローステップにブレークポイントを設定でき、コードレベルのブレークポイントのように動作する
- ブレークポイントに到達すると、そのステップは「一時停止」状態に入り、ユーザーが手動で再開するまでワークフローグラフの進行が止まる
-
タイムライン
- ステップ実行タイムラインを含む、すべての重要イベントを記録
- デバッグに有用で、ステップ状態についての洞察を提供する
-
リトライポリシー
- 失敗によって終端状態に到達したステップに対してリトライポリシーをサポート
- プラットフォームエラーに対するリトライと、ユーザー定義条件に対するリトライを区別する
-
集約ビュー
- ワークフローインスタンスの全ステップの集約状態を確認できる
- 現在の実行のランタイムデータと基本集計を組み合わせて、集約状態を計算する
-
ロールアップ
- ワークフローインスタンスの高レベルな要約を提供
- 各ステップの状態と、各状態にあるステップ数を詳述する
-
Maestroイベント発行
- ワークフロー定義、ワークフローインスタンス、またはステップインスタンスが変更されるとイベントを生成し、外部システムへ発行
- 内部イベントと外部イベントに区別される
-
Maestroを始める
- Netflixで広く利用されており、今回ソースコードを公開
- GitHubリポジトリでコードを見つけられ、質問や意見があればGitHub Issueを作成してほしいとのこと
-
謝辞
- Maestroプロジェクトに貢献したチームメンバーとNetflixの同僚たちへ謝意を表明
GN⁺のまとめ
- MaestroはNetflixの大規模ワークフローを管理するために設計されたオーケストレーターで、さまざまな形式のビジネスロジックをサポート
- 動的パラメーターとコード挿入により、柔軟性と動的性を大幅に向上
- 多様な実行戦略とパターンを提供し、複雑なワークフローを簡単に定義・管理できる
- Netflixのデータウェアハウスのような単一のデータソースを扱うのに適している
- 類似機能を提供する他のオーケストレーターにはApache AirflowやPrefectがある
1件のコメント
Hacker Newsのコメント
企業の技術ブログや社内システムには感銘を受けていたが、今ではコードは負債でもあると気づいた
エンジニアがワークフローソリューションに満足するまでに何度も反復が必要になるのか気になっている
Windmill.dev創業者のコメント
Activebatchの利用経験の共有
Netflix/Conductor利用についての混乱
オーケストレーターについての意見
Temporalとの比較
プロジェクトへの好意的な評価
Conductorとの違いについての質問
記事内容への批判