序章
eBay の Wen Jun は、最近開催された上海オープンソース ビッグ データ ミートアップで、「Apache DolphinScheduler アーキテクチャの進化」について素晴らしい共有を行いました。この共有には 200 人近くが参加し、オンラインでの閲覧数は 2,500 を超えました
写真はその場面を示しています
ビデオを共有するには、次を参照してください
Apache DolphinScheduler の概要
Apache DolphinScheduler は、クラウドネイティブの分散型分散型で、簡単に拡張可能なビジュアル DAG ワークフロー タスク スケジューリング プラットフォームです。データ処理プロセスにおける複雑な依存関係の解決に尽力し、データ処理プロセスですぐにスケジューリング システムを使用できるようにします。DolphinScheduler は、タスクを有向非巡回グラフで接続し、タスクの実行状況をリアルタイムで監視でき、指定したタスク ノードからのキャンセル、一時停止、再開、再実行などの操作をサポートします。
DolphinScheduler には次の優れた機能特性があります。
クラウド ネイティブ— マルチクラウド/データセンターのワークフロー管理をサポートし、Kubernetes、Docker デプロイメント、カスタム タスク タイプ、分散スケジューリングもサポートし、全体的なスケジューリング機能はクラスター サイズに比例して増加します。
高い信頼性と高い拡張性- 分散型マルチマスターおよびマルチワーカー設計アーキテクチャ、オンラインおよびオフラインの動的なサービス、自己耐障害性および調整機能をサポート
マルチテナンシーのサポート
豊富な使用シナリオ- ストリーム、一時停止、再開操作に加え、Spark、Hive、MR、Shell、Python、Flink、DS の独自のサブワークフローやタスク依存の設計、拡張ポイントなどの追加のタスク タイプを含むプラグイン方式を採用し実現
使いやすさ - すべてのプロセス定義操作の視覚的な配置、一目でわかる重要な情報の定義、ワンクリックの導入
DolphinShedulerの機能紹介や開発ドキュメントの詳細については、公式サイト https://dolphinscheduler.apache.org/zh-cn/ をご参照ください。
アーキテクチャの進化プロセス
1.2.x アーキテクチャ
DolphinScheduler が最初に Apache インキュベーターに組み込まれたバージョンは 1.2 でした。このバージョンで採用されたアーキテクチャは、次の重要な部分で構成されています。
分散マスター ノードは、ワークフローのスケジューリング、DAG タスクのセグメント化、タスク送信の監視、他のノードの健全性状態の監視などのタスクを担当します。
分散型ワーカーノード。タスクの実行やタスクのライフサイクルの維持などを担当します。
データベース、ワークフローメタデータの保存、実行中のインスタンスデータ
Zookeeper は主に登録センター、分散ロック、タスクキュー、その他のタスクを担当します。
バージョン 1.2 は基本的に信頼性の高いワークフロー スケジューリング システムを実装していますが、まだ多くの問題があります。
ヘビーウェイトワーカー、ワーカーノードはさまざまなタスクを担当する必要があります
タスクを非同期にディスパッチすると、タスクの実行に遅延が発生します
マスカーとワーカーの両方がデータベースに依存する必要があるため、データベースへの負荷が高くなります。
1.3.x アーキテクチャ
バージョン 1.2 の問題に対応して、1.3 アーキテクチャは次のように改善されました。
タスクキューに移動して、マスターノードがタスクを同期的にディスパッチするようにし、タスクの実行遅延を削減します。
軽量ワーカー、ワーカーノードはタスクの実行のみを担当し、ワーカーの責任を簡素化します。
データベースの負荷を軽減し、ワーカーがデータベースに接続しなくなります
マルチタスク負荷分散戦略を使用して、マスターはワーカー ノードのリソース使用量に応じてタスクを割り当て、ワーカー リソースの使用率を向上させます。
これらの改善により、バージョン 1.2 の欠陥は効果的に改善されましたが、次のようないくつかの問題がまだ残っています。
マスターはワークフローをスケジュールするときに分散ロックに依存する必要があるため、ワークフローのスループットを向上させることが困難になります。
多数のスレッド プールを作成する必要があるため、ほとんどのスレッドがデータベースをポーリングし、マスター リソースの使用率が低くなります。
マスターはデータベースをポーリングしますが、それでもデータベースに大きな負荷がかかります
コンポーネントが結合されている
2.0 アーキテクチャ
バージョン 1.3 の欠陥に対応して、2.0 アーキテクチャではさらに次の改善が行われています。
分散ロックが削除され、パーティション番号がマスターに割り当てられ、複数のノードが同じワークフローに同時にアクセスすることによって引き起こされる競合を回避するために、クエリ データベースが分散して実現されます。
すべてのワークフローに統合スレッド プールを使用するようにマスター スレッド モデルをリファクタリングします。
データベース内のDAG メタデータモデルをリファクタリングする
徹底したプラグイン、すべての拡張ポイントはプラグインによって実装されます
データ血縁分析
1 分散ロックを削除します
2 マスターのスレッドモデルをリファクタリングする
SchedulerThread は、データベースからコマンドをクエリし、それをコマンド キューに送信する責任があります。
DagExecuteThreadPool は、コマンド キューからコマンドを取得し、DAG インスタンスを構築し、処理のために DAG キューに追加します。現在の DAG に未実行のタスクがない場合、現在の DAG の実行は終了します。
TaskExecuteThreadPool はタスクを Worker に送信します
TaskEventThread はタスク イベント キューをリッスンし、タスクのステータスを変更します
3 徹底したプラグイン
すべての拡張ポイントはプラグインとして実装されます
アラームSPI
レジストリSPI
リソースストレージSPI
タスクプラグインSPI
データソースSPI
……
Apache DolphinScheduler の開発方向
Wen Jun は、DolphinScheduler の将来の開発の方向性についてもいくつかの見解を共有しました。
システムの安定性と速度が向上しました (高スループット、低遅延、インテリジェントな運用とメンテナンス、高可用性)
より多くのタスク統合のサポート (深層学習タスク、CI/CD およびその他のシステム統合、ストアド プロシージャとデータ品質タスク、コンテナ スケジュール タスク、複雑なスケジュール シナリオなど)
基本的なスケジューリング サービスを提供する軽量の DolphinScheduler カーネル
オープンソースのコントリビューションに参加する方法
最後に、開発者の Ruan Wenjun は、初心者がオープンソースのコントリビューションに参加する方法について貴重なガイダンスを提案しました。
小さく始めて開発経験を積む
コミュニティの動向に注意を払い、ディスカッションに積極的に参加し、コミュニティへの統合を促進します。
オープンソースの精神を遵守し、他の人を助けることに積極的です
持続的な発展と貢献の精神を維持する
共有講師: Ruan Wenjun、eBay 開発エンジニア、DolphinScheduler ディープ コントリビューター、オープンソース ディープ プレーヤー
編集者: Xu Weiyi さんは、2018 年に天津大学でコンピュータ サイエンスとテクノロジーを専攻する学部生で、プログラミングが大好きで、前に進んでいます。この記事は、DolphinScheduler コミュニティのオープンソース作業に初めて参加するものですが、徐々に経験を積み、コミュニティへのさらなる貢献を続けていきたいと考えています。
クリックして原文を読み、公式 Slack ディスカッション グループに参加し、Twitter をフォローしてください: https://twitter.com/DolphinSchedule