分散タスク スケジューリング: PowerJob の概要

1. プロジェクト紹介

1. 製品の特長

PowerJob ** (旧 OhMyScheduler) **は、新世代の分散タスク スケジューリングおよびコンピューティング フレームワークであり、主な機能は次のとおりです

  • 使いやすさ: フロントエンド Web インターフェイスを提供し、開発者がタスクのスケジュール管理 (追加、削除、変更、確認)、タスクの実行ステータスの監視、および実行ログの表示を視覚的に完了できるようにします。
  • 完璧なタイミング戦略: CRON 式、固定周波数、固定遅延、API の 4 つのタイミング スケジューリング戦略をサポートします。
  • 豊富な実行モード: スタンドアロン、ブロードキャスト、Map、MapReduce の 4 つの実行モードをサポートしており、その中でも Map/MapReduce プロセッサを使用すると、開発者はわずか数行のコードでクラスタ分散コンピューティング機能を取得できます
  • ワークフローのサポート: タスクの依存関係 (DAG) のオンライン構成をサポートし、タスクを視覚的に配置します。また、上流タスクと下流タスク間のデータ転送、および複数のノード タイプ (判定ノードとネストされたワークフロー ノード) もサポートします。
  • アクチュエータは広範囲をサポートします。Spring Bean、組み込み/外部 Java クラスをサポートし、幅広いアプリケーションを備えた公式の依存関係パッケージを導入することで、ワンクリックで Shell、Python、HTTP、SQL およびその他のプロセッサを統合できます。
  • 便利な操作とメンテナンス:オンラインログ機能をサポートし、アクチュエータによって生成されたログをフロントエンドコンソールページにリアルタイムで表示できるため、デバッグコストが削減され、開発効率が大幅に向上します。
  • 依存関係の簡素化:リレーショナル データベース (MySQL/ PostgreSQL **/Oracle/MS SQLServer…) **への最小限の依存関係のみ
  • 高可用性と高性能: スケジューリング サーバーは慎重に設計されており、他のスケジューリング フレームワークのデータベース ロックベースの戦略を変更し、ロックフリーのスケジューリングを実現します。複数のスケジューリング サーバーを導入すると、高可用性とパフォーマンスの向上を同時に実現できます (無制限の水平拡張をサポート)。
  • フェイルオーバーとリカバリ: タスクの実行に失敗した後、構成された再試行戦略に従ってタスクを再試行できます。実行クラスターに十分なコンピューティング ノードがある限り、タスクは正常に完了できます。

オンライントライアル: https://www.yuque.com/powerjob/guidence/hnbskn

2. 適用可能なシナリオ

  • 定期的な実行要件のあるビジネス シナリオ: 毎朝の完全なデータ同期、ビジネス レポートの生成、未払い注文の時間外キャンセルなど。
  • ブロードキャスト実行モードを使用してクラスター ログをクリーンアップするなど、すべてのマシンを同時に実行する必要があるビジネス シナリオがあります。
  • 大量のデータを更新する必要があり、1台のマシンで実行するには時間がかかるなど、分散処理が必要なビジネスシーンがありますが、Map/MapReduceプロセッサを使用することでタスクの分散を完了し、全体を動員することができます。コンピューティングを高速化するクラスター。
  • 注文の有効期限処理など、特定のタスクの実行を遅らせる必要があるビジネス シナリオがあります。

3. 設計目標

PowerJob の設計目標は、エンタープライズ レベルの分散タスク スケジューリング プラットフォーム、つまり企業の内部タスク スケジューリング ミドルウェアになります。会社全体がスケジューリング センター powerjob-server を均一に展開しており、すべてのビジネス ライン アプリケーションは powerjob-worker に依存するだけでスケジューリング センターにアクセスし、タスク スケジューリングと分散コンピューティング機能を取得できます。

4. 類似製品の比較

石英 xxl-ジョブ スケジューラーX 2.0 パワージョブ
タイミングタイプ クロン クロン CRON、固定周波数、固定遅延、OpenAPI CRON、固定周波数、固定遅延、OpenAPI
タスクの種類 組み込みJava 組み込みの Java、GLUE Java、Shell、Python、およびその他のスクリプト 組み込み Java、外部 Java (FatJar)、シェル、Python およびその他のスクリプト 組み込み Java、外部 Java (コンテナ)、シェル、Python およびその他のスクリプト
分散タスク なし 静的シャーディング MapReduceの動的シャーディング MapReduceの動的シャーディング
オンラインタスク管理 サポートしません サポート サポート サポート
ログホワイトスクリーン サポートしません サポート サポートしません サポート
スケジューリング方法とパフォーマンス データベースのロックに基づいてパフォーマンスのボトルネックが存在します データベースのロックに基づいてパフォーマンスのボトルネックが存在します 知らない ロックフリー設計、上限なしの強力なパフォーマンス
アラーム監視 なし 郵便 ショートメッセージ メール。開発者が拡張できるインターフェイスを提供します。
システムに依存する リレーショナル データベース (MySQL、Oracle など) MySQL 人民元 Spring Data Jpa でサポートされているリレーショナル データベース (MySQL、Oracle など)
DAG ワークフロー サポートしません サポートしません サポート サポート

