新聞中心
目前Spring Cloud和Dubbo體系發(fā)展都比較成熟,不少客戶已有一些采用它們開(kāi)發(fā)的系統(tǒng)。好的微服務(wù)開(kāi)發(fā)平臺(tái)需要支持這兩種體系。統(tǒng)一開(kāi)發(fā)體驗(yàn)和降低開(kāi)發(fā)復(fù)雜度的同時(shí),保留兩種體系各自的優(yōu)勢(shì)。

成都創(chuàng)新互聯(lián)是專業(yè)的敦煌網(wǎng)站建設(shè)公司,敦煌接單;提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行敦煌網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
現(xiàn)有企業(yè)IT架構(gòu)
服務(wù)調(diào)用場(chǎng)景
IT企業(yè)根據(jù)不同系統(tǒng)有不同的現(xiàn)狀和技術(shù)發(fā)展路線。針對(duì)新系統(tǒng),采用優(yōu)先常用的Spring Coud應(yīng)用調(diào)用Spring Cloud應(yīng)用或Dubbo應(yīng)用調(diào)用Dubbo應(yīng)用。
但是針對(duì)已有系統(tǒng)進(jìn)行架構(gòu)調(diào)整改造,即如有系統(tǒng)A是Spring Cloud體系,想新增或者改造一些服務(wù)為Dubbo形式,反之亦然,就會(huì)出現(xiàn)2、4的混合服務(wù)調(diào)用場(chǎng)景,這類場(chǎng)景主要是通過(guò)兼容來(lái)保證平滑升級(jí)過(guò)度。
基于使用場(chǎng)景推論,原有系統(tǒng)可能是Spring Cloud或者是Dubbo,所以服務(wù)注冊(cè)中心需要支持Eureka和Zookeeper,調(diào)用協(xié)議需要支持Http(Restful)或RPC協(xié)議。
運(yùn)行邏輯可以拆分以下幾段:
- 服務(wù)提供方可以根據(jù)配置項(xiàng),將具體服務(wù)對(duì)外提供為Spring Cloud(Restful)和Dubbo(RPC)協(xié)議服務(wù)
- 服務(wù)提供方根據(jù)提供的服務(wù)協(xié)議類型,轉(zhuǎn)換為對(duì)應(yīng)的服務(wù)契約,注冊(cè)到Eureka和Zookeeper
- 服務(wù)消費(fèi)方從Eureka和Zookeeper中獲取服務(wù)注冊(cè)信息,根據(jù)服務(wù)契約解析
- 服務(wù)消費(fèi)方根據(jù)配置項(xiàng)、獲取的服務(wù)契約,調(diào)用服務(wù)提供方的服務(wù)
- 采用統(tǒng)一聲明式調(diào)用方式使得開(kāi)發(fā)人員比較容易開(kāi)發(fā)應(yīng)用,調(diào)用實(shí)現(xiàn)通過(guò)服務(wù)類型區(qū)分,分別采用Feign,Dubbo采用自帶實(shí)現(xiàn),這樣可以有效支持已有系統(tǒng)調(diào)用,降低學(xué)習(xí)成本。
- 獨(dú)立注解可以統(tǒng)一規(guī)范開(kāi)發(fā),控制平臺(tái)調(diào)用規(guī)則處理需要提供和消費(fèi)的接口。
- 服務(wù)類型控制應(yīng)用是服務(wù)提供方還是服務(wù)消費(fèi)方,可以在同一應(yīng)用中支持服務(wù)雙體系和消費(fèi)雙體系。
- 靈活配置的服務(wù)體系規(guī)則,便于根據(jù)需要調(diào)整服務(wù)體系,如應(yīng)用總體為Spring Cloud,新增提供和消費(fèi)服務(wù)都是Dubbo,可以在原有的配置中,增加這些新服務(wù)為Dubbo體系規(guī)則即可。
定義期決定運(yùn)行的過(guò)程
服務(wù)類型是針對(duì)具體的服務(wù)提供類型為Spring Cloud(Restful)服務(wù)還是Dubbo(RPC)服務(wù),提供對(duì)應(yīng)的服務(wù)契約(完整的服務(wù)描述Swagger)。
注冊(cè)中心類型就是基于啟動(dòng)依賴和配置項(xiàng),決定連接的注冊(cè)中心具體為Eureka還是Zookeeper,提供對(duì)應(yīng)的服務(wù)發(fā)布格式(注冊(cè)中心存儲(chǔ)的服務(wù)格式)。
服務(wù)類型決定應(yīng)用、包、接口類型定義的優(yōu)先級(jí)依次遞增,即如果都有配置時(shí),以接口配置為準(zhǔn)。服務(wù)類型的切換,可以通過(guò)配置文件的修改調(diào)整,無(wú)需調(diào)整代碼。
服務(wù)提供和服務(wù)調(diào)用的關(guān)鍵邏輯:
1. 根據(jù)配置,掃描EOSService接口。
2. 判斷服務(wù)提供類型,包含多層級(jí)優(yōu)先級(jí)判斷,確定服務(wù)提供類型。
a ) Dubbo類型:仿照Dubbo本身服務(wù)發(fā)布的形式,注冊(cè)Dubbo bean實(shí)例
b ) Spring Cloud類型:根據(jù)約定發(fā)布對(duì)應(yīng)Restful服務(wù)(因?yàn)闉榉奖汩_(kāi)發(fā)采用聲明式調(diào)用,所以需要平臺(tái)約定如url、type等規(guī)則)
3. 判斷服務(wù)調(diào)用類型,包含多層級(jí)優(yōu)先級(jí)判斷,確定服務(wù)調(diào)用方式。
a ) Dubbo類型:仿照Dubbo本身服務(wù)發(fā)布的形式,注冊(cè)Dubbo bean實(shí)例
b ) Spring Cloud類型:根據(jù)約定注冊(cè)Feign bean。調(diào)用時(shí),通過(guò)Feign調(diào)用服務(wù)。
注冊(cè)中心根據(jù)如上依賴項(xiàng)決定,啟動(dòng)bean加載不同。不同的注冊(cè)中心保留的服務(wù)發(fā)布時(shí)機(jī)和格式有不同。
同體系的注冊(cè)中心因?yàn)樾枰獙?duì)接已有系統(tǒng),所以服務(wù)發(fā)布格式都延用同體系內(nèi)容,如Spring Cloud服務(wù)發(fā)布到Eureka,和Dubbo服務(wù)發(fā)布到Zookeeper中的服務(wù)格式同原有系統(tǒng)其他服務(wù),不做特殊處理。
服務(wù)發(fā)布和服務(wù)獲取的關(guān)鍵邏輯:
1. 根據(jù)依賴項(xiàng),啟動(dòng)不同注冊(cè)中心初始化過(guò)程。
2. 判斷注冊(cè)中心類型,替換服務(wù)注冊(cè)實(shí)例。
a ) Zookeeper類型:?jiǎn)?dòng)Zookeeper注冊(cè)和監(jiān)聽(tīng)實(shí)例,根據(jù)服務(wù)提供類型,組織服務(wù)發(fā)布格式到Zookeeper節(jié)點(diǎn)(具體格式后面有示例)。
b ) Eureka類型:Spring Cloud同原有,Dubbo服務(wù)通過(guò)異步掃描,放置到對(duì)應(yīng)的擴(kuò)展屬性。
3. 判斷注冊(cè)中心類型,替換服務(wù)實(shí)例獲取方式。
a ) Zookeeper類型:?jiǎn)?dòng)Zookeeper注冊(cè)和監(jiān)聽(tīng)實(shí)例,根據(jù)服務(wù)提供類型,從 Zookeeper節(jié)點(diǎn)獲取并解析服務(wù)格式(具體格式后面有示例)。
b ) Eureka類型:Spring Cloud同原有,Dubbo服務(wù)通過(guò)監(jiān)聽(tīng)Eureka 擴(kuò)展屬性。
Spring Cloud服務(wù)的發(fā)布格式在Zookeeper中存儲(chǔ)如上圖,在Zookeeper中新增/spring-cloud-service目錄,記錄Spring Cloud服務(wù)訪問(wèn)所需要的要素。
- ["dubbo://172.20.10.7:20882/com.primeton.eos.demo.sdk.server.core.api.DubboService?anyhost=true&application=provider&bean.name=ServiceBean:dubboServiceController:com.primeton.eos.demo.sdk.server.core.api.DubboService&default.deprecated=false&default.dynamic=false&default.register=true&default.timeout=1000&deprecated=false&dubbo=2.0.2&dynamic=false&generic=false&interface=com.primeton.eos.demo.sdk.server.core.api.DubboService&methods=addUserPost,addUser&pid=46073®ister=true&release=2.7.1&side=provider×tamp=1573006719825"]
9002 61441
(左右滑動(dòng)查看全部代碼)
Dubbo服務(wù)的發(fā)布格式在Eureka中存儲(chǔ)如上圖,將完整的Dubbo服務(wù)所需要的要素全部存儲(chǔ)到metadata中。
開(kāi)發(fā)使用示例
關(guān)鍵時(shí)序處理鏈路示例
實(shí)際運(yùn)行過(guò)程,根據(jù)服務(wù)的具體配置項(xiàng)和注冊(cè)中心有相應(yīng)的差異。
【小結(jié)】統(tǒng)一調(diào)用框架就是怎么支持各種混合服務(wù)調(diào)用的場(chǎng)景,又能統(tǒng)一一種開(kāi)發(fā)體驗(yàn),根據(jù)需要靈活調(diào)整實(shí)際服務(wù)類型??蚣芙鉀Q的問(wèn)題是開(kāi)發(fā)期統(tǒng)一簡(jiǎn)單,運(yùn)行期靈活多變,保證服務(wù)穩(wěn)定。實(shí)現(xiàn)時(shí)需要約束服務(wù)類型規(guī)則和注冊(cè)中心依賴形式,同時(shí)定義配套提供和調(diào)用規(guī)則。如定義Spring Cloud的服務(wù)地址規(guī)則。
【后記】在方案實(shí)現(xiàn)中遇到以下幾類問(wèn)題:
因具體問(wèn)題與Spring Cloud、Dubbo和第三方具體jar版本有關(guān),只能具體問(wèn)題具體解決。
- Jar版本沖突一般采用調(diào)整或鎖定jar版本。
- Bean沖突一般修改Bean的配置或者名稱。
- 配置項(xiàng)沖突需要自定義配置項(xiàng)處理過(guò)程,通過(guò)參數(shù)或啟動(dòng)腳本設(shè)置。
文章題目:如何統(tǒng)一服務(wù)調(diào)用框架?
網(wǎng)址分享:http://www.dlmjj.cn/article/djpodhe.html


咨詢
建站咨詢
