Dubbo
是一款高性能Java RPC
框架,目前 dubbo
重启开源社区维护了,捐献给了 apache
,所以在项目建设初期,我们团队也使用了Dubbo
。
为什么要使用Dubbo
因为整个平台系统在设计之初就显得过于庞大,所以必须进行服务应用拆分,不然开发、测试、维护成本巨大。目前我们公司是将各业务口细化成具体的业务系统,然后将可以通用的部分抽象成服务供各个系统使用。类似消息、存储等应用。所以Dubbo对我们来说是一个不错的选择。
说一下的 dubbo 的工作原理
在Dubbo的架构设计中,分为了十层,我可以从这十层简单说下,
- 第一层是service层,服务提供者和消费者,定义自己的接口和实现。
- 第二层是config层,ServiceConfig等,主要是给消费者或者提供者配置自己的基本信息,类似接口名字,注册中心地址等。
- 第三层是proxy服务代理层,无论是 consumer 还是 provider,dubbo 都会给你生成代理,代理之间进行网络通信
- 第四层是registry 注册中心层,主要是封装服务的注册和发现。,我们可以通过这个这一层的各个类,RegistryService、以及RegistryFactory等,实现自己的自定义注册等。
- 第五层是cluster 路由层,封装多个提供者的路由及负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为 Cluster, Directory, Router, LoadBalance。
- 第六层:monitor 层,监控层,对 rpc 接口的调用次数和调用时间进行监控
- 第七层:protocal 层,远程调用层,封装 rpc 调用
- 第八层:exchange 层,信息交换层,封装请求响应模式,同步转异步
- 第九层:transport 层,网络传输层,抽象 mina 和 netty 为统一接口
- 第十层:serialize 层,数据序列化层
首先,服务提供者定义自己的服务,然后去注册中心注册, 消费者去注册中心订阅,注册中心再通知消费者。 然后消费者调用服务提供者,并且二者异步通知监控中心,自己调用了服务,或者提供了服务。