全部產品
Search
文件中心

Enterprise Distributed Application Service:將Spring Cloud叢集(多應用)平滑遷移到EDAS

更新時間:Jun 30, 2024

如果您的Spring Cloud叢集(包含多個應用)已經部署在阿里雲上,那麼本文檔將向您介紹如何將叢集及叢集中的所有應用平滑遷移到EDAS中,並實現基本的服務註冊與發現。如果您的Spring Cloud叢集還未部署到阿里雲,請聯絡EDAS技術支援人員為您提供完整的上雲及遷移到EDAS方案。

遷移到EDAS的價值

  • 為應用部署提供了啟動參數靈活配置、流程可視化、服務優雅上下線和分批發布等功能,讓您的應用發布可配、可查、可控。
  • 提供了服務發現與組態管理功能,您無需再自行營運Eureka、ZooKeeper、Consul等中介軟體組件,可以直接使用EDAS提供的商業版服務發現與組態管理。
  • 提供了統一的服務治理,目前支援查詢發布和消費的服務詳情。
  • 提供了動態擴、縮容功能,可以根據流量高峰和低穀即時地為您的應用擴容和縮容。
  • 提供了進階監控功能,除了支援基本的執行個體資訊查詢外,還支援微服務調用鏈查詢、系統調用拓撲圖、慢SQL查詢等進階監控功能。
  • 提供限流降級功能,保證您的應用高可用。
  • 提供了全鏈路灰階功能,滿足您的應用在迭代、更新時通過灰階進行小規模驗證的需求。

什麼是平滑遷移

如果您的Spring Cloud應用叢集及應用已經部署到生產環境並處於正常運行狀態中,此時想將叢集遷移到EDAS享受完整的EDAS功能,那麼在遷移過程中,保證業務的平穩運行不中斷是第一要務,而保證應用平台運行不中斷遷移到EDAS即為平滑遷移。

說明 如果您的叢集尚未在生產環境中運行,或者您可以接受停機遷移,則沒必要按照本文進行平滑遷移,可直接將應用在本地開發完再部署到EDAS,請參見實現服務註冊與發現

遷移流程

  1. (必選)遷移應用

    遷移的應用一般都是無狀態的,所以這一步是可以先進行。同時,本文將重點介紹如何遷移應用。

  2. (可選)遷移SLB或修改網域名稱配置

    在應用遷移完成後,您還需要遷移SLB或修改網域名稱配置。

    • SLB
      • 如果您的應用在遷移之前已經使用SLB,在應用遷移後,可以複用該SLB。
      • 如果您的應用在遷移之前沒有使用SLB,建議您在遷移完入口應用(如上圖所示的API Gateway)後,為該應用建立並綁定一個新的SLB。
    • 網域名稱
      • 如果遷移後的應用可以複用SLB,網域名稱配置也無需修改。
      • 如果遷移後的應用需要建立新的SLB並綁定到應用,則需要在網域名稱中添加新的SLB配置,並刪除原來不再使用的SLB,請參見網域名稱DNS修改
  3. 可選:遷移儲存和訊息佇列
    • 如果應用已經部署在阿里雲,儲存和訊息佇列也使用阿里雲相關產品(例如RDS、MQ等),則應用遷移完成後,之前的儲存和訊息佇列無需遷移。
    • 如果應用未部署在阿里雲,請加入釘群(釘群號:31723701)聯絡產品技術專家為您提供完整的上雲及遷移到EDAS方案。

本文將主要介紹如何遷移應用。如果您想通過一個Demo快速體驗平滑遷移的過程,可下載Demo,按照Readme運行一個遷移的範例。

遷移方案

遷移應用有兩種方案,切流遷移、雙註冊和雙訂閱遷移方案。這兩種方案都可以保證您的應用正常運行不中斷的完成遷移。

說明 本文將主要介紹如果使用雙註冊和雙訂閱者案遷移應用。
  • 切流遷移方案

    使用Spring Cloud Alibaba將原有的服務註冊中心切換到Nacos。開發一套新的應用部署到EDAS,最後通過SLB和網域名稱配置來進行切流。

    如果您選擇此方案進行開發應用,則不需要再閱讀遷移應用的後續內容,請參見實現服務註冊與發現

  • 雙註冊和雙訂閱遷移方案

    雙註冊和雙訂閱遷移方案是指在應用遷移時同時接入兩個註冊中心(原有註冊中心和EDAS註冊中心)以保證已遷移的應用和未遷移的應用之間的相互調用。

    • 已遷移的應用和未遷移的應用可以互相發現,從而實現互相調用,保證了業務的連續性。
    • 使用方式簡單,只需要添加依賴,修改一行代碼,就可以實現雙註冊和雙訂閱。
    • 支援查看消費者服務調用列表的詳情,即時地查看到遷移的進度。
    • 支援在不重啟應用的情況下,動態地變更服務註冊的策略和服務訂閱的策略,只需要重啟一次應用就可以完成遷移。

遷移第一個應用

  1. 選擇最先遷移的應用。
    建議是從最下層Provider開始遷移。但如果調用鏈路太複雜,比較難分析,也可以任意選一個應用進行遷移。選擇完成後,即可參考下面的遷移步驟遷移第一個應用。Demo的範例程式,請參見Demo
  2. 在應用程式中添加依賴並修改配置。
    為了能將您原來的應用託管到EDAS中,您需要在您的應用程式中添加相關依賴並修改配置。
    1. pom.xml檔案中添加spring-cloud-starter-alibaba-nacos-discovery依賴。
      <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
           <version>{相應的版本}</version>
       </dependency>                                
    2. application.properties中添加nacos-server的地址,並關閉Nacos的RibbonServerList
      spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
      ribbon.nacos.enabled = false                               
    3. 預設情況下Spring Cloud只支援在依賴中引入一個註冊中心,當存在多個註冊中心時,啟動會報錯。所以這裡需要添加一個依賴edas-sc-migration-starter,使Spring Cloud應用支援多註冊。
      <dependency>
           <groupId>com.alibaba.edas</groupId>
           <artifactId>edas-sc-migration-starter</artifactId>
           <version>1.0.5</version>
       </dependency>                                
    4. Ribbon是實現負載平衡的組件,為了使應用可以支援從多個註冊中心訂閱服務,需要修改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,請參見實現組態管理

  3. 將修改後的應用部署到EDAS中。
    您可以根據您的實際需求將應用部署到ECS叢集或Container ServiceKubernetes叢集中,在部署時也可以選擇通過控制台、工具等方式進行部署。相關內容,請參見建立和部署應用概述建立和部署應用概述
    • 為了協助您節約成本,建議您繼續使用之前ECS,但需要將ECS匯入到EDAS中。具體操作,請參見使用控制台建立ECS叢集
    • 如果需要建立新的ECS、叢集等資源,請確保在原有VPC內建立,以保證遷移前後的應用網路互連,順利完成遷移。具體操作,請參見ECS資源管理概述
    • 在資料庫、緩衝、訊息佇列等產品中為新ECS配置IP白名單等,確保應用依賴的這些第三方組件可以正常訪問。
  4. 結果驗證。
    1. 最重要的是觀察業務本身是否正常。
    2. 查看服務訂閱監控。
      如果您的應用開啟了Spring Boot Actuator監控,那麼可以訪問Actuator查看此應用訂閱的各服務的RibbonServerList的資訊。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是一個遷移專用的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組態管理功能在運行時修改此屬性即可。