2. 基本的な考え方

このセクションでは、開発者がフレームワークをよりよく理解して使用できるように、このフレームワークに含まれる固有名詞の概念について説明します。

グループ化の概念:

  • appName: アプリケーション名。ユーザーが実際に PowerJob にアクセスし、ビジネスのグループ化と分離に使用されるアプリケーション名と一致させることをお勧めします。appName はビジネス クラスター、つまり実際の Java プロジェクトに相当します

核となるアイデア:

  • タスク (ジョブ): タスク名、スケジュール時間、プロセッサー情報など、PowerJob によってスケジュールする必要があるタスク情報を説明します。

  • タスク インスタンス (JobInstance、インスタンスと呼ばれる): タスク (ジョブ) は、実行がスケジュールされた後にタスク インスタンス (インスタンス) を生成し、タスク インスタンスはタスクの実行時情報 (タスクとタスクの関係) を記録します。タスク インスタンスはクラスとオブジェクトの関係に似ています)。

  • Job (Task): タスク インスタンスの実行単位。JobInstance には少なくとも 1 つの Task が存在します。具体的な規則は次のとおりです。

    • スタンドアロンタスク (STANDALONE): 1 つの JobInstance が 1 つの Task に対応します。
    • ブロードキャスト タスク (BROADCAST): 1 つの JobInstance は N 個のタスクに対応し、N はクラスター マシンの数です。つまり、各マシンがタスクを生成します。
    • Map/MapReduce タスク: 1 つの JobInstance は、開発者によって手動で生成される複数のタスクに対応します。
  • ワークフロー (Workflow): タスク オーケストレーションのために DAG (有向非巡回グラフ) によって記述された一連のタスク (ジョブ)。

  • ワークフロー インスタンス (WorkflowInstance): ワークフローの実行がスケジュールされると、ワークフロー インスタンスが生成され、ワー​​クフローの実行時情報が記録されます。

拡張された概念

  • JVM コンテナ: 一連の Java ファイル (開発者によって開発された多くの Java プロセッサ) を Maven プロジェクトの次元で整理します。これは、強力なスケーラビリティと柔軟性を備えて、フロントエンド Web ページを通じて動的に公開し、実行プログラムによってロードできます。
  • OpenAPI: 開発者がインターフェイスを通じて手動操作を完了できるようにし、システム全体をより柔軟にします。開発者はAPIベースでPowerJob本来の機能を簡単に拡張できます。
  • 軽量タスク: 単一マシンで実行され、固定頻度または固定遅延で実行する必要のないタスク (v4.2.1 以上)
  • 重量タスク: 単一マシンで実行されないタスク、または固定の頻度/遅延で実行されるタスク (v4.2.1 以上)

タイミングタスクのタイプ

  • API: このタスクは、powerjob-client で提供される OpenAPI インターフェイスによってのみトリガーされ、サーバーはアクティブにスケジュールしません。
  • CRON: このタスクのスケジュール時間は CRON 式で指定されます。
  • 固定頻度: 第 2 レベルのタスク、ミリ秒ごとに実行。関数は java.util.concurrent.ScheduledExecutorService#scheduleAtFixedRate と同じです。
  • 固定遅延: 第 2 レベルのタスク。1 回の実行を何ミリ秒遅らせるか。関数は java.util.concurrent.ScheduledExecutorService#scheduleWithFixedDelay と同じです。
  • ワークフロー: タスクは、それが属するワークフローによってのみスケジュールおよび実行され、サーバーはタスクをアクティブにスケジュールしません。タスクがどのワークフローにも属していない場合、タスクはスケジュールされません。

備考: 固定遅延タスクと固定頻度タスクは、総称して第 2 レベルのタスクと呼ばれます。これら 2 つのタスクは停止できません。タスクが閉じられるか削除される場合にのみ、タスクを真に停止できます

3. プロジェクトアドレス

PowerJob メイン プロジェクト: https://github.com/PowerJob/PowerJob

PowerJob フロントエンド プロジェクト: https://github.com/PowerJob/PowerJob-Console

PowerJob 公式 Web サイトプロジェクト: https://github.com/PowerJob/Official-Website

おすすめ

転載: blog.csdn.net/zhanggqianglovec/article/details/131501227