本ガイドでは、サービス停止時間なしで、複数のアプリケーションを含む Spring Cloud クラスターを Enterprise Distributed Application Service (EDAS) へ移行する手順について説明します。この移行には「デュアル登録・デュアルサブスクリプション」方式を採用するため、移行済みアプリケーションと未移行アプリケーション間の通信が移行全期間を通じて継続されます。
このガイドは、Alibaba Cloud に既にデプロイ済みの Spring Cloud クラスターに適用されます。クラスターがまだ Alibaba Cloud 上にない場合は、「[チケットを送信]」するか、包括的な移行ソリューションについて EDAS テクニカルサポートにお問い合わせください。
クラスターが本番環境で運用されていない場合、またはダウンタイムが許容される場合は、本ガイドをスキップしてください。ローカル環境でアプリケーションを開発し、直接 EDAS へデプロイしてください。詳細については、「サービス登録およびサービス検出の実装」をご参照ください。
EDAS への移行理由
EDAS は、自社管理型の Spring Cloud インフラストラクチャーに伴う運用負荷を、マネージドプラットフォームへ置き換えます。移行後には以下のメリットがあります。
柔軟なデプロイメント — スタートアップパラメーターの設定、デプロイメント進捗の視覚的追跡、およびリクエストの切断を回避するグレースフルなサービス接続・切断機能を活用できます。
組み込みのサービス検出 — EDAS の商用リリースには、サービス検出および構成管理機能が標準搭載されており、自社管理の Eureka、ZooKeeper、Consul を置き換えます。
集中型サービス管理 — EDAS コンソールから、公開済みおよび消費済みのサービスを照会できます。インスタンス情報の照会に加え、マイクロサービスのトレース、システムコールトポロジー、スロークエリ分析も利用可能です。
自動スケーリング — トラフィック量に応じて、アプリケーションインスタンスを動的に増減できます。
段階的リリース — 全インスタンスへの更新適用前に、小規模な検証を目的としたエンドツーエンドの段階的リリースを実行できます。
速度制限およびサービス低下 — 高負荷時におけるアプリケーションの安定性を維持するために、速度制限およびサービス低下を適用できます。
移行方法の選択
EDAS では、サービス継続性を保ったまま移行できる 2 種類の方法をサポートしています。
| 方法 | 動作概要 |
|---|---|
| レジストリ切り替え | Spring Cloud Alibaba を使用して、元のサービスレジストリを Nacos へ切り替えます。アプリケーションを開発・EDAS へデプロイした後、SLB インスタンスおよびドメイン名の設定によりトラフィックを切り替えます。 |
| デュアル登録およびデュアルサブスクリプション | 移行中に、元のサービスレジストリと EDAS サービスレジストリ(Nacos)の両方にアクセスすることで、移行済みアプリケーションと未移行アプリケーション間の相互呼び出しを可能にします。 |
レジストリ切り替え を選択する場合は、「サービス登録およびサービス検出の実装」の標準セットアップに従ってください。本ガイドの残りの部分では、デュアル登録およびデュアルサブスクリプション について説明します。
デュアル登録の仕組み
移行中、各アプリケーションは、元のサービスレジストリおよび EDAS レジストリ(Nacos)の両方に登録されます。これは以下を意味します。
移行済みアプリケーションは、元のレジストリを介して未移行アプリケーションを検出します。
移行されていないアプリケーションは、移行済みのアプリケーションを同じ方法で検出します。
両グループは、中断なく相互に呼び出しを行います。
コンシューマー側のサービス呼び出し一覧を確認でき、リアルタイムで移行進捗を追跡できます。
アプリケーションは、移行全体を通して 1 回のみ再起動します。その後は、再起動せずに登録およびサブスクリプションポリシーを動的に調整できます。
すべてのアプリケーションの移行が完了したら、元のレジストリ設定および移行依存関係を削除してください。
移行の概要
移行は、以下の 3 つのフェーズで構成されます。
アプリケーションの移行(必須) — ステートレスアプリケーションを最初に、1 つずつ移行します。
Server Load Balancer (SLB) インスタンスの移行または DNS の更新(任意) — トラフィックを新しいデプロイ先へ向けるための設定です。
ストレージおよびメッセージキューの移行(任意) — アプリケーションが既に ApsaraDB RDS や Message Queue などの Alibaba Cloud サービスを利用している場合は、このステップは不要です。
本ガイドでは、フェーズ 1 に焦点を当てます。
フェーズ 1:アプリケーションの移行
ステップ 1:最初のアプリケーションを選択
他のサービスから呼び出されるが、自身がほとんど(またはまったく)上流依存関係を持たない、下流プロバイダーとなるアプリケーションから開始します。呼び出しチェーンが複雑すぎて該当アプリケーションを特定できない場合は、任意のアプリケーションを選択して作業を進めます。
ステップ 2:依存関係の追加および構成の更新
EDAS へデプロイする前に、アプリケーションに対して以下の変更を行います。
2a. Nacos 検出依存関係の追加
spring-cloud-starter-alibaba-nacos-discovery を pom.xml ファイルに追加します。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>{Version}</version>
</dependency>{Version} は、ご利用の Spring Boot バージョンと互換性のある Spring Cloud Alibaba のバージョンに置き換えてください。
2b. Nacos サーバーのアドレス設定
application.properties に以下のプロパティを追加します。
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
ribbon.nacos.enabled=falseribbon.nacos.enabled を false に設定すると、Nacos による Ribbon サーバーリストの上書きが防止され、デュアルサブスクリプション構成に必要となります。
2c. 移行スターターの追加
Spring Cloud では、デフォルトで 1 つのサービスレジストリのみが許可されます。edas-sc-migration-starter 依存関係は、この制限を解除し、デュアル登録を有効化します。
<dependency>
<groupId>com.alibaba.edas</groupId>
<artifactId>edas-sc-migration-starter</artifactId>
<version>1.0.5</version>
</dependency>2d. 複数レジストリサブスクリプションのための Ribbon 構成
複数のレジストリからサービスインスタンスを統合するため、アプリケーションのメインクラスで MigrationRibbonConfiguration をデフォルトの Ribbon 構成として設定します。
変更前:
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}変更後:
@SpringBootApplication
@RibbonClients(defaultConfiguration = MigrationRibbonConfiguration.class)
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}この単一のアノテーションが、必要なコード変更のすべてです。
ステップ 3:EDAS へのデプロイ
変更後のアプリケーションを ECS クラスターまたは ACK クラスターへデプロイします。EDAS コンソールまたは CLI ツールを使用します。
ECS クラスターへのデプロイ — 「ECS クラスターへのアプリケーションのデプロイ」をご参照ください。
Kubernetes クラスターへのデプロイ — 「Kubernetes クラスターへのアプリケーションのデプロイ」をご参照ください。
重要な考慮事項:
既存の ECS インスタンスの再利用 — コスト削減のため、EDAS へインポートして再利用します。「EDAS コンソールでの ECS クラスターの作成」をご参照ください。
新規 ECS インスタンスの作成 — 内部ネットワーク接続を維持するため、既存アプリケーションと同じ Virtual Private Cloud (VPC) 内に配置します。「リソース管理の概要」をご参照ください。
IP アドレスホワイトリストの更新 — データベース、キャッシュ、メッセージキューの IP アドレスホワイトリストに、新規 ECS インスタンスの IP アドレスを追加します。
ステップ 4:移行の検証
デプロイ後に、移行済みアプリケーションが正しく動作することを検証します。
サービスの健全性確認 — アプリケーションが正常に起動し、期待通りにリクエストを処理することを確認します。
Ribbon サーバーリストの確認 — Spring Boot Actuator が有効な場合、移行エンドポイントをクエリして、アプリケーションがどのレジストリをサブスクライブしているかを確認できます。
Spring Boot 1.x:
http://<ip>:<port>/migration_server_listSpring Boot 2.x:
http://<ip>:<port>/actuator/migration-server-list
応答内の
serverGroupフィールド(metaInfo内)は、各サービスインスタンスのソースレジストリ(例:eurekaやnacos)を識別します。
ステップ 5:残りのアプリケーションの移行
クラスター内の残りのアプリケーションについて、ステップ 2 からステップ 4 を繰り返します。
フェーズ 2:SLB インスタンスの移行または DNS の更新(任意)
すべてのアプリケーションの移行が完了したら、ネットワークルーティングを更新します。
移行前に SLB インスタンスを使用していた場合、再利用します」をご参照ください。
SLB インスタンスを使用していなかった場合、新規に作成し、エントリーポイントアプリケーション(例:API Gateway)にバインドします。
ドメイン名の設定:
SLB インスタンスを再利用する場合は、DNS の変更は不要です。
新規 SLB インスタンスを作成する場合は、DNS を更新して新規 SLB インスタンスを指すようにし、旧インスタンスを削除します。「ドメイン名の DNS サーバーの変更」をご参照ください。
フェーズ 3:ストレージおよびメッセージキューの移行(任意)
アプリケーションが既に ApsaraDB RDS や Message Queue などの Alibaba Cloud サービスを利用している場合は、ストレージおよびメッセージキューの移行は不要です。
アプリケーションが Alibaba Cloud 上にない場合は、EDAS テクニカルサポートまでお問い合わせください。完全な移行計画をご提供いたします。
登録およびサブスクリプションポリシーの動的調整
移行中、アプリケーションが登録またはサブスクライブするレジストリを、再起動せずに動的に調整できます。EDAS の構成管理機能、Spring Cloud Config、または Nacos Config を使用して、以下のプロパティをランタイムで更新します。
アプリケーションがサブスクライブするレジストリの制御
デフォルトでは、アプリケーションはすべてのレジストリをサブスクライブし、結果を統合します。
特定のレジストリのみをサブスクライブするには、spring.cloud.edas.migration.subscribes を設定します。
# Eureka および Nacos の両方をサブスクライブ
spring.cloud.edas.migration.subscribes=nacos,eureka
# Nacos のみをサブスクライブ
spring.cloud.edas.migration.subscribes=nacosアプリケーションが登録するレジストリの制御
デフォルトでは、アプリケーションはすべてのレジストリに登録します。
特定のレジストリへの登録を停止するには、spring.cloud.edas.migration.registry.excludes を設定します。
# すべてのレジストリに登録(デフォルト)
spring.cloud.edas.migration.registry.excludes=
# Eureka への登録を停止
spring.cloud.edas.migration.registry.excludes=eureka
# Nacos および Eureka の両方への登録を停止
spring.cloud.edas.migration.registry.excludes=nacos,eurekaヒント: Spring Cloud Config を使用する場合は、オープンソースのドキュメントをご参照ください。Nacos Config の設定手順については、「アプリケーション構成の管理」をご参照ください。
移行後のクリーンアップ
すべてのアプリケーションが EDAS 上で正常に稼働している状態になったら、移行専用の構成を削除します。
各アプリケーションの
pom.xml(またはbuild.gradle)からedas-sc-migration-starter依存関係を削除します。メインクラスから
@RibbonClients(defaultConfiguration = MigrationRibbonConfiguration.class)アノテーションを削除します。元のサービスレジストリの依存関係および構成(例:Eureka や Consul クライアント設定)を削除します。
ribbon.nacos.enabled=falseをapplication.propertiesから削除します。非ピーク時間帯に、アプリケーションをバッチ単位で再起動します。
edas-sc-migration-starter は、一時的に残したままでもサービスの安定性には影響しません。ただし、Ribbon の負荷分散動作に制限が生じるため、移行完了後は必ず削除してください。
デモプロジェクト
EDAS では、デュアル登録およびデュアルサブスクリプションを実証するサンプルプロジェクトを提供しています。プロジェクトをダウンロードし、付属の README を参照してローカルで実行してください。