本論文では、機能、実装原理、長所と短所、および他の同様のフレームワークの比較を含む分散タスクスケジューリングプラットフォームXXL-JOB(バージョン2.1.0バージョン)、説明します
基本的な導入
プロジェクト開発は、多くの場合、次のシナリオは、分散タスクスケジューリングが必要です。
- 同じサービスの複数のインスタンスのタスクの存在を相互に排他的とは調整が必要
- 定期的なタスクを実行し、高可用性、監視、運用、保守をサポートする必要がある、障害アラーム
- こうしたタスク所有のサービスなど、タスクの個々のサービスノードのタイミング、およびタスクの属性情報を、追跡する必要の一元管理・運用は、責任は人に属し、
したがって、XXL-JOBが登場:
XXL-JOBは、オープンソースの軽量分散タスクスケジューリングプラットフォームであり、そのコアの設計目標は、学ぶことは簡単で、迅速に開発することである、軽量、拡張しやすい、箱から出して、ここで" XXLは「筆頭著者、パブリックコメントである徐雪略称します
2015年、オープンソース以来、同社は、オンライン製品ラインの数百にアクセスすることができ、このような大規模なデータなどのビジネス電気の供給、O2Oビジネスやオペレーションを伴うアクセスシナリオ
特長
次のように主な機能は次のとおりです。
シンプルで柔軟な
アクセス制御を管理をサポートするためのタスク管理、ユーザー管理システムのためのWebページを提供するために、
血管の展開をサポートしています。
一般的なHTTPによるクロスプラットフォームのジョブスケジューリングをサポートしています。豊富なタスク管理
タスクCRUD操作のサポートページ、
スクリプトタスク・ページのサポート、コマンドラインタスク、Javaコード、およびタスクを実行する、
サポートタスクのカスケード配置、親タスクのサブタスクの実装では、実行をトリガした後、
設定タスクの優先度をサポートしています;
サポートノードルーティング設定は、ポーリング、ランダム、放送、フェイルオーバー、忙しい転移を含む、タスク実行戦略を指定し、
クーロンの実施形態をサポートする、タスクの依存関係、派遣センターAPIインタフェースのタスクの実行をトリガー高性能
マルチスレッド、スレッドプールに基づいて制御センタスケジューリングタスクをトリガし、タスク速い、遅いタスクスケジューリング分離スレッドプールをベースシステムの性能と安定性を提供することと、
スケジューリング処理等スケジューリング非同期、非同期動作、非同期コールバックなどの完全非同期設計を達成するためにトラヒック集中クリッピングの効果的なスケジューリング。高可用性
ミッションコントロールセンターは、ミッションの実行ノードが配備、動的拡張をサポートし、クラスタ化され、フェイルオーバーは
、ノードが自動的に実行するために他のノードに転送され、使用できない実行し、フェイルオーバー・ルーティングポリシーの設定作業をサポートする
サポート・タスクは、コントロール、失敗時の再試行構成タイムアウト
サポート・タスクを処理ブロック戦略:スケジューリングのタスクを実行するには遅すぎプロセス戦略ときを含め、タスク実行ノード忙しい:シリアル、放棄され、カバレッジ戦略簡単操作・保守監視するための
ミッションを設定サポートは電子メール警告を失敗した、予約済みのインターフェイスはSMS、爪のアラームをサポートし、
リアルタイムの見直しタスク実行性能データグラフ、データを監視タスクの進行状況、タスクの実行ログを完了。
システム設計
1つのデザインのアイデア
「コントロールセンター」の公共プラットフォーム、およびプラットフォーム自体は、ビジネスロジックを負うものではありませんスケジューリング行動抽象的な形、「コントロール・センターは、」スケジューリング要求を開始する責任がある。
抽象タスクへの分権JobHandlerに、「アクチュエータ」の統合管理」と呼ばアクチュエータ「スケジューリング要求を受信するとJobHandler対応するビジネスロジックを実行する責任があり、
従って、」スケジューリング「と」タスク「は、互いから分離することができる2つの部分は、全体的なシステムの安定性と拡張性を向上させます。
2つのシステムコンポーネント
モジュール(コントロールセンター)スケジューリング:スケジューリング情報を管理し、発送をスケジュールに従って配置されて、サービスコード自体が負担しません。スケジュールシステム性能がもはやタスクモジュールによって制限されている間、タスクスケジューリングシステムをデカップリングしないと、システムの可用性と安定性を向上させ、支援可視化、シンプルな管理と動的スケジューリング情報は、新しいタスク、更新、削除、アラームや他のタスクを含め、即時の効果を有する上記の操作の全てであろう、ログを監視し、ディスパッチの実装と結果を支持した状態で、サポートアクチュエータフェイルオーバ
実行モジュール(エフェクター):スケジューリング要求を受信して、タスクのロジックを実行するための責任。実行要求の「コントロールセンター」、終了要求、等ログ要求を受信するステップと、他のタスクに集中するタスクモジュールは、よりシンプルで効率的な操作、開発及びメンテナンスを行います
3つの作品
- タスクの実行は、派遣センターの構成、ディスパッチ・センタへの自動登録のアドレスであります
- タスクがディスパッチセンターの下で発行され、タスクを達成するための条件をトリガ
- タスクを実行し、メモリキューに結果を置くために、スレッド・プール、ログファイルに書き込まれた実行ログに基づいて実行
- コールバックキュースレッドの結果は、アクチュエータに派遣センターに報告されたイニシアチブをメモリを消費します
- ユーザーが要求されたタスクを実行するためにタスクディスパッチセンター、派遣センターを表示するためにログインすると、タスクを実行するタスクは、ログファイルを読み込み、ログの詳細に戻ります
4 HAデザイン
4.1派遣センターの可用性
派遣センターは一つだけ派遣センタノードは、タスクのスケジューリングをトリガすることを確実にするために、データベースの行ロックに基づいて、マルチノードの展開をサポートするために、基準com.xxl.job.admin.core.thread.JobScheduleHelper位スタート
Connection conn = XxlJobAdminConfig.getAdminConfig().getDataSource().getConnection();
connAutoCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
preparedStatement = conn.prepareStatement( "select * from xxl_job_lock where lock_name = 'schedule_lock' for update" );
preparedStatement.execute();
# 触发任务调度
# 事务提交
conn.commit();
4.2高可用性タスク・スケジューリング
ポリシールーティング
:ミッションを実行するためにコントロールセンターベースのルーティングポリシールーティングノードを、XXL-JOBは、高可用性タスクのスケジューリングを確認するために、次のルーティングポリシーを提供し
ビジー転送戦略:フロント発行したRPCのタスクノードがビジーアクチュエータかどうかを尋ねるために、ハートビート要求を開始し、アクチュエータは、ノードに転送されている場合は、他のアクチュエータを実行するために忙しいノードを返します(com.xxl.job.admin.core.route.strategy.ExecutorRouteBusyoverを参照してください)
フェールオーバーの戦略:ハートビートかどうかを照会するノードのRPC要求の前に発行したタスクの実行を起動しますオンライン、アクチュエータが利用できないノードを返したか、別のノードの実行にアクチュエータの移動を返していない場合(参照com.xxl.job.admin.core.route.strategy.ExecutorRouteFailover)処理戦略をブロック
:複数のタスクが実行されていない存在する同じタスクidノードを実行するとき、あなたはブロッキング戦略に基づいたミッションのトレードオフにする必要があります
シリアル戦略、デフォルトポリシー、タスクキューを:古いミッション戦略を捨て、新しいタスクのポリシーを破棄します
(参照:com.xxl.job.core.biz.impl.ExecutorBizImpl#ラン)
同様のフレームワークを比較
プロパティ | 石英 | 弾性ジョブ-LITE | XXLジョブ | LTS |
---|---|---|---|---|
頼ります | MySQLの、JDK | JDK、飼育係 | mysqlの、JDK | JDK、飼育係、達人 |
ハイアベイラビリティ | 競争力のあるデータベースロックによるマルチノードの展開、1つのノードのみタスクを実行することを保証します | 発見の飼育係に登録することにより、あなたは動的にサーバーを追加することができます | 1つのノードのみ展開のレベルをサポートするためのタスクを実行することを保証するために、競争力のあるデータベースロックに基づきます。、定期的な手作業を増やす開始し、タスクを一時停止することがあり、監視があります | クラスタの展開、あなたは動的にサーバーを追加することができます。あなたは、定期的な手作業を増やす開始し、タスクを一時停止することがあります。そこモニター |
タスクのスライス | × | √ | √ | √ |
管理インターフェイス | × | √ | √ | √ |
難易度 | シンプル | シンプル | シンプル | やや複雑 |
先進的な機能 | - | 弾性膨張、動作モード、フェイルオーバー、状態の実行コレクション、マルチスレッディングデータ、冪等、フォールトトレランス、春の名前空間のサポートの様々な | 弾性膨張、フラグメンテーション放送、フェイルオーバー、ローリングリアルタイムログ、GLUE(オンライン編集コード、無料のリリースをサポート)、進捗状況の監視タスク、タスクの依存関係、データの暗号化、電子メールアラート、レポートを実行し、国際 | サポートスプリング、春ブーツ、ビジネスロガー、SPIがサポートを拡張し、フェイルオーバー、ノード監視タスクの実行結果は、多様化、FailStoreフォールトトレランス、動的な拡張をサポートしています。 |
バージョンアップ | 半分は更新されませんでした | 2年は更新されませんでした | 最近更新 | 1年更新されませんでした |
使用
クイックスタート
具体的にどのように迅速に公式文書を始めるために:http://www.xuxueli.com/xxl-job/より詳細かつ明確だっ導入され、それらを繰り返しません
注意事項
- クロック同期
制御センターとタスクの実行には時間同期を必要とし、時刻同期誤差は3分以内に必要な、またはスローさ
参考:com.xxl.rpc.remoting.provider.XxlRpcProviderFactory#invokeServiceを
if (System.currentTimeMillis() - xxlRpcRequest.getCreateMillisTime() > 3*60*1000) {
xxlRpcResponse.setErrorMsg("The timestamp difference between admin and executor exceeds the limit.");
return xxlRpcResponse;
}
2つのタイムゾーンの質問
タイムゾーンのカスタムのcron式に従って派遣センターによってトリガタスク、cronの発現タスクを設定派遣センターをトリガするためによると、あなたは派遣センターの展開マシンのタイムゾーンに注意を払う必要があり、3タスクの実行サービスの質問を撃墜
アクチュエータが突然、派遣センターの実装では、タスクの実装に派遣センターをリードしていないだろう、サービスを撃墜すると、タスクの実行中に、アクチュエータ、タスクを完了するために派遣センターを発行失敗を起動し、再試行してください。タスクは、アクチュエータによって検出され、派遣センターに報告されているため、タスクがタイムアウトを設定しても、アクチュエータが完了したタスクの実行中に結果をもたらさなかった長い時間を撃墜、コントロール・センターのインターフェースは、タイムアウトをタスクのタイムアウトは表示されません
したがって、完了するまでに長い時間のために行われていないタスクは、我々があったかどうか、突然のアクチュエータがサービスを撃墜に集中することができます会いました
4つのエレガントなダウンタイムの
アクチュエータは、スレッドプールを再起動する必要が、我々は、この方法に注意を払う、直接XxlJobExecutor.destroy()エレガント停止に基づくことができるエレガントを停止し、する必要があるタスクを完了するために行われていない問題があることに留意すべきである非同期実行スレッドプールに基づいて、タスクを実行するには以前のバージョンでv2.0.2バグがエレガント停止、バージョンv2.0.2につながらない存在と後修復された(参照:https://github.com/xuxueli/xxl-job/issues/727)5故障リトライ問題
サービスの実行ノードの一部がノードディスクが破損しているような、利用できないが、それでもディスパッチ中心線であり、制御センターは、依然として、組立ラインから外れないルーティング・ノードに(フェイルオーバー・ポリシーを含む)ポリシーベースルーティングであってもよいですそして排出再試行回数を引き起こし、再試行が失敗し続けることを続けます。だから、最後は固定、第1の固定など、固定されたルーティングポリシーの戦略を使用しないようにしよう
概要
始めるためにXXL-JOBは、あなたがなど、分散システムの設計、ネットワーキング、マルチスレッドの同時処理の知識のより深い理解を学ぶことができ、プロジェクトのソースコードは、比較的、きれいな読みやすい、比較的単純で、読書を推奨