開始寫點技術博客,來鞏固下自己的知識,首先從dubbo開始。第一天。
眾所周知,Dubbo是Ali發布的開源的分布式服務框架,實際上說dubbo就是對RPC的一種封裝,他最大的特點是按照分層的方式來架構,使用這種方式可以使各服務應用層之間的耦合最大程度的解耦。從服務模型的角度來看,dubbo采用的一種非常簡單的模式,只有消費方(Consumer)、提供方(provider)兩個角色。
dubbo框架設計一共劃分了了10個層,最上面的service層使留給實際想要使用dubbo開發分布式服務的開發者實現業務邏輯的接口層。上圖左邊淡藍色背景的為消費方使用的接口,右邊淡綠色背景為服務提供的接口,位于中軸線上的為雙方都用到的接口。
分析下框架分層架構中,各層的設計要點:
1.服務接口層(Service):該層是與實際業務邏輯相關的,根據服務提供方和服務消費方的業務設計對應的接口和實現。
2.配置層(Config):對外配置的接口,以ServiceConfig和ReferenceConfig為中心,可以直接new配置類,也可以通過Spring解析配置類生成配置類。我待得項目組采用的是后者。通過解析*.-dubbo-customer、*-dubbo-provider.xml 配置對應的service 接口 和dubbo的配置。
3.服務代理層(proxy):服務接口透明代理,生成服務的客戶端Stub和服務器端Skeleton,以ServiceProxy為中心,擴展接口的ProxyFactory。
4.服務注冊層(Registry):封裝服務地址的注冊與發現,以服務URL為中心,擴展接口為RegistryFactory、Registry和RegistryService??赡軟]有服務的注冊中心,測試服務提供方直接暴露服務。
5.集群層(Cluster):封裝多個提供者的路由及負載均衡,并橋接注冊中心,以Invoker為中心,擴展接口為Cluster、Disectory、Router和LoadBalance。將多個服務提供方組合為一個實現對服務消費方來透明,只需要與一個服務同方進行交互。
6.監視層(Monitor):RPC調用次數和調用時間監控,以Statistics為中心,擴展接口為MonitorFactory、Moinitor和MonitorService。
7.遠程調用層(Proctocol):封裝RPC調用,以Invocation和Result為中心,擴展接口為Protocol、Invoker和Exporter.Protocol是服務域,他是Invoker暴露和引用的主入口,他負責Invoker的生命周期管理,Invoker是實體域,它是dubbo的核心模型,其他模型都向它靠攏,或轉換成它,它代表一個執行體,可向它發起Invoke調用,它有可能是一種本地的實現,也有可能是一種遠程的實現,也有可能一個集群實現
8.信息交換層(Exchange):封裝請求響應模式,同步轉異步,以Request和Response為中心,擴展接口為Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。例如public Response xxx(@param){return reponse}
9.網絡傳輸層(Transport):抽象mina和netty為統一接口,以Message為中心,擴展接口為Channel、Transportput和ThreadPool。
10.數據序列化層(Serialize):可復用的一些工具,擴展接口為Serialization、ObjectInput、ObjectOutPut和ThreadPool。
根據官方提供的,對于上述各層之間關系的描述,如下所示:
1.在RPC中,Proctocol是核心層,也就是只要有Protocol+Invoker+Exporter就可以完成非透明的RPC調用,然后在Invoker的主過程上Filter攔截點。
2.圖中的Consumer和provider是抽象概念,只是想