全部產品
Search
文件中心

Serverless App Engine:將Spring Cloud架構應用平滑遷移至SAE

更新時間:Sep 12, 2025

如果您的Spring Cloud叢集(包含多個應用)已經部署在阿里雲上,您可以將應用遷移至Serverless 應用引擎 SAE(Serverless App Engine)。本文介紹如何將應用平滑遷移到SAE中,以及實現基本的服務註冊與發現。

遷移流程

遷移流程

  1. 必需:遷移應用

    遷移的應用通常是無狀態的,需要先遷移應用。

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

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

    • SLB

      • 如果您的應用在遷移之前已經使用SLB,應用遷移後可以複用該SLB。您可以根據您的實際需求選擇綁定SLB的策略,具體操作,請參見為應用綁定CLB並產生應用的公網或私網訪問IP

      • 如果您的應用在遷移之前沒有使用SLB,建議在遷移完入口應用(例如流程圖中所示的API Gateway)後,為該應用建立並綁定一個新SLB。

      • 遷移方案中,推薦使用雙註冊和雙訂閱者案,以節約ECS成本。如果由於某種原因(例如原ECS連接埠被佔用)不能複用原ECS,則需要採用切流遷移方案,添加新的ECS用於應用遷移。在應用遷移完成後,依據遷移前應用是否使用SLB,選擇複用SLB或建立SLB並綁定到遷移後應用。

    • 網域名稱

      • 如果遷移後的應用可以複用SLB,則網域名稱配置無需修改。

      • 如果遷移後的應用需要建立新的SLB並綁定,則需要在網域名稱中添加新的SLB配置,並刪除原來不再使用的SLB。具體操作,請參見修改DNS伺服器

  3. 可選:遷移儲存和訊息佇列

    • 如果應用遷移前已經部署在阿里雲上,同時儲存和訊息佇列同樣使用了阿里雲相關產品(例如RDS、MQ),那麼應用遷移完成後,遷移前的儲存和訊息佇列無需遷移。

    • 如果應用遷移前沒有部署在阿里雲上,請加入釘群(釘群號:32874633),聯絡產品技術專家進行諮詢。

本文以Demo應用示範平滑遷移。關於Demo應用的下載地址,請參見Demo

遷移方案

遷移應用有以下兩種方案,兩種方案均可保證應用正常運行不中斷情況下完成平滑遷移。

說明

本文主要介紹雙註冊和雙訂閱者案。

  • 切流遷移方案

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

    如果選擇此方案,請參見將應用的服務註冊與發現中心更改為Nacos

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

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

    雙註冊和雙訂閱平滑遷移方案架構圖如下:

    初始狀態

    第一步

    第二步

    第三步

    第四步

    • 已遷移的應用和未遷移的應用之間可以互相發現,從而實現互相調用,保證了業務的連續性。

    • 使用方式簡單,僅需要添加依賴,並修改極少代碼,實現雙註冊和雙訂閱。

    • 支援查看消費者服務調用列表的詳情,即時地查看遷移的進度。

    • 支援在不重啟應用的情況下,動態地變更服務註冊的策略和服務訂閱的策略,只需要重啟一次應用就可以完成遷移。

步驟一:遷移第一個應用

  1. 制定應用遷移優先順序。

    選擇遷移需求優先順序高的應用,建議從最下層Provider開始遷移。如果調用鏈路太複雜,難以分析,可以任意選一應用進行遷移。

  2. 在應用程式中添加依賴並修改配置。

    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的IP地址。

      spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848                            
    3. 添加多註冊中心依賴edas-sc-migration-starter

      Spring Cloud預設依賴中只能引入一個註冊中心,存在多個註冊中心時,啟動會異常。如果需要支援多個註冊中心,需要添加依賴edas-sc-migration-starter

      <dependency>
           <groupId>com.alibaba.edas</groupId>
           <artifactId>edas-sc-migration-starter</artifactId>
           <version>1.0.2</version>
       </dependency>                            
  3. 修改RibbonClients預設配置。

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

    在本地修改應用或者應用部署到SAE後,如果對應用有其他控制需求,例如將應用註冊到某些註冊中心或從某些註冊中心訂閱,則可以通過Spring Cloud Config或Nacos Config動態地調整配置,而無需重啟應用。調整配置的方法,請參見動態調整服務註冊和訂閱者式

    要通過Spring Cloud Config或Nacos Config動態地調整配置,需要在應用中添加組態管理依賴並修改配置。如果使用Spring Cloud Config,請參見相應地開來源文件。如果使用Nacos Config,請參見實現組態管理

  4. 將應用部署到SAE

    根據實際需求將應用部署到SAE。具體操作,請參見應用部署

  5. 結果驗證。

    1. 觀察業務運行是否正常。

    2. 查看服務訂閱監控。

      • Spring Boot 1.x版本:http://ip:port/dubboRegistry

      • Spring Boot 2.x版本:http://ip:port/actuator/dubboRegistry

      如果應用開啟了Spring Boot Actuator監控功能,請訪問Actuator查看此應用訂閱的各服務的RibbonServerList資訊。Actuator地址如下: metaInfo中serverGroup欄位表示此節點的服務註冊中心。

      開啟Spring Boot Actuator監控

步驟二:遷移其他所有應用

按照步驟一:遷移第一個應用的步驟,依次將所有應用遷移到SAE

步驟三:清理遷移配置

遷移完成後,刪除原有的註冊中心配置和遷移過程專用的依賴edas-sc-migration-starter

edas-sc-migration-starter遷移專用的starter,長期使用對業務的穩定性沒有影響,對於Ribbon負載平衡實現有一定的局限性,建議在遷移完畢後刪除,並在業務量較小的時間段內分批重啟應用。

  • 動態調整服務註冊和訂閱者式

    應用遷移過程中,可以通過SAE組態管理功能動態變更服務註冊和訂閱者式。

  • 動態調整服務訂閱

    系統預設的訂閱策略,是SAE從所有註冊中心訂閱服務資料,並對資料進行彙總。

    您可以通過SAE的組態管理修改spring.cloud.edas.migration.subscribes屬性,選擇具體的註冊中心訂閱資料。

    spring.cloud.edas.migration.subscribes=nacos,eureka  # 同時從Eureka和Nacos訂閱服務。
    spring.cloud.edas.migration.subscribes=nacos         # 只從Nacos訂閱服務。                        
  • 動態變更服務註冊

    系統預設的註冊策略,是SAE註冊到所有註冊中心。

    您可以通過SAE的組態管理來調整服務註冊中心。

    通過修改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組態管理功能在運行時修改此屬性。