SchedulerX 2.0 は、オープンソースの ElasticJob のインターフェースクラスと互換性があります。コードを変更することなく、SchedulerX 2.0 プラットフォームで ElasticJob ジョブをホストできます。このトピックでは、SchedulerX 2.0 プラットフォームで ElasticJob ジョブをホストする方法について説明します。
背景情報
ElasticJob は、Quartz をベースに開発され、Zookeeper をレジストリセンターとして使用する、軽量で分散型の分散ジョブスケジューリングフレームワークです。 ElasticJob は、Apache に統合されたオープンソースサービスとして利用できます。詳細については、「ElasticJob」をご参照ください。
SchedulerX 2.0 の利点
強力なデータ可視化機能
ユーザーダッシュボードの表示
ジョブ実行レコードの表示
ユーザー操作ログの表示
ジョブ実行スタックの表示
ジョブ操作レコードの表示
高度な機能
ジョブオーケストレーション
SchedulerX 2.0 は、有向非巡回グラフ(DAG)に基づく、視覚的に直感的なジョブオーケストレーションのアプローチも提供します。グラフィカルなフロントエンドインターフェースでノードをドラッグすることにより、複雑なジョブの依存関係とシーケンスを設計できます。詳細な状態チャートにより、ダウンストリームジョブの実行失敗の原因を簡単に特定できます。

スロットリング
SchedulerX 2.0 は、夜間にオフラインレポートジョブを処理するためによく使用されます。たとえば、多数のレポートジョブが午前 1 時 00 分 00 秒または午前 2 時 00 分 00 秒に開始されます。 アプリケーションで実行されている同時ジョブの最大数を制御し、業務継続性を確保するために、同時実行のしきい値を超えるジョブはキューで待機します。 主要業績評価指標(KPI)レポートは、午前 9 時 00 分 00 秒までに完了する必要があります。 この場合、KPI レポートジョブにより高い優先度を割り当てて、スケジューリングプロセスで優先度の低いジョブをプリエンプトできます。
SchedulerX 2.0 では、プリエンプト可能なキュー内のジョブを、優先度の高いジョブによってプリエンプトできます。 この機能はコンソールで構成できます。

リソースの隔離
SchedulerX 2.0 では、名前空間またはアプリケーションごとにリソースを隔離できます。 SchedulerX 2.0 は、マルチテナントシナリオでの権限管理もサポートしています。
商用アラートと O&M
アラート
ジョブの実行の失敗、タイムアウト、および使用可能なマシンがない場合のアラート通知は、メール、DingTalk グループ、ショートメッセージ、または電話で送信されます。
O&M 操作
SchedulerX 2.0 では、ジョブの再実行、ジョブデータのリフレッシュ、ジョブの完了としてマーク、スタックの表示、ジョブの終了、マシンの指定を行うことができます。
O&M 不要で費用対効果が高い
ElasticJob は、ZooKeeper を使用してジョブを保存し、ジョブのスケジューリングを調整します。 少なくとも 3 つのノードを含む ZooKeeper クラスタが必要です。 ノードに障害が発生した場合は、ZooKeeper サーバーとクライアントを再構成します。 この場合、すべてのアプリケーションを再起動する必要がある場合があります。 単一の ZooKeeper クラスタは、ZooKeeper の機能の制限により多数のジョブを処理できず、ZooKeeper クラスタをスケールアウトしてより多くの TPS をサポートすることはできません。 この場合、複数の ZooKeeper クラスタを維持する必要があります。 これにより、マシンのコストが増加します。
SchedulerX 2.0 プラットフォームで ElasticJob ジョブをホストする場合、ZooKeeper クラスタを維持したり、ジョブ数の増加に注目したりする必要がなくなります。 これにより、マシンのメンテナンスコストと人労費を削減できます。
高可用性
SchedulerX 2.0 は高可用性アーキテクチャを使用し、各ジョブに対して複数のレプリカを作成します。 SchedulerX 2.0 の高可用性は、独身の日イベントや災害復旧訓練など、Alibaba グループのビジネスシナリオによってテストされています。 SchedulerX 2.0 は、クラスタ内の 2 つのノードに障害が発生した場合、またはデータセンターで停電が発生した場合でも、ジョブを予定どおりにスケジュールできます。
オープンソースの ElasticJob と SchedulerX でホストされる ElasticJob の違い
項目 | オープンソースの ElasticJob | SchedulerX でホストされる ElasticJob |
シンプルジョブ |
|
|
スクリプトジョブ |
|
|
データフロージョブ |
|
|
スタンドアロン |
|
|
シャーディングブロードキャスト |
|
|
時間ベースのスケジューリング | cron | cron、fixed_rate、fixed_delay、および one_time |
ワークフロー |
|
|
可視化 | N/A | 履歴レコード、ロギングサービス、実行スタック、操作レコード、およびユーザーダッシュボード |
監視とアラート | メール | メール、DingTalk グループ、ショートメッセージ、および電話 |
O&M 操作 | N/A | ワンタイムジョブの実行、失敗したジョブの再実行、ジョブ出力の更新、ジョブの完了としてマーク、およびジョブの終了 |
Spring Boot への接続
次の例では、ElasticJob-3.0.2 が使用されています。 詳細については、「alibabacloud-edas-demo」をご参照ください。
手順 1: SchedulerX コンソールで名前空間とアプリケーションを作成する
SchedulerX コンソールで名前空間とアプリケーションを作成します。 詳細については、「名前空間を作成する」および「アプリケーションを作成する」をご参照ください。


手順 2: elasticjob 依存関係を追加する
pom.xml ファイルの elasticjob 依存関係の前に、 schedulerx2-plugin-elasticjob 依存関係を追加します。
<dependency>
<groupId>com.aliyun.schedulerx</groupId>
<artifactId>schedulerx2-plugin-elasticjob</artifactId>
<version>3.0.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere.elasticjob</groupId>
<artifactId>elasticjob-lite-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>手順 3: SchedulerX をスケジューラとして構成ファイルに追加する
application.yml ファイルで、elasticjob.scheduler=schedulerx 設定項目を追加し、spring.schedulerx2 に関連する構成を追加します。
SchedulerX パラメータの詳細については、「Spring Boot アプリケーションを SchedulerX に接続する」をご参照ください。
elasticjob:
regCenter:
serverLists: 127.0.0.1:2181
namespace: elasticjob-test
scheduler: schedulerx # SchedulerX がスケジューラとして指定されています。 SchedulerX がスケジューラとして指定されていない場合、ElasticJob がスケジューラとして使用されます。
jobs:
simpleJob:
elasticJobClass: com.alibaba.elasticjob.test.processor.SpringBootSimpleJob
cron: 0/10 * * * * ?
shardingTotalCount: 1
overwrite: true
shardingJob:
elasticJobClass: com.alibaba.elasticjob.test.processor.SpringBootShardingJob
cron: 0 * * * * ?
shardingTotalCount: 3
shardingItemParameters: 0=Beijing,1=Shanghai,2=Guangzhou
overwrite: true
# 次の SchedulerX 構成を追加します。
spring:
schedulerx2:
endpoint: acm.aliyun.com
namespace: 433d8b23-xxxx-xxxx-xxxx-90d4d1b9a4af
groupId: xueren_primary
appKey: xxxxxxxxxxx
regionId: public
aliyunAccessKey: xxxxxxxxxxxx
aliyunSecretKey: xxxxxxxxxxxxElasticJob スケジューラに戻すには、-D パラメータを使用してスケジューラを動的に調整します。 サンプルコード:
-Dspring.schedulerx2.enabled=false -Delasticjob.scheduler=elasticjob手順 4: アプリケーションが起動時に自動スキャンを実行するための構成を追加する
アプリケーションが起動時に com.alibaba.schedulerx.plugin.* ディレクトリ内のファイルを自動的にスキャンできるように構成を追加します。 サンプルコード:

(オプション)手順 5: ロギングサービスを構成する
クライアントからログを収集するようにロギングサービスを構成できます。 この例では、log4j2 が使用されています。 詳細については、「SchedulerX でサポートされているロギングサービス」をご参照ください。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="off">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %m%n" />
</Console>
<SchedulerxLog4j2Appender name="schedulerxLog"
timeFormat="yyyy-MM-dd'T'HH:mmZ"
timeZone="UTC"
ignoreExceptions="true">
<PatternLayout pattern="%d %-5level [%thread] %logger{0}: %msg"/>
</SchedulerxLog4j2Appender>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console" />
</Root>
<Logger name="schedulerx" level="info" additivity="false">
<AppenderRef ref="schedulerxLog" />
</Logger>
</Loggers>
</Configuration>実装クラスのサンプルコード:

手順 6: ジョブの実行を確認する
アプリケーションが起動すると、ジョブは SchedulerX コンソールに自動的に同期されます。
スケジューリング頻度は秒単位です。 時間のタイプは second_delay に変更されます。
シャード数が 1 より大きい場合、ジョブはシャーディングモードで実行されます。 それ以外の場合、ジョブはスタンドアロンモードで実行されます。
SchedulerX コンソールでジョブの操作ログを表示できます。
