すべてのプロダクト
Search
ドキュメントセンター

Enterprise Distributed Application Service:複数のアプリケーションを含む Spring Cloud クラスタを EDAS にスムーズに移行する

最終更新日:Jan 07, 2025

このトピックは、Alibaba Cloud にデプロイされ、複数のアプリケーションを含む Spring Cloud クラスタに適用されます。このトピックでは、クラスタとそのすべてのアプリケーションを Enterprise Distributed Application Service (EDAS) にスムーズに移行する方法について説明します。また、基本的なサービスの登録と検出を実装する方法についても説明します。 Spring Cloud クラスタが Alibaba Cloud にデプロイされていない場合は、チケットを送信するか、EDAS テクニカルサポートに連絡して、EDAS への移行のための完全なソリューションを入手してください。

移行によるメリット

  • EDAS は、起動パラメータの柔軟な構成、プロセス視覚化、グレースフルなサービス接続と切断、段階的なリリースなど、アプリケーションデプロイのための機能を提供します。これにより、アプリケーションリリースプロセスの構成、クエリ、および制御が可能になります。

  • EDAS は、商用リリースでサービス検出と構成管理の機能を提供します。これにより、Eureka、ZooKeeper、Consul などのミドルウェアを維持する必要がなくなります。

  • EDAS コンソールは、一元化されたサービス管理をサポートしています。これにより、リリースおよび消費されたサービスの詳細をクエリできます。

  • EDAS は自動スケーリングを提供します。これにより、トラフィックのピークとオフピークに基づいてアプリケーションを動的にスケールインまたはスケールアウトできます。

  • インスタンス情報クエリに加えて、EDAS はマイクロサービストレースクエリ、システムコールトポロジのクエリ、低速 SQL クエリなどの高度な監視機能も提供します。

  • EDAS は、アプリケーションの高可用性を確保するために、スロットリングとデグレードの機能を提供します。

  • EDAS は、アプリケーションを反復処理して更新する際に、小規模な検証のためのエンドツーエンドの段階的リリース機能を提供します。

スムーズな移行とは

Spring Cloud クラスタとそのアプリケーションが本番環境にデプロイされ、期待どおりに実行されているとします。すべての EDAS 機能にアクセスするためにクラスタを EDAS に移行する必要がある場合は、スムーズな移行によってサービスの継続性を確保できます。

説明

Spring Cloud クラスタが本番環境にデプロイされていない場合、またはダウンタイム移行が許可されている場合は、オンプレミス環境でアプリケーションを開発し、EDAS にデプロイできます。詳細については、「サービスの登録と検出の実装」をご参照ください。

移行プロセス

  1. 必須。アプリケーションを移行します。

    移行されるアプリケーションは通常ステートレスであり、最初に移行できます。このトピックでは、アプリケーションの移行方法に焦点を当てています。

  2. オプション。Server Load Balancer (SLB) インスタンスを移行するか、ドメイン名構成を変更します。

    アプリケーションの移行が完了したら、SLB インスタンスを移行するか、ドメイン名構成を変更する必要があります。

    • SLB

      • 移行前に SLB インスタンスが使用されている場合は、移行後に SLB インスタンスを再利用できます。概要をご参照ください。

      • 移行前に SLB インスタンスが使用されていない場合は、移行後に、前の図の API Gateway などのエントリアプリケーションに SLB インスタンスを作成してバインドすることをお勧めします。

    • ドメイン名

      • 移行後に SLB インスタンスを再利用できる場合は、ドメイン名構成を保持できます。

      • 移行されたアプリケーションに SLB インスタンスを作成してバインドするには、この SLB インスタンス構成をドメイン名構成に追加し、元の SLB インスタンスを削除する必要があります。詳細については、「ドメイン名の DNS サーバーを変更する」をご参照ください。

  3. オプション: オプション。ストレージとメッセージキューを移行します。

    • Alibaba Cloud にデプロイされたアプリケーションは、ApsaraDB RDS や Message Queue などの Alibaba Cloud サービスを使用します。したがって、アプリケーションと一緒にストレージとメッセージキューを移行する必要はありません。

    • アプリケーションが Alibaba Cloud にデプロイされていない場合は、チケットを送信するか、EDAS テクニカルサポートに連絡して、EDAS への移行のための完全なソリューションを入手してください。

