このトピックでは、Alibaba Cloud 上の Dubbo アプリケーションを Enterprise Distributed Application Service (EDAS) にスムーズに移行し、サービスを登録および検出する方法について説明します。 Dubbo アプリケーションが Alibaba Cloud にデプロイされていない場合は、チケットを送信するか、EDAS テクニカルサポートに連絡して、EDAS への移行のための完全なソリューションを入手してください。
EDAS への移行のメリット
EDAS は、起動パラメーターの柔軟な構成、プロセス視覚化、グレースフルなサービス接続と切断、段階的なリリースなど、アプリケーションデプロイのための機能を提供します。 これにより、アプリケーションリリースプロセスの構成、クエリ、および制御が可能になります。
EDAS は、商用リリースでサービス検出と構成管理の機能を提供します。 これにより、Eureka、ZooKeeper、Consul などのミドルウェアを維持する必要がなくなります。
EDAS コンソールは、一元化されたサービスガバナンスをサポートしています。 これにより、リリースおよび消費されたサービスの詳細をクエリできます。
EDAS は自動スケーリングを提供します。 これにより、トラフィックのピークとオフピークに基づいて、アプリケーションを動的にスケールインまたはスケールアウトできます。
インスタンス情報クエリに加えて、EDAS は、マイクロサービスのトレースクエリ、システムコールトポロジのクエリ、低速 SQL クエリなどの高度な監視機能も提供します。
EDAS は、アプリケーションの高可用性を確保するために、スロットリングとデグレードの機能を提供します。
EDAS は、アプリケーションを反復処理して更新する際に、小規模な検証のためのエンドツーエンドの段階的リリース機能を提供します。
スムーズな移行
Dubbo アプリケーションが本番環境にデプロイされ、期待どおりに実行されている場合は、スムーズな移行を実行してアプリケーションを EDAS に移行し、すべての EDAS 機能を使用できます。 スムーズな移行により、サービスの継続性が確保されます。
Dubbo アプリケーションが本番環境にデプロイされていない場合、またはダウンタイムを伴う移行が許容される場合は、オンプレミス環境で開発した後、アプリケーションを EDAS に直接デプロイできます。 詳細については、「EDAS を使い始める」をご参照ください。
移行プロセス
必須。 アプリケーションを移行します。
移行対象のアプリケーションは通常ステートレスであり、最初に移行できます。 このトピックでは、アプリケーションの移行方法に焦点を当てています。
オプション。 Server Load Balancer (SLB) インスタンスを移行するか、ドメイン名構成を変更します。
アプリケーションの移行が完了したら、SLB インスタンスを移行するか、ドメイン名構成を変更する必要があります。
SLB
移行前に SLB インスタンスが使用されている場合は、移行後に SLB インスタンスを再利用できます。概要」をご参照ください。
移行前に SLB インスタンスが使用されていない場合は、移行後に、前の図の API Gateway などのエントリアプリケーションに SLB インスタンスを作成してバインドすることをお勧めします。
ドメイン名
移行後に SLB インスタンスを再利用できる場合は、ドメイン名構成を保持できます。
移行されたアプリケーションに SLB インスタンスを作成してバインドするには、この SLB インスタンス構成をドメイン名構成に追加し、元の SLB インスタンスを削除する必要があります。 詳細については、「ドメイン名の DNS サーバーを変更する」をご参照ください。
オプション: オプション。 ストレージとメッセージキューを移行します。
Alibaba Cloud にデプロイされたアプリケーションは、ApsaraDB RDS や Message Queue などの Alibaba Cloud サービスを使用します。 したがって、アプリケーションと一緒にストレージとメッセージキューを移行する必要はありません。
アプリケーションが Alibaba Cloud にデプロイされていない場合は、チケットを送信するか、EDAS テクニカルサポートに連絡して、EDAS への移行のための完全なソリューションを入手してください。
このトピックでは、アプリケーションの移行方法について説明します。 EDAS は、デモを提供して、アプリケーションをスムーズに移行する方法を示しています。 このデモをダウンロードし、Readme を参照してデモを実行できます。
移行方法
レジストリスイッチングまたはデュアル登録とデュアルサブスクリプションを使用して、アプリケーションを移行できます。 これらの 2 つの方法により、サービスのダウンタイムなしでアプリケーションを移行できます。
レジストリスイッチング
Dubbo を使用して元のサービスレジストリを EDAS Config Server に切り替え、新しいアプリケーションセットを開発し、EDAS にデプロイします。 次に、Server Load Balancer (SLB) を使用して、ドメイン名を設定し、トラフィックを切り替えます。
レジストリスイッチング方式を使用する場合は、このトピックの残りの内容はスキップできます。 Spring Boot を使用して Dubbo マイクロサービスアプリケーションを開発できます。 詳細については、「Spring Boot を使用して Dubbo マイクロサービスアプリケーションを開発する」をご参照ください。
デュアル登録とデュアルサブスクリプション
アプリケーションが移行されているときに、元のサービスレジストリと EDAS サービスレジストリにアクセスして、移行されたアプリケーションと移行されていないアプリケーション間で相互呼び出しを有効にします。
移行されたアプリケーションと移行されていないアプリケーションは、相互に検出して呼び出すことができます。 これにより、サービスの継続性が確保されます。
依存関係を追加し、1 行のコードを変更するだけで、デュアル登録とデュアルサブスクリプションを実装できます。
コンシューマーサービスコールの詳細を表示し、移行の進捗状況をリアルタイムで表示できます。
アプリケーションを繰り返し再起動することなく、サービス登録とサブスクリプションのポリシーを動的に変更できます。 移行プロセスでは、アプリケーションを 1 回だけ再起動する必要があります。
最初のアプリケーションを移行する
移行する最初のアプリケーションを選択します。
基盤となるプロバイダーから移行を開始することをお勧めします。 トレースが複雑で分析が難しい場合は、移行するアプリケーションをランダムに選択できます。 後続の手順を実行して、選択したアプリケーションを移行します。
アプリケーションに依存関係を追加し、その構成を変更します。 デュアル登録とデュアルサブスクリプション方式を使用する場合は、アプリケーション構成を変更する必要があります。
アプリケーションを EDAS に移行する前に、アプリケーションに依存関係を追加し、その構成を変更します。
edas-dubbo-migration-bom依存関係をpom.xmlファイルに追加します。<dependency> <groupId>com.alibaba.edas</groupId> <artifactId>edas-dubbo-migration-bom</artifactId> <version>2.6.5.1</version> <type>pom</type> </dependency>レジストリアドレスを
application.propertiesに追加します。dubbo.registry.address = edas-migration://30.5.124.15:9999?service-registry=edas://127.0.0.1:8080,zookeeper://172.31.20.219:2181&reference-registry=zookeeper://172.31.20.219:2181&config-address=127.0.0.1:8848説明アプリケーションが Spring Boot アプリケーションでない場合は、dubbo.properties または Spring プロファイルでアプリケーションを構成します。
edas-migration://30.5.124.15:9999レジストリアドレスのヘッダー。 アプリケーションが複数のサービスレジストリに登録されている場合は、ヘッダーを変更する必要はありません。 ログレベルが WARN 以下の場合、Dubbo が IP アドレスとポートを確認するため、起動中に WARN ログがスローされることがあります。 ログは無視できます。
service-registryアプリケーションが登録されているサービスレジストリのアドレス。 デフォルトでは、アプリケーションは複数のサービスレジストリに登録されています。 したがって、複数のレジストリアドレスが書き込まれます。 各レジストリアドレスは、Dubbo レジストリアドレスの標準形式です。 複数のレジストリアドレスはコンマ (
,) で区切ります。 ZooKeeper アドレス 172.31.20.219 を使用してマークされているインスタンスの実際の ZooKeeper アドレスとポート番号を入力します。reference-registryサービスサブスクリプションのレジストリアドレス。 アプリケーションを複数のサービスレジストリに登録するか、最初に元のサービスレジストリに登録できます。 各レジストリアドレスは、Dubbo レジストリアドレスの標準形式です。 複数のレジストリアドレスはコンマ (
,) で区切ります。config-address動的にプッシュされるアドレス。 オンプレミス環境で動的プッシュを実装するには、Nacos をダウンロードします。 EDAS はこのアドレスを変換します。
その他の変更を完了します。
Spring アプリケーションが Spring Boot で開発されていない場合は、
com.alibaba.edas.dubbo.migration.controller.EdasDubboRegistryRestをスキャンパスに追加します。
オンプレミス環境で結果を確認します。
動的構成を使用して 1 回限りの変更を行います。
準備を行います。
サービスが登録されているかどうかを確認します。
軽量構成センターにログオンして、サービスプロバイダーリストでサービスを表示します。
ZooKeeper にログオンして、サービスの登録と消費に関する情報を表示します。
(オプション) Nacos にログオンして、サービス登録情報を構成します。
説明動的構成が不要な場合は、この手順をスキップします。
データ ID: このパラメーターを
dubbo.registry.configに設定します。グループ: このパラメーターを、applicationName で指定された Dubbo アプリケーション名 (例: dubbo-migration-demo-server) に設定します。 サービス登録情報はアプリケーションレベルで構成されているため、アプリケーション名は一意である必要があります。
構成コンテンツ: 構成コンテンツは、アプリケーションレベルまたはインスタンス IP アドレスレベルにすることができます。 複数のネットワークインターフェースコントローラー (NIC) が使用されている場合、インスタンス IP アドレスレベルでエラーが発生する可能性があります。
アプリケーションレベル
dubbo.reference.registry=edas://127.0.0.1:8080 ## サービスが登録されているサービスレジストリ dubbo.service.registry=edas://127.0.0.1:8080,zookeeper:127.0.0.1:2181 ## サービスサブスクリプションのサービスレジストリインスタンス IP アドレスレベル
169.254.15.86.dubbo.reference.registry=edas://127.0.0.1:8080,zookeeper:127.0.0.1:2181 169.254.15.86.dubbo.service.registry=edas://127.0.0.1:8080
クラスターを検証するときは、インスタンス IP アドレスレベルの構成とアプリケーションレベルの構成が順番に有効になるかどうかを確認できます。
アプリケーションコールが正常かどうかを確認し、レジストリの登録とサブスクリプションの関係を確認します。
Spring Boot 1.x: http://ip:port/dubboRegistry
Spring Boot 2.x: http://ip:port/actuator/dubboRegistry
変更したアプリケーションを EDAS にデプロイします。
ビジネス要件に基づいて、アプリケーションを Elastic Compute Service (ECS) クラスターまたは Container Service for Kubernetes (ACK) クラスターにデプロイできます。 EDAS コンソールまたは関連ツールを使用して、アプリケーションをデプロイできます。 詳細については、「アプリケーションホスティングの概要 (K8s)」および「アプリケーションホスティングの概要 (ECS)」をご参照ください。
既存の ECS インスタンスを EDAS にインポートすることで再利用することをお勧めします。 これによりコストを節約できます。 詳細については、「EDAS コンソールで ECS クラスターを作成する」をご参照ください。
重要ECS インスタンスをインポートするときに変換を実行するように求められた場合は、操作を進める前に重要なデータをバックアップしてください。
既存の ECS インスタンスを再利用しない場合は、既存の仮想プライベートクラウド (VPC) に ECS インスタンスやクラスターなどのリソースを作成する必要があります。 これにより、移行前後のアプリケーション間のネットワークが接続され、アプリケーションを移行できます。 詳細については、「概要」をご参照ください。
データベース、キャッシュ、メッセージキューなどの製品で、新しい ECS インスタンスの IP アドレスホワイトリストを構成します。 これにより、ECS インスタンスがこれらのサードパーティコンポーネントに期待どおりにアクセスできるようになります。
結果を確認します。
サービスが期待どおりに実行されているかどうかを確認します。
サービスサブスクリプションの監視データを表示します。
アプリケーションで Spring Boot Actuator が有効になっている場合は、Actuator にアクセスして、各アプリケーションがサブスクライブしているサービスの RibbonServerList に関する情報を表示できます。 次の URL を使用して Actuator にアクセスできます。
Spring Boot 1.x: http://ip:port/dubboRegistry
Spring Boot 2.x: http://ip:port/actuator/dubboRegistry
dubbo.orig.**: アプリケーションで構成されているサービスレジストリ情報。dubbo.effective.**: アプリケーションで有効になっているサービスレジストリ情報。
他のすべてのアプリケーションを移行する
最初のアプリケーションを移行する手順を繰り返して、他のアプリケーションを EDAS に移行します。
移行構成を削除する
移行が完了したら、元のサービスレジストリ構成と、移行中に使用された edas-dubbo-migration-bom 依存関係を削除します。
ZooKeeper 構成を削除してレジストリアドレスを変更します。 これにより、コンシューマーは EDAS からのみサブスクライブし、プロバイダーは EDAS でのみサブスクリプションを提供することが保証されます。 次の方法を使用してレジストリアドレスを変更できます。
方法 1: 動的構成
詳細については、「オンプレミス環境で結果を確認する」をご参照ください。
方法 2: 手動変更
すべてのアプリケーションが変更された後、レジストリアドレスを EDAS ConfigServer のアドレスに変更します。
dubbo.registry.address = edas-migration://30.5.XXX.XXX:9999?service-registry=edas://127.0.0.1:8080,zookeeper://172.31.20.219:2181&reference-registry=edas://127.0.0.1:8080&config-address=127.0.0.1:8848reference-registryの値をzookeeper://172.31.20.219:2181からedas://127.0.0.1:8080に変更します。 次に、アプリケーションをデプロイします。説明ZooKeeperが不要になった場合は、移行後にサービスレジストリ構成からzookeeper://172.31.20.219:2181を削除します。dubbo.registry.address = edas://127.0.0.1:8080
長期的には、ZooKeeper はサービスの安定性に影響を与えませんが、Dubbo でサービスレジストリを使用する際の複雑さとエラー率を高めます。 移行後に ZooKeeper 構成を削除し、オフピーク時にアプリケーションをバッチで再起動することをお勧めします。