dubbo是spring cloud的两大微服务架构之一,按照微服务部署,其结构如下:
image.png
对比于Netflix,sentinel处理了熔断,增加了seata处理事务。
Spring Cloud Netflex vs Spring Cloud Dubbo
组成部分 | Spring Cloud Netflex | Spring Cloud Dubbo |
---|---|---|
组成风格 | 和Spring boot脚手架风格一致,由多个组件完成各自独立的功能,由注解或配置组装成新组件 | dubbo一个组件实现了绝大部分功能 |
rpc | 直接由http作为rpc调用,使用tomcat完成通信,数据采用http协议、spring mvc完成了方法查找,jacson进行序列化和反序列化, | dubbo提供了丰富的rpc调用,包括调用协议、序列化反序列化协议,由netty作为通信层 |
注册中心 | 支持多种注册中心 | 支持多注册中心,如同时配置nacos和zookeeper |
配置中心 | 支持多种配置中心,如spring cloud config | 支持多种配置中心,与nacos、zookeeper等配套比较好 |
网关 | 使用常用网关接入,默认Spring Cloud Config | 使用常用网关接入 |
MQ | 支持多种MQ | 一般使用阿里RocketMQ |
数据库 | 支持多种数据库 | 知此恨多种数据库 |
接口调用 | 使用openfeign组件,支持http调用 | 支持多种协调调用,dubbo默认支持 |
负载均衡 | 使用rabbon组件支持负载均衡 | dubbo默认支持 |
限流降级 | 使用hystrix组件支持熔断限流降级 | 使用sentinal支持熔断 |
dubbo的扩展点
dubbo的整体架构图设计如下:
image.png
重点要看明白的是所有绿色的地方都是接口定义,都是用扩展点实现的。
在dubbo的META-INF/dubbo.internal下定义了dubbo所有的扩展点:
image.png
这些扩展点就是绿色接口的实现。此时思考一个问题,有这么多扩展点,是什么时候加载的呢?
通过url实现,dubbo有很多自定以的url,通过url中的关键字控制使用那种扩展点。
dubbo的优势
看了如上扩展点图列,就很容易明白dubbo的强大之处。
- rpc通信,spring cloud netflex默认支持的是http作为rpc。而dubbo可以从扩展点看到,从传输协议、序列化等支持的种类非常多,可以适用于多种场景。
- dubbo支持多注册中心,注意不是多种注册中心,即同时可以使用多个注册中心。
在扩展点框架下,dubbo的优势确实非常明显。
小结
对于Spring Cloud Netflix和Spring Cloud Dubbo,你喜欢哪个呢?这恐怕要仁者见仁,智者见智。
从设计风格上来讲:
- Spring boot是脚手架,是一种组合风格,Spring Cloud Netflex的设计哲学更加是一种组合风格,整体设计功能模块分解清晰,设计让人感觉优美。
- 而Dubbo呢,通过一套扩展点框架,基本可以完成所有功能,这种设计让人感觉功能强大。特别是底层的通信设计
对于我来讲,我比较认同Spring boot的设计风格。那么对于你呢,萝卜青菜,你最爱哪个?如果是你设计,你倾向于那种设计?我在想,如果一开始就是netflex的设计师来设计dubbo,会设计成什么样?
网友评论