如果您的Spring Cloud叢集(包含多個應用)已經部署在阿里雲上,那麼本文檔將向您介紹如何將叢集及叢集中的所有應用平滑遷移到EDAS中,並實現基本的服務註冊與發現。如果您的Spring Cloud叢集還未部署到阿里雲,請聯絡EDAS技術支援人員為您提供完整的上雲及遷移到EDAS方案。
遷移到EDAS的價值
- 為應用部署提供了啟動參數靈活配置、流程可視化、服務優雅上下線和分批發布等功能,讓您的應用發布可配、可查、可控。
- 提供了服務發現與組態管理功能,您無需再自行營運Eureka、ZooKeeper、Consul等中介軟體組件,可以直接使用EDAS提供的商業版服務發現與組態管理。
- 提供了統一的服務治理,目前支援查詢發布和消費的服務詳情。
- 提供了動態擴、縮容功能,可以根據流量高峰和低穀即時地為您的應用擴容和縮容。
- 提供了進階監控功能,除了支援基本的執行個體資訊查詢外,還支援微服務調用鏈查詢、系統調用拓撲圖、慢SQL查詢等進階監控功能。
- 提供限流降級功能,保證您的應用高可用。
- 提供了全鏈路灰階功能,滿足您的應用在迭代、更新時通過灰階進行小規模驗證的需求。
什麼是平滑遷移
如果您的Spring Cloud應用叢集及應用已經部署到生產環境並處於正常運行狀態中,此時想將叢集遷移到EDAS享受完整的EDAS功能,那麼在遷移過程中,保證業務的平穩運行不中斷是第一要務,而保證應用平台運行不中斷遷移到EDAS即為平滑遷移。
遷移流程
- (必選)遷移應用
遷移的應用一般都是無狀態的,所以這一步是可以先進行。同時,本文將重點介紹如何遷移應用。
- (可選)遷移SLB或修改網域名稱配置
在應用遷移完成後,您還需要遷移SLB或修改網域名稱配置。
- SLB
- 如果您的應用在遷移之前已經使用SLB,在應用遷移後,可以複用該SLB。
- 如果您的應用在遷移之前沒有使用SLB,建議您在遷移完入口應用(如上圖所示的API Gateway)後,為該應用建立並綁定一個新的SLB。
- 網域名稱
- 如果遷移後的應用可以複用SLB,網域名稱配置也無需修改。
- 如果遷移後的應用需要建立新的SLB並綁定到應用,則需要在網域名稱中添加新的SLB配置,並刪除原來不再使用的SLB,請參見網域名稱DNS修改。
- SLB
- 可選:遷移儲存和訊息佇列
- 如果應用已經部署在阿里雲,儲存和訊息佇列也使用阿里雲相關產品(例如RDS、MQ等),則應用遷移完成後,之前的儲存和訊息佇列無需遷移。
- 如果應用未部署在阿里雲,請加入釘群(釘群號:31723701)聯絡產品技術專家為您提供完整的上雲及遷移到EDAS方案。
本文將主要介紹如何遷移應用。如果您想通過一個Demo快速體驗平滑遷移的過程,可下載Demo,按照Readme運行一個遷移的範例。
遷移方案
遷移應用有兩種方案,切流遷移、雙註冊和雙訂閱遷移方案。這兩種方案都可以保證您的應用正常運行不中斷的完成遷移。
- 切流遷移方案
使用Spring Cloud Alibaba將原有的服務註冊中心切換到Nacos。開發一套新的應用部署到EDAS,最後通過SLB和網域名稱配置來進行切流。
如果您選擇此方案進行開發應用,則不需要再閱讀遷移應用的後續內容,請參見實現服務註冊與發現。
- 雙註冊和雙訂閱遷移方案
雙註冊和雙訂閱遷移方案是指在應用遷移時同時接入兩個註冊中心(原有註冊中心和EDAS註冊中心)以保證已遷移的應用和未遷移的應用之間的相互調用。
- 已遷移的應用和未遷移的應用可以互相發現,從而實現互相調用,保證了業務的連續性。
- 使用方式簡單,只需要添加依賴,修改一行代碼,就可以實現雙註冊和雙訂閱。
- 支援查看消費者服務調用列表的詳情,即時地查看到遷移的進度。
- 支援在不重啟應用的情況下,動態地變更服務註冊的策略和服務訂閱的策略,只需要重啟一次應用就可以完成遷移。
遷移第一個應用
- 選擇最先遷移的應用。建議是從最下層Provider開始遷移。但如果調用鏈路太複雜,比較難分析,也可以任意選一個應用進行遷移。選擇完成後,即可參考下面的遷移步驟遷移第一個應用。Demo的範例程式,請參見Demo。
- 在應用程式中添加依賴並修改配置。為了能將您原來的應用託管到EDAS中,您需要在您的應用程式中添加相關依賴並修改配置。
- 在
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>
- 在
application.properties
中添加nacos-server的地址,並關閉Nacos的RibbonServerList
。spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 ribbon.nacos.enabled = false
- 預設情況下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>
- 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,請參見實現組態管理。
- 在
- 將修改後的應用部署到EDAS中。您可以根據您的實際需求將應用部署到ECS叢集或Container ServiceKubernetes叢集中,在部署時也可以選擇通過控制台、工具等方式進行部署。相關內容,請參見建立和部署應用概述和建立和部署應用概述。
- 為了協助您節約成本,建議您繼續使用之前ECS,但需要將ECS匯入到EDAS中。具體操作,請參見使用控制台建立ECS叢集。
- 如果需要建立新的ECS、叢集等資源,請確保在原有VPC內建立,以保證遷移前後的應用網路互連,順利完成遷移。具體操作,請參見ECS資源管理概述。
- 在資料庫、緩衝、訊息佇列等產品中為新ECS配置IP白名單等,確保應用依賴的這些第三方組件可以正常訪問。
- 結果驗證。
- 最重要的是觀察業務本身是否正常。
- 查看服務訂閱監控。如果您的應用開啟了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組態管理功能在運行時修改此屬性即可。