http://shiyanjun.cn/archives/325.html
Dubbo
是Alibaba
开源的分布式服务框架
,
它最大的特点是按照分层的方式来架构,
使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。
从服务模型
的角度来看,Dubbo
采用的是一种非常简单的模型,
要么是提供方提供服务,
要么是消费方消费服务,
所以基于这一点可以抽象出服务提供方(Provider)
和服务消费方(Consumer)
两个角色。
关于注册中心
、协议支持
、服务监控
等内容,详见后面描述。
Dubbo
框架设计一共划分了10个层,
而最上面的Service层
是留给实际想要
使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层。
图中左边淡蓝背景的为服务消费方使用的接口,
右边淡绿色背景的为服务提供方使用的接口,
位于中轴线上的为双方都用到的接口。
下面,结合Dubbo官方文档,
我们分别理解一下框架分层架构中,
各个层次的设计要点:
◇ 1
服务接口层(Service):
该层是与实际业务逻辑相关的,
根据服务提供方和服务消费方的业务
设计对应的接口和实现。
◇ 2
配置层(Config):
对外配置接口,以ServiceConfig
和ReferenceConfig
为中心,
可以直接new
配置类,
也可以通过spring
解析配置生成配置类。
◇ 3
服务代理层(Proxy):
服务接口透明代理,
生成服务的客户端Stub
和服务器端Skeleton
,
以ServiceProxy
为中心,
扩展接口为ProxyFactory
。
◇ 4
服务注册层(Registry):
封装服务地址的注册与发现,
以服务URL
为中心,
扩展接口为RegistryFactory
、Registry
和RegistryService
。可能没有服务注册中心
,
此时服务提供方直接暴露服务。
◇ 5
集群层(Cluster):
封装多个提供者的路由及负载均衡,
并桥接注册中心
,以Invoker
为中心,
扩展接口为Cluster
、Directory
、Router
和LoadBalance
。
将多个服务提供方组合为一个服务提供方,
实现对服务消费方来透明,
只需要与一个服务提供方进行交互。
◇ 6
监控层(Monitor):
RPC
调用次数和调用时间监控,
以Statistics
为中心,
扩展接口为MonitorFactory
、Monitor
和MonitorService
。
◇ 7
远程调用层(Protocol):
封将RPC
调用,以Invocation
和Result
为中心,
扩展接口为Protocol
、Invoker
和Exporter
。
Protocol
是服务域,
它是Invoker
暴露和引用的主功能入口,
它负责Invoker
的生命周期管理。
Invoker
是实体域,
它是Dubbo
的核心模型,其它模型都向它靠扰,或转换成它,
它代表一个可执行体,可向它发起invoke
调用,
它有可能是一个本地的实现,也可能是一个远程的实现,
也可能一个集群实现。
◇ 8
信息交换层(Exchange):
封装请求响应模式,同步转异步,
以Request
和Response
为中心,
扩展接口为Exchanger
、ExchangeChannel
、ExchangeClient
和ExchangeServer
。
◇ 9
网络传输层(Transport):
抽象mina
和netty
为统一接口,
以Message
为中心,
扩展接口为Channel
、Transporter
、Client
、Server
和Codec
。
◇ 10
数据序列化层(Serialize):
可复用的一些工具,
扩展接口为Serialization
、 ObjectInput
、ObjectOutput
和ThreadPool
。