導入
Disjob は分散タスク スケジューリング フレームワークであり、分散長時間タスクの実行をサポートするように設計されています。通常のタスク スケジューリング機能に加えて、タスクの分割と分散並列実行、実行中のタスクの一時停止とキャンセル、タスク、一時停止されたタスクの実行の再開、失敗したタスク実行の再試行、タスク実行スナップショットの保存 (セーブポイント)、タスクの依存関係、タスク オーケストレーション (DAG)、ブロードキャスト タスク、その他の機能。Disjob の全体的なフローチャートは次のとおりです。
応用シナリオの例
簡単な例を挙げると、(0,1万亿]
区間内の素数の数を数えます。1台のシングルスレッドCPUだと計算に時間がかかってしまいますが、フレームワークがDisjob
提供する分散並列実行機能を利用することでこのような問題を解決できます。
- タスクを分割する
まず、現在のマシン リソースに基づいて分割タスクの数を決定します。たとえば、5 台のマシンがあり、それぞれに 2 コアの CPU (素数統計は CPU を集中的に使用します) があり、それを 10 個のタスクに分割することにします。
- タスクをディスパッチする
スーパーバイザーは、指定されたルーティング アルゴリズムを使用して、10 個の分割サブタスクをこれらのワーカー マシンにディスパッチします。
- タスクを受け取る
ワーカーがサブタスクを受信すると、実行のためにフレームワークによって定義されたスレッド プールに送信されます。
- 分散並列実行
実行中に、バッチ メソッド (コード ループによる) を使用してカウントすることができます。ここでは、task-1
最初のループで統計を指定し(0, 1亿]
、2 番目のループで統計を指定し(10亿, 11亿]
、最後のループで同様に統計を指定します(9990亿, 9991亿]
。他のタスクも同様に分散並列統計を実行します。
Ps 素数の分布は一般的に一様であることはリーマン仮説からもわかりますが、素数かどうかを判定する方法には、エールリッヒ篩法、オイラー篩法、ミラーラビン素数検定など数多くあります。ここでは、Guava ライブラリによって提供される素数テストを使用できます。
- セーブポイント
統計処理中にマシンがダウンした場合はどうすればよいですか? もう一度ゼロから統計を始めるべきでしょうか? ダメダメダメ!これを使用して、ループ内で 10 回ごと (または 1 分以上実行されるたび) にSavepoint
現在のtask-1
実行スナップショットを保存できます。このスナップショット データは、クラッシュ後にタスクが再起動されるときに読み取られ、統計は最後の状態から継続されます。以下は、task-1
タスクによって保存されたサンプルのスナップショット データです。
{
"next": 4000000001, // 下一次循环时要统计的区间为(40亿, 41亿]
"count": 19819734, // 已经统计到了 19819734 个质数
"finished": false // 当前任务是否已经统计完成:true-是;false-否;
}
- 一時停止と再開
マシン リソースが一時的に他のことを行う必要がある場合は、現在の統計タスクを一定期間中断したいと考えます。問題ない!フレームワークはサポートされており、暂停执行中的任务
管理バックグラウンド ページで调度实例
タスクを見つけて暂停
ボタンをクリックするだけです。タスクは一時停止時に割り込み信号を受信します。割り込み信号を受信したときに、コード内でその信号を使用して、Savepoint
現在の実行スナップショットを保存することもできます。
他の処理が完了したら、调度实例
管理バックグラウンド ページで中断されたタスクを見つけて恢复
ボタンをクリックすると、タスクは最後に保存された状態から再開され、実行が続行されます。
- 例外
サブタスクが実行中にフレームワークのPauseTaskExceptionをスローした場合、それは暂停
インスタンス内の 10 個のサブタスクすべてに対応します (別のマシンにディスパッチされたタスクを含む)。同様に、CancelTaskExceptionがスローされた場合、それは取消
インスタンス内の 10 個のサブタスクすべてに対応します。他のタイプの例外がスローされた場合、取消
現在のサブタスクのみが影響を受け、対応するインスタンスの下にある他のサブタスクは影響を受けません。
- タスクオーケストレーション
これで、合計 10 個のサブタスクを含む素数統計のタスク全体が完了し、各サブタスクが結果の一部を数えました。Disjob は結果を自動的に要約できますか? はい!このフレームワークは、次のようなタスクを調整するための非常に強力で便利な式を提供します。 これで、A->B,C,(D->E)->D,F->G
サマリー タスクを作成し、2 つのタスクを一緒に調整できるようになりました。
以下は、この例の素数統計のジョブ データです。これら 2 つのタスク プロセッサの配置を含む、主要なフィールドの一部のみがリストされていますjob_handler
(コードはプロジェクトのソース コードにあります)。
{
"jobGroup": "default",
"jobName": "prime-count-dag",
"jobState": 1, // job状态:0-禁用;1-启用;
"jobType": 2, // job类型:1-普通(Normal);2-工作流(DAG);
"jobHandler": "cn.ponfee.disjob.test.handler.PrimeCountJobHandler -> cn.ponfee.disjob.test.handler.PrimeAccumulateJobHandler",
"jobParam": "{\"m\":1,\"n\":10000000000,\"blockSize\":100000000,\"parallel\":10}",
"triggerType": 2,
"triggerValue": "2023-09-02 18:00:00"
}
この例の素数統計フローチャートは次のとおりです。
プロジェクトアドレス
gitee : https://gitee.com/dromara/disjob
github: https://github.com/dromara/disjob
Qt 6.6が正式リリース Gomeアプリの抽選ページのポップアップウィンドウが創設者を侮辱 Ubuntu 23.10が正式リリース 金曜日を利用してアップグレードするのもいいかもしれません! RISC-V: 単一の企業や国によって管理されていない Ubuntu 23.10 リリース エピソード: ヘイトスピーチが含まれているため ISO イメージが緊急に「リコール」された ロシアの企業は Loongson プロセッサをベースにしたコンピュータとサーバーを製造している ChromeOS は Google デスクトップを使用する Linux ディストリビューション環境 23 歳の 博士課程学生が Firefox の 22 年前の「ゴーストバグ」を修正 TiDB 7.4 リリース: MySQL 8.0 と正式互換 Microsoft が Windows Terminal Canary バージョンを発表