自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何統(tǒng)一服務(wù)調(diào)用框架?

開發(fā) 架構(gòu)
目前在Java 微服務(wù)領(lǐng)域Spring Cloud 和Dubbo體系都被廣泛使用。不同的用戶會根據(jù)項目的需要選擇合適的架構(gòu)。但是在有些跨系統(tǒng)的場景下會涉及到兩種體系間的混合調(diào)用。怎么做到較小修改就支持Spring Cloud和Dubbo兩種體系的混合調(diào)用?

 [[282188]]

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

 

  

現(xiàn)有企業(yè)IT架構(gòu)

  

服務(wù)調(diào)用場景

IT企業(yè)根據(jù)不同系統(tǒng)有不同的現(xiàn)狀和技術(shù)發(fā)展路線。針對新系統(tǒng),采用優(yōu)先常用的Spring Coud應(yīng)用調(diào)用Spring Cloud應(yīng)用或Dubbo應(yīng)用調(diào)用Dubbo應(yīng)用。

但是針對已有系統(tǒng)進行架構(gòu)調(diào)整改造,即如有系統(tǒng)A是Spring Cloud體系,想新增或者改造一些服務(wù)為Dubbo形式,反之亦然,就會出現(xiàn)2、4的混合服務(wù)調(diào)用場景,這類場景主要是通過兼容來保證平滑升級過度。

 

基于使用場景推論,原有系統(tǒng)可能是Spring Cloud或者是Dubbo,所以服務(wù)注冊中心需要支持Eureka和Zookeeper,調(diào)用協(xié)議需要支持Http(Restful)或RPC協(xié)議。

運行邏輯可以拆分以下幾段:

  1. 服務(wù)提供方可以根據(jù)配置項,將具體服務(wù)對外提供為Spring Cloud(Restful)和Dubbo(RPC)協(xié)議服務(wù)
  2. 服務(wù)提供方根據(jù)提供的服務(wù)協(xié)議類型,轉(zhuǎn)換為對應(yīng)的服務(wù)契約,注冊到Eureka和Zookeeper
  3. 服務(wù)消費方從Eureka和Zookeeper中獲取服務(wù)注冊信息,根據(jù)服務(wù)契約解析
  4. 服務(wù)消費方根據(jù)配置項、獲取的服務(wù)契約,調(diào)用服務(wù)提供方的服務(wù)

 

  • 采用統(tǒng)一聲明式調(diào)用方式使得開發(fā)人員比較容易開發(fā)應(yīng)用,調(diào)用實現(xiàn)通過服務(wù)類型區(qū)分,分別采用Feign,Dubbo采用自帶實現(xiàn),這樣可以有效支持已有系統(tǒng)調(diào)用,降低學(xué)習(xí)成本。
  • 獨立注解可以統(tǒng)一規(guī)范開發(fā),控制平臺調(diào)用規(guī)則處理需要提供和消費的接口。
  • 服務(wù)類型控制應(yīng)用是服務(wù)提供方還是服務(wù)消費方,可以在同一應(yīng)用中支持服務(wù)雙體系和消費雙體系。
  • 靈活配置的服務(wù)體系規(guī)則,便于根據(jù)需要調(diào)整服務(wù)體系,如應(yīng)用總體為Spring Cloud,新增提供和消費服務(wù)都是Dubbo,可以在原有的配置中,增加這些新服務(wù)為Dubbo體系規(guī)則即可。

 

定義期決定運行的過程

服務(wù)類型是針對具體的服務(wù)提供類型為Spring Cloud(Restful)服務(wù)還是Dubbo(RPC)服務(wù),提供對應(yīng)的服務(wù)契約(完整的服務(wù)描述Swagger)。

注冊中心類型就是基于啟動依賴和配置項,決定連接的注冊中心具體為Eureka還是Zookeeper,提供對應(yīng)的服務(wù)發(fā)布格式(注冊中心存儲的服務(wù)格式)。

服務(wù)類型決定應(yīng)用、包、接口類型定義的優(yōu)先級依次遞增,即如果都有配置時,以接口配置為準。服務(wù)類型的切換,可以通過配置文件的修改調(diào)整,無需調(diào)整代碼。

服務(wù)提供和服務(wù)調(diào)用的關(guān)鍵邏輯:

1. 根據(jù)配置,掃描EOSService接口。

2. 判斷服務(wù)提供類型,包含多層級優(yōu)先級判斷,確定服務(wù)提供類型。

a ) Dubbo類型:仿照Dubbo本身服務(wù)發(fā)布的形式,注冊Dubbo bean實例

b ) Spring Cloud類型:根據(jù)約定發(fā)布對應(yīng)Restful服務(wù)(因為為方便開發(fā)采用聲明式調(diào)用,所以需要平臺約定如url、type等規(guī)則)

3. 判斷服務(wù)調(diào)用類型,包含多層級優(yōu)先級判斷,確定服務(wù)調(diào)用方式。

