Spring Cloud應(yīng)用托管場景
適用于如下場景:
1、基于Spring Cloud開源技術(shù)體系開發(fā)的應(yīng)用系統(tǒng),例如已經(jīng)采用Eureka實現(xiàn)注冊發(fā)現(xiàn)、采用Nacos實現(xiàn)動態(tài)配置,應(yīng)用系統(tǒng)通過集成Spring Cloud Huawei,使用高可靠的商業(yè)中間件替換開源中間件,降低維護成本。
2、基于Spring Boot開發(fā)的應(yīng)用系統(tǒng),不具備微服務(wù)基本能力。應(yīng)用系統(tǒng)通過集成Spring Cloud Huawei,具備服務(wù)注冊發(fā)現(xiàn)、動態(tài)配置管理等能力。
3、基于Spring Cloud其他開發(fā)體系,例如Spring Cloud Alibaba、Spring Cloud Azure等構(gòu)建的云原生應(yīng)用,使用Spring Cloud Huawei遷移到華為云運行。
Spring Cloud應(yīng)用托管使用前評估
在開始使用ServiceComb引擎托管Spring Cloud應(yīng)用前,可以參考如下建議評估改造的風險和工作量:
1、改造的基本原理是通過實現(xiàn)Spring Cloud提供的DiscoveryClient、PropertySource等接口,為Spring Cloud應(yīng)用提供注冊發(fā)現(xiàn)、動態(tài)配置等功能。這些實現(xiàn)獨立于業(yè)務(wù)邏輯的開發(fā),集成Spring Cloud Huawei不影響業(yè)務(wù)邏輯。Spring Cloud開源技術(shù)體系、Spring Cloud Alibaba、Spring Cloud Azure等,也都遵循這個設(shè)計模式。因此改造可以歸納為兩種場景:集成和替換。不具備微服務(wù)能力的Spring Boot應(yīng)用,只需要集成Spring Cloud Huawei;具備微服務(wù)能力的Spring Cloud應(yīng)用,則需要使用Spring Cloud Huawei替換掉相關(guān)組件。
2、在替換場景,如果業(yè)務(wù)系統(tǒng)沒有直接依賴實現(xiàn)組件的API,那么替換過程只需要移除原有依賴,添加Spring Cloud Huawei依賴,工作量非常小。如果業(yè)務(wù)系統(tǒng)大量依賴實現(xiàn)組件的API,那么替換工作量會相應(yīng)增加。根據(jù)實際經(jīng)驗,業(yè)務(wù)系統(tǒng)通常都不會直接依賴實現(xiàn)組件的API。
3、改造過程中最容易出現(xiàn)的問題是三方軟件兼容性問題。處理兼容性問題的最佳策略是存在兩個不同版本的三方軟件時,優(yōu)先使用新版本。對于Spring Boot、Spring Cloud版本,盡可能使用社區(qū)最新的版本,并緊跟社區(qū)的版本配套關(guān)系。例如使用Spring Cloud Hoxton.SR8版本,Spring Boot則使用2.3.5.RELEASE版本。雖然Spring Cloud Hoxton.SR8聲稱支持Spring Boot 2.2.x版本,但是多數(shù)組件都是集成2.3.5.RELEASE進行測試的,緊跟社區(qū)的版本配套關(guān)系,能夠極大的減少兼容性問題的發(fā)生。三方軟件版本管理策略會進一步說明三方軟件兼容性問題的最佳實踐。
4、Spring Cloud最佳匹配ServiceComb引擎2.x版本,本最佳實踐都是基于ServiceComb引擎2.x。ServiceComb引擎1.x和2.x具體改造過程的唯一差異是:配置中心類型ServiceComb引擎1.x使用的是config-center;ServiceComb引擎2.x使用的是kie。因此,ServiceComb引擎1.x的改造也可參考本最佳實踐。
Spring Cloud Huawei快速接入CSE的ServiceComb
使用Spring Cloud Huawei接入CSE的ServiceComb引擎主要步驟可以歸納為如下兩個步驟:
1、增加/修改組件依賴。
2、在配置文件“boostrap.yaml”中增加ServiceComb引擎配置信息。
具體操作,請參考Spring Cloud接入CSE的ServiceComb引擎。本章節(jié)補充在實際改造過程中需要注意的一些事項,特別是組件依賴有關(guān)的注意事項。
假設(shè)原來的業(yè)務(wù)系統(tǒng)都是基于Maven的項目。
第一步:熟悉原業(yè)務(wù)系統(tǒng)pom結(jié)構(gòu)
Spring Cloud應(yīng)用系統(tǒng)的pom結(jié)構(gòu)一般分三種:
第一種使用Spring Boot或者Spring Cloud提供的公共pom作為parent。
第二種使用項目本身的parent,不使用Spring Boot或者Spring Cloud提供的公共pom作為parent。但是在項目中,通過dependency management引入了依賴管理。
還有些應(yīng)用系統(tǒng)會混合使用第一種和第二種,既使用了Spring Boot或者Spring Cloud提供的公共pom作為parent,又通過dependency management引入了依賴管理。
第二步:修改parent和dependency management避免三方軟件沖突
parent和dependency management的修改是避免三方軟件沖突的關(guān)鍵步驟。
1、首先確定選用的Spring Cloud Huawei的版本,然后查詢Spring Cloud Huawei版本對應(yīng)的Spring Boot版本和Spring Cloud版本。Spring Cloud Huawei一般建議使用當前最新版本,配套的Spring Boot版本和Spring Cloud版本可以在Spring Cloud Huawei官網(wǎng)查詢。
2、比對當前項目parent的版本與Spring Cloud Huawei配套的Spring Boot版本和Spring Cloud版本,如果當前項目的parent版本比較低,修改為Spring Cloud Huawei的版本;如果當前版本的parent版本比較高,則無需修改。
3、在當前項目的dependency management中獨立引入Spring Boot、Spring Cloud、Spring Cloud Huawei的依賴管理。如果原來項目的Spring Boot或者Spring Cloud版本比較高,使用原來項目的版本;如果原來項目的版本比較低,則使用Spring Cloud Huawei的版本。需要注意依賴管理的順序,排在前面的依賴管理會優(yōu)先使用。Spring Boot、Spring Cloud的版本是基礎(chǔ),被這兩個依賴關(guān)系管理的軟件,建議都不提供額外的依賴管理,跟隨社區(qū)的版本,可以有效減少沖突。這里之所以把3個依賴關(guān)系獨立出來引入,是為了給以后獨立升級其中一個組件提供便利。
如果業(yè)務(wù)系統(tǒng)集成了Spring Cloud Alibaba等依賴關(guān)系,在dependency management刪除;一些已經(jīng)被Spring Boot、Spring Cloud管理的不必要的依賴,也建議刪除。
第三步:添加/刪除依賴
添加的是服務(wù)注冊發(fā)現(xiàn)、集中配置管理、服務(wù)治理相關(guān)的組件,刪除的也是這些組件的第三方實現(xiàn)。這些功能以外的其他組件不需要變化,但需要關(guān)注Spring Boot、Spring Cloud版本升級后,這些軟件可能需要配套升級。兼容性的問題通常會在編譯階段或者服務(wù)啟動階段發(fā)現(xiàn)。
添加依賴一般不指定版本號,把版本號交給parent和dependency management管理。
合理規(guī)劃系統(tǒng)架構(gòu)
pring Cloud提供了豐富的組件,幫助搭建具備足夠韌性的云原生系統(tǒng)。spring cloud gateway具備通用網(wǎng)關(guān)的大部分能力,并且集成了Spring Cloud的服務(wù)治理能力,可以實現(xiàn)Spring Cloud多協(xié)議轉(zhuǎn)發(fā)。
該架構(gòu)采用靜態(tài)頁面和服務(wù)分離,這樣靜態(tài)頁面可以靈活的使用CDN、Nginx等形態(tài)部署。spring cloud gateway屏蔽了內(nèi)部微服務(wù)的結(jié)構(gòu),一般會搭配流量控制、安全認證等服務(wù)治理策略,使得內(nèi)部服務(wù)能夠靈活的進行拆分合并,降低內(nèi)部服務(wù)直接面對流量攻擊的風險。
三方軟件版本管理策略
系統(tǒng)升級、改造過程中,三方軟件沖突是最常見的問題。隨著軟件迭代速度越來越快,傳統(tǒng)的軟件兼容性管理策略已經(jīng)不適應(yīng)軟件的發(fā)展。
三方軟件管理的最佳實踐,幫助您打造一個持續(xù)演進的應(yīng)用系統(tǒng)。
開源軟件選型
主要的開源社區(qū),例如Spring Boot、Spring Cloud等都會維護多個版本分支。以Spring Cloud為例,存在Hoxton、Greenwich、2020.0.x等分支,其中大部分分支都已經(jīng)停止維護。開源軟件多數(shù)維護的分支存在兩個:一個為最新版本的開發(fā)分支;一個為最近的穩(wěn)定維護分支。
在開源軟件選型上,應(yīng)該緊跟社區(qū)的版本節(jié)奏,使用繼續(xù)提供維護的分支的最新版本。在選擇開發(fā)分支和維護分支上,沒有嚴格的定論,需要視具體的產(chǎn)品功能確定。例如產(chǎn)品競爭力嚴重依賴某個三方軟件的特性,那么更傾向于選擇開發(fā)分支的最新版本;一個產(chǎn)品依賴某個三方軟件的特性穩(wěn)定,不使用新功能,那么更傾向于選擇維護分支。
不建議選擇社區(qū)已經(jīng)停止維護的分支、以及雖然還在維護但發(fā)布時間超過半年以上的分支版本。雖然使用這些版本暫時沒有發(fā)現(xiàn)功能問題,但是會給產(chǎn)品的持續(xù)演進帶來嚴重影響:
1、軟件的安全漏洞得不到及時處理。安全漏洞的發(fā)現(xiàn)和利用都有一定的時間周期,長期使用老版本,安全漏洞被利用的可能性變大,使得系統(tǒng)更加容易被攻擊。
2、系統(tǒng)出現(xiàn)故障,更難尋求社區(qū)支持。停止維護的版本,或者已經(jīng)發(fā)布超過半年以上的版本,很難得到社區(qū)的支持。
3、系統(tǒng)演進變得更加困難。當系統(tǒng)需要增加新特性,引入新開發(fā)工具時,老版本更難與新開發(fā)工具兼容。
4、還有很多的故障,可能在新版本已經(jīng)修復(fù),新版本在代碼可維護性、性能等方面也都優(yōu)于老版本。
因此,在開源軟件選型問題上 ,最佳方案就是選擇社區(qū)提供維護升級的開發(fā)分支或者維護分支,根據(jù)問題驅(qū)動升級到分支的最新版本,每季度周期性升級到分支的最新版本。
三方軟件版本管理
首先通過一個簡單的例子,介紹三方件沖突的原理。假設(shè)開發(fā)一個X項目,該項目需要同時引用項目A提供的組件,也需要引用項目B的組件,并且項目A和項目B同時依賴了項目C,但是版本號不同。
項目X在最終發(fā)布的時候,會出現(xiàn)如下幾種情況:
1、使用項目C的0.2.0版本。由于項目A是使用0.1.0版本編譯和測試的,那么組件A可能無法正常工作。例如0.2.0版本和0.1.0不兼容,并且項目A恰好使用了這些不兼容的接口。
2、使用項目C的0.1.0版本。由于項目B是使用0.2.0版本編譯和測試的,那么組件B可能無法正常工作。例如項目B使用了0.2.0提供的新接口。
可以看出,如果項目A和項目B使用的C組件存在接口不兼容的情況,無論怎么調(diào)整,項目X都無法正常工作。必須修改項目A的代碼,使用和B同樣的或者兼容的版本進行測試,發(fā)布新的版本給X項目使用。
因此,進行依賴管理的最佳策略是保證公共組件的依賴,都使用較高的版本。盡管如此,通常還是會碰到一系列問題,特別是項目依賴關(guān)系非常復(fù)雜的情況。
目前主流的復(fù)雜項目,都采用dependency management機制管理依賴。使用dependency management已經(jīng)被驗證是比較有效的管理依賴的手段,因此被開源社區(qū)廣泛使用。例如,Spring Boot、Spring Cloud和Spring Cloud Huawei,開發(fā)者可以通過查看Spring Cloud Huawei的源代碼目錄結(jié)構(gòu)了解dependency management的具體使用。
Spring Cloud Huawei的這幾個pom是相對完整的pom結(jié)構(gòu),從不同的使用視角給開發(fā)者提供了可以引入的pom,比較適用于公共開發(fā)組件。
Spring Cloud應(yīng)用托管教程視頻
Spring Cloud應(yīng)用托管精選推薦
1對1咨詢專屬顧問
華為云咨詢電話:950808或4000-955-988 轉(zhuǎn)1
華為云咨詢電話:950808或4000-955-988 轉(zhuǎn)1