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