a ) Dubbo類型:仿照Dubbo本身服務(wù)發(fā)布的形式,注冊Dubbo bean實例

b ) Spring Cloud類型:根據(jù)約定注冊Feign bean。調(diào)用時,通過Feign調(diào)用服務(wù)。

注冊中心根據(jù)如上依賴項決定,啟動bean加載不同。不同的注冊中心保留的服務(wù)發(fā)布時機和格式有不同。

同體系的注冊中心因為需要對接已有系統(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ù)依賴項,啟動不同注冊中心初始化過程。

2. 判斷注冊中心類型,替換服務(wù)注冊實例。

a ) Zookeeper類型:啟動Zookeeper注冊和監(jiān)聽實例,根據(jù)服務(wù)提供類型,組織服務(wù)發(fā)布格式到Zookeeper節(jié)點(具體格式后面有示例)。

b ) Eureka類型:Spring Cloud同原有,Dubbo服務(wù)通過異步掃描,放置到對應(yīng)的擴展屬性。

3. 判斷注冊中心類型,替換服務(wù)實例獲取方式。

a ) Zookeeper類型:啟動Zookeeper注冊和監(jiān)聽實例,根據(jù)服務(wù)提供類型,從 Zookeeper節(jié)點獲取并解析服務(wù)格式(具體格式后面有示例)。

b ) Eureka類型:Spring Cloud同原有,Dubbo服務(wù)通過監(jiān)聽Eureka 擴展屬性。

Spring Cloud服務(wù)的發(fā)布格式在Zookeeper中存儲如上圖,在Zookeeper中新增/spring-cloud-service目錄,記錄Spring Cloud服務(wù)訪問所需要的要素。

  1. <metadata> 
  2. <providers> 
  3. ["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&register=true&release=2.7.1&side=provider&timestamp=1573006719825"
  4. </providers> 
  5. <management.port>9002</management.port> 
  6. <jmx.port>61441</jmx.port> 
  7. </metadata> 

(左右滑動查看全部代碼)

Dubbo服務(wù)的發(fā)布格式在Eureka中存儲如上圖,將完整的Dubbo服務(wù)所需要的要素全部存儲到metadata中。

開發(fā)使用示例


關(guān)鍵時序處理鏈路示例

實際運行過程,根據(jù)服務(wù)的具體配置項和注冊中心有相應(yīng)的差異。

 

【小結(jié)】統(tǒng)一調(diào)用框架就是怎么支持各種混合服務(wù)調(diào)用的場景,又能統(tǒng)一一種開發(fā)體驗,根據(jù)需要靈活調(diào)整實際服務(wù)類型??蚣芙鉀Q的問題是開發(fā)期統(tǒng)一簡單,運行期靈活多變,保證服務(wù)穩(wěn)定。實現(xiàn)時需要約束服務(wù)類型規(guī)則和注冊中心依賴形式,同時定義配套提供和調(diào)用規(guī)則。如定義Spring Cloud的服務(wù)地址規(guī)則。

【后記】在方案實現(xiàn)中遇到以下幾類問題:

因具體問題與Spring Cloud、Dubbo和第三方具體jar版本有關(guān),只能具體問題具體解決。

  • Jar版本沖突一般采用調(diào)整或鎖定jar版本。
  • Bean沖突一般修改Bean的配置或者名稱。
  • 配置項沖突需要自定義配置項處理過程,通過參數(shù)或啟動腳本設(shè)置。

 

 

責(zé)任編輯:華軒 來源: EAWorld
相關(guān)推薦

2010-09-01 19:53:25

2012-06-08 09:08:19

惠普云計算云服務(wù)

2019-01-29 10:06:31

開源技術(shù) 趨勢

2010-12-29 14:05:57

SharePoint

2023-07-30 16:05:44

多模態(tài)學(xué)習(xí)框架自然語言

2022-03-15 21:38:29

sentry微服務(wù)監(jiān)控

2009-05-05 14:25:49

服務(wù)器管理IBM

2010-05-13 09:58:20

統(tǒng)一通信服務(wù)

2021-12-08 10:13:17

實踐設(shè)計風(fēng)格

2015-04-01 09:53:34

微軟Azure云服務(wù)服務(wù)整合

2020-05-22 11:09:16

統(tǒng)一通信統(tǒng)一通信即服務(wù)TCO

2022-05-07 10:09:01

開發(fā)Java日志

2018-12-17 17:14:06

AI數(shù)據(jù)科技

2022-11-08 15:49:28

Dubbovivo服務(wù)器

2010-05-14 13:34:54

統(tǒng)一通信SaaS

2020-09-02 08:10:33

微服務(wù)標準化設(shè)計

2010-05-12 18:04:00

統(tǒng)一通信服務(wù)

2010-05-21 13:22:50

統(tǒng)一通信系統(tǒng)服務(wù)

2020-08-26 08:21:59

微服務(wù)

2010-05-12 15:12:47

統(tǒng)一通信服務(wù)
點贊
收藏

51CTO技術(shù)棧公眾號