このトピックでは、アプリケーションの移行方法について説明します。EDAS は、デモを提供して、アプリケーションをスムーズに移行する方法を示しています。このデモをダウンロードし、Readme を参照してデモを実行できます。

移行ソリューション

アプリケーションは、レジストリスイッチングとデュアル登録およびデュアルサブスクリプションの 2 つの方法で移行できます。2 つの方法により、サービスを中断することなくアプリケーションを移行できます。

説明

このトピックでは、デュアル登録とデュアルサブスクリプションの方法について説明します。

  • レジストリスイッチング

    Spring Cloud Alibaba を使用して、元のサービスレジストリを Nacos に切り替えます。アプリケーションを開発して EDAS にデプロイし、SLB インスタンスとドメイン名を構成することでトラフィックを切り替えます。

    レジストリスイッチング方式を使用してアプリケーションを開発する場合は、このトピックの以降の内容をスキップできます。詳細については、「サービスの登録と検出の実装」をご参照ください。

  • デュアル登録とデュアルサブスクリプション

    アプリケーションが移行されたときに元のサービスレジストリと EDAS サービスレジストリにアクセスして、移行されたアプリケーションと移行されていないアプリケーション間の相互呼び出しを有効にします。

    • 移行されたアプリケーションと移行されていないアプリケーションは、相互に検出して呼び出すことができます。これにより、サービスの継続性が確保されます。

    • 依存関係を追加し、1 行のコードを変更するだけで、デュアル登録とデュアルサブスクリプションを実装できます。

    • コンシューマーサービスコールのリストの詳細を表示し、移行の進捗状況をリアルタイムで表示できます。

    • アプリケーションを再起動することなく、サービス登録とサブスクリプションのポリシーを動的に変更できます。アプリケーションは、移行プロセスで 1 回だけ再起動されます。

最初のアプリケーションを移行する

  1. 最初に移行するアプリケーションを選択します。

    基盤となるプロバイダーから移行を開始することをお勧めします。トレースが複雑で分析が難しい場合は、移行するアプリケーションを選択できます。次の手順を実行して、選択したアプリケーションを移行します。

  2. アプリケーションに依存関係を追加し、その構成を変更します。

    アプリケーションを EDAS に移行する前に、アプリケーションに依存関係を追加し、その構成を変更します。

    1. 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>                                
    2. Nacos Server のアドレスを application.properties に追加し、Nacos の RibbonServerList を無効にします。

      spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
      ribbon.nacos.enabled = false                               
    3. Spring Cloud では、デフォルトでは、pom.xml ファイルの依存関係に 1 つのレジストリのみを追加できます。複数のレジストリを追加しようとすると、エラーが返される場合があります。Spring Cloud で複数のレジストリをサポートするには、edas-sc-migration-starter 依存関係を追加します。

      <dependency>
           <groupId>com.alibaba.edas</groupId>
           <artifactId>edas-sc-migration-starter</artifactId>
           <version>1.0.5</version>
       </dependency>                                
    4. アプリケーションが複数のレジストリからサービスをサブスクライブできるようにするには、負荷分散に使用される Ribbon の構成を変更する必要があります。アプリケーション起動のメインクラスで、RibbonClients を MigrationRibbonConfiguration に設定します。

      次のメインクラスコードが使用可能であるとします。

      @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);
           }
       }                                
      説明

      アプリケーションがオンプレミス環境で変更された後、または EDAS にデプロイされた後、アプリケーションを管理できます。たとえば、特定のレジストリにアプリケーションを登録したり、特定のレジストリからサービスをサブスクライブしたりできます。要件を満たすために、Spring Cloud Config または Nacos Config を使用して、アプリケーションの構成を動的に調整します。この場合、アプリケーションを再起動する必要はありません。詳細については、「サービスレジストリとサービスサブスクリプションポリシーを動的に調整する」をご参照ください。

      Spring Cloud Config または Nacos Config を使用するには、構成管理の依存関係をアプリケーションに追加し、関連する構成を変更する必要があります。詳細については、Spring Cloud Config を使用する場合はオープンソースドキュメントを、Nacos Config を使用する場合は「アプリケーション構成の管理」をご参照ください。

  3. 変更されたアプリケーションを EDAS にデプロイします。

    要件に基づいて、アプリケーションを ECS クラスタまたは Container Service for Kubernetes (ACK) クラスタにデプロイできます。EDAS コンソールまたは関連ツールを使用してアプリケーションをデプロイできます。詳細については、「概要」および「概要」をご参照ください。

    • インスタンスを EDAS にインポートすることで、既存の ECS インスタンスを再利用することをお勧めします。これによりコストを節約できます。詳細については、「EDAS コンソールで ECS クラスタを作成する」をご参照ください。

    • 既存の ECS インスタンスを再利用しない場合は、既存の仮想プライベートクラウド (VPC) に ECS インスタンスやクラスタなどのリソースを作成する必要があります。これにより、移行前後のアプリケーション間のネットワークが接続され、アプリケーションを移行できます。詳細については、「概要」をご参照ください。

    • データベース、キャッシュ、メッセージキューなどの製品で新しい ECS インスタンスの IP アドレスホワイトリストを構成して、アプリケーション依存のサードパーティコンポーネントへの通常のアクセスを確保します。

  4. 結果を確認します。

    1. サービスが正常かどうかを確認します。

    2. サービスサブスクリプション監視に関するデータを表示します。

      アプリケーションで Spring Boot Actuator が有効になっている場合は、Actuator にアクセスして、各アプリケーションがサブスクライブしているサービスの RibbonServerList に関する情報を表示できます。次の URL を使用して Actuator にアクセスできます。

      • Spring Boot 1.x: http://ip:port/migration_server_list

      • Spring Boot 2.x: http://ip:port/actuator/migration-server-list

      metaInfo の serverGroup フィールドは、ノードのサービスレジストリを示します。

