瞭解dubbo和zookeeper

什麼是dubbo?

dubbo是阿里巴巴開源的基於Java的高性能,輕量級的RPC分佈式服務框架,提供服務自動註冊,自動發現等高效服務治理方案,可以與Spring框架無縫集成,因爲是阿里巴巴開源的項目,國內很多互聯網公司都在用,使用dubbo可以將核心業務抽取出來,作爲獨立的服務,逐漸作爲穩定的服務中心,可用於提高業務的複用靈活擴展,使前端應用快速響應多變的市場需求。

dubbo的使用場景

1. 服務自動註冊和發現:不需要寫死服務提供方地址,註冊中心基於接口名查詢服務提供者的IP地址,並且能夠平滑添加和刪除服務提供者;

2. 透明化的遠程方法調用:就像調用本地方法一樣調用遠程方法,只需簡單配置,沒有任何API侵入

3. 軟負載均衡及容錯機制:可在內網替代F5等硬件負載均衡器,降低成本,減少單點。

dubbo核心功能

1. Remoting:網絡通信框架,提供對多種NIO框架抽象封裝,包括"同步轉異步"和"請求-響應"模式的信息交換方式

2. Cluster:服務框架,提供基於接口方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集羣支持

3. Registry:服務註冊,基於註冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方可以平滑增加和減少機器。

dubbo核心組件

  • Provider:暴露服務的服務提供方
  • Consumer:用遠程服務消費方
  • Registry:服務組冊與發現註冊中心
  • Monitor:監控中心和訪問調用統計
  • Container:服務運行容器

dubbo服務註冊與發現的流程

服務容器Container:負責啓動,加載,運行服務提供者

服務提供者Provider:在啓動時,向註冊中心註冊自己提供的服務

服務消費者Consumer:在啓動時,向註冊中心訂閱自己所需的服務

註冊中心Registry:返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送變更數據給消費者

服務消費者Consumer:從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用

服務消費者Consumer和提供者Provider:在內存中累計調用的次數和調用的時間,定時每分鐘發送一次統計數據到監控中心Monitor。

dubbo的整體架構設計分層

接口服務層Service:該層與業務邏輯相關,根據Provider和Consumer的業務設計對應的接口和實現

配置層Config:對外配置接口,以ServiceConfig和ReferenceConfig爲中心

服務代理層Proxy:服務接口透明代理,生成服務的客戶端Stub和服務端端Skeleton,以ServiceProxy爲中心,擴展接口爲ProxyFactory

服務註冊層Registry:封裝服務地址的註冊和發現,以服務URL爲中心,擴展接口爲RegistryFactory,Registry,RegistryService

路由層Cluster:封裝多個提供者的路由和負載均衡,並橋接註冊中心,以Invoker爲中心,擴展接口爲Cluster,Directory,Router和LoadBlance

監控層Monitor: RPC調用次數和調用時間監控,以Statistics爲中心,擴展接口爲MonitorFactory,Monitor,MonitorService​​​​

遠程調用層Protocal:封裝RPC調用,以Invocation和Result爲中心,擴展接口爲Protocal,Invoker和Exporter

信息交換層Exchange:封裝請求響應模式,同步轉異步,以Request和Response爲中心,擴展接口爲Exchanger,ExchangeChannel,ExchangeClient和ExchangeServer

網絡運輸層Transport:抽象mina和netty爲統一接口,以message爲中心,擴展接口爲channel,Transporter,Client,Server和Codec

數據序列化層Serialize:可複用的一些工具,擴展接口爲Serialization,ObjectInput,ObjectOutput和ThreadPool

dubbo Monitor實現原理

consumer端在發起調用之前會先走filter鏈,provider端在接受到請求時也是先走filter鏈,然後才進行真正的業務邏輯處理。默認情況下,在consumer和provider的filter鏈中都會有MonitorFilter。

1. MonitorFilter向DubboMonitor發送數據

2. DubboMonitor將數據進聚合後(默認聚合1min中的統計數據)暫存到ConcurrentMap<Statistics,AtomicReference>statisticsMap,然後使用一個含有3個線程(線程名字:DubboMonitorSendTimer)的線程池每隔1min,調用SimpleMonitorService遍歷發送statisticsMap中的統計數據,每發送完畢一個,就重置當前的Statistics的AtomicReference。

3. SimpleMonitorService將這些聚合數據塞入BlockingQueue queue中(隊列大寫爲100000)

4. SimpleMonitorService使用一個後臺線程(線程名字:DubboMonitorAsyncWriteLongThread)將queue中的數據寫入文件(線程以死循環的形式來寫)

5. SimpleMonitorService還會使用一個含有1個線程(線程名字:DubboMonitorTimer)的線程池每隔5min鍾,將文件中的統計數據畫成圖表

dubbo和Spring cloud有什麼關係,有什麼區別?

dubbo是SOA時代的產物,它的關注點主要在於服務的調用,流量分發,流量監控和熔斷。而Spring cloud誕生於微服務時代,考慮的是微服務的治理,另外由於在Spring,Springboot優勢之上,兩個框架的目標本來就不一致,dubbo定位服務治理,Springcloud是打造一個生態。

dubbo底層是使用Netty這樣的NIO框架,是基於TCP協議傳輸的,配合以Hession序列化的完成RPC通信。

SpringCloud是基於http協議rest接口調用遠程過程通信的,相對來說http請求會有更大的報文,佔的帶寬也會更多。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章