SchedulerX でジョブロジックを更新する際、すべてのワーカーに直接デプロイすると、本番ワークロードに影響を与えるリスクがあります。SchedulerX はラベルベースのカナリアリリースをサポートしており、完全なロールアウトの前に、ジョブをワーカーのサブセットにルーティングして検証を行います。
仕組み
SchedulerX ワーカーは、ハートビートを通じてサーバーにラベルをレポートします。各ジョブは、静的構成またはランタイムを通じて、特定のラベルを持つワーカーをターゲットにできます。このラベルベースのルーティングが、カナリアリリースの背後にあるメカニズムです。
ワークフローは次のとおりです。
ワーカーにラベルを割り当てます。たとえば、カナリア用には
gray、本番用にはprodです。テストのために、
grayラベルのワーカーにジョブをルーティングします。結果を検証します。
検証が成功した後、変更を
prodラベルのワーカーに昇格させます。
アプローチの選択
| アプローチ | 使用するタイミング | ロールバック |
|---|---|---|
| 専用カナリアジョブ | 継続的なカナリアテスト -- 本番と並行して永続的なカナリアジョブを実行する必要がある場合 | カナリアジョブを削除します。本番ジョブは変更されずに継続します。 |
| ワンタイムカナリア実行 | 迅速なリリース前検証 -- ジョブを重複させることなく、カナリアワーカーで単一の実行をテストする場合 | ロールバックは不要です。本番スケジュールは影響を受けません。 |
ワーカーへのラベル割り当て
ラベルベースのルーティングを使用する前に、ワーカーにラベルが必要です。SchedulerX は 2 つのメソッドをサポートしています。
アプリケーション起動時のラベル設定
[Properties] 設定を通じてラベルを指定します。次の例では、Spring Boot アプリケーションを使用しています。
spring.schedulerx2.label=${label}${label} を、prod や gray などのターゲットラベル値に置き換えます。
EDAS または MSE トラフィックタグからのラベル継承
ご利用のアプリケーションが Enterprise Distributed Application Service (EDAS) または Microservices Engine (MSE) で実行されている場合、トラフィックラベリングによって SchedulerX ワーカーにラベルが自動的に適用されます。コード変更は不要です。ワーカーは、EDAS または MSE で構成されたトラフィックタグからラベルを継承します。
このメソッドは、MSE でエンドツーエンドカナリアリリースをすでに使用している場合に便利です。SchedulerX ワーカーが追加設定なしで同じラベルをピックアップするためです。
専用カナリアジョブの作成
本番ジョブをコピーして個別のカナリアジョブを作成し、トラフィックを分離するためにラベルを割り当てます。
本番ジョブに
prodラベルを追加します。本番ジョブをコピーしてカナリアジョブを作成します。
カナリアジョブに
grayラベルを追加します。grayラベルのワーカーで検証するためにカナリアジョブを実行します。
検証が成功した後、検証済みの変更で本番ジョブを更新し、カナリアジョブを削除します。
検証が失敗した場合、カナリアジョブを削除します。本番ジョブは、prod ラベルのワーカーで中断なしに実行を継続します。
ワンタイムカナリアテストの実行
ジョブを重複させることなく、カナリアワーカーで単一の実行を検証するには、SchedulerX コンソールで特定のラベルを持つ既存のジョブを手動でトリガーします。
SchedulerX コンソールで、ジョブを見つけます。
[指定ラベルを 1 回実行] を選択し、
grayラベルを選択します。ジョブは
grayラベルのワーカーで一度実行されます。通常の生産スケジュールは、prodラベルのワーカーで変更されずに継続します。
CI/CD を使用したワンタイム実行の自動化
Jenkins などの継続的インテグレーションツールを使用して、ワンタイムカナリア実行を自動的にトリガーします。これにより、カナリア検証がデプロイメントパイプラインに統合され、各リリースが昇格前にカナリアワーカーで検証されます。