他のすべてのアプリケーションを移行する

最初のアプリケーションを移行する手順を繰り返して、他のアプリケーションを EDAS に移行します。

移行構成をクリアする

移行後、元のレジストリ構成と移行で使用される edas-sc-migration-starter 依存関係を削除し、オフピーク時にアプリケーションをバッチで再起動します。

edas-sc-migration-starter は、移行専用のスターターです。スターターを長期間使用しても、サービスの安定性には影響しません。ただし、スターターは Ribbon の負荷分散効果を制限します。移行後にスターターをクリアし、オフピーク時にアプリケーションをバッチで再起動することをお勧めします。

サービスレジストリとサービスサブスクリプションポリシーを動的に調整する

EDAS の構成管理機能を使用して、移行中にサービスレジストリとサービスサブスクリプションポリシーを動的に調整できます。

  • サービスサブスクリプションポリシーを動的に調整する

    デフォルトのサブスクリプションポリシーは、すべてのレジストリをサブスクライブしてデータを集約することです。

    特定のレジストリからのデータをサブスクライブするには、EDAS の構成管理機能を使用して、spring.cloud.edas.migration.subscribes プロパティを変更します。

    spring.cloud.edas.migration.subscribes=nacos,eureka # Eureka と Nacos からサービスをサブスクライブします。
    
    spring.cloud.edas.migration.subscribes=nacos        # Nacos からのみサービスをサブスクライブします。                    
  • サービスレジストリを動的に調整する

    デフォルトの登録ポリシーは、すべてのレジストリに登録することです。

    EDAS の構成管理機能を使用して、サービスレジストリを調整できます。

    spring.cloud.edas.migration.registry.excludes プロパティを使用して、無効にするレジストリを指定します。

    spring.cloud.edas.migration.registry.excludes=   # デフォルトでは、値は空です。これは、すべてのサービスレジストリに登録することを示します。
    
    spring.cloud.edas.migration.registry.excludes=eureka   # Eureka への登録を無効にします。
    
    spring.cloud.edas.migration.registry.excludes=nacos,eureka   # Nacos と Eureka への登録を無効にします。                    

    アプリケーションの実行中に、アプリケーションが登録されているレジストリを動的に変更する必要があるとします。Spring Cloud 構成管理機能を使用して、プロパティを変更できます。