题外话
dubbo到底是读杜博还是达博,官方已有音标 |ˈdʌbəʊ|
正题
一、背景方面
-----------------------------------------------------------------------------------------------
- dubbo前期社区活跃度并不高,淘宝系主推的是HSF而并非dubbo。2017年dubbo被阿里重启、2018年dubbo正式进入Apache孵化器。随着dubbo重启及进行apache体系,dubbo社区也非常活跃,阿里也把dubbo做为重点项目。
- dubbo前期只是一个PRC框架,目前随着nacos、sentinel等阿里系项目开源,阿里微服务架构也逐步成为生态。
- 阿里巴巴是一个商业公司,虽然也开源了很多的顶级的项目,但从整体战略上来讲,仍然是服务于自身的业务为主。
- 目前带‘国’字号的企业使用dubbo还是比较多的,中国人寿、中国电信、中国工商银行...
vs
- springcloud有着强大活跃的社区,在全全球范围使用与影响巨大。
- springcloud是大名鼎鼎的Spring家族的产品,Spring专注于企业级开源框架的研发,不论是在中国还是在世界上使用都非常广泛,开发出通用、开源、稳健的开源框架就是他们的主业
- springcloud生态相对全面完Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等(springcloud全家桶)
- 刘军作为Dubbo重启的负责人也发表过观点,Dubbo的发展方向是积极适应SpringCloud生态,并不是起冲突。
二、通讯方面
-----------------------------------------------------------------------------------------------
- Dubbo基于RPC协议,在OSI七层参考模型中http处于第一层应用层而rpc处于第三层会话层,是二进制的传输,占用带宽会更少。
- Dubbo框架在于面向接口的编程模型,使得开发远程服务调用就像开发本地服务一样
- RPC依赖性强,对客户端与服务端均要引用共用的service,对双方在版本控制也有要求增加一定的耦合性
- REST在分布式环境下比RPC更加灵活,这也是为什么当当网的DubboX在对Dubbo的增强中增加了对REST的支持的原因
vs
- Spring Cloud是HTTP协议传输,带宽占用会比较多。但当下的企业内这点消耗的影响还是比较小的,并且http的报文也可以做一些压缩的优化。
- springcloud使用feign(open feign)是rest轻量级、松散、更加灵活,不存在代码之间的耦合,比较自由且松散。
- 微服务的提出者马丁福勒定义的微服务通讯就是基于散耦合的rest
三、实现方面
-----------------------------------------------------------------------------------------------
- dubbo为每个微服务定义了各自的service抽象接口,并通过持续集成发布到私有仓库中,调用方应用对微服务提供的抽象接口存在强依赖关系,这就是大家所说的要依赖一大堆jar包。
vs
- Spring Cloud的接口协议约定比较自由且松散不存在强依赖
四、人才方面
-----------------------------------------------------------------------------------------------
- 目前市场上Spring Cloud的研发人员相关dubbo会更好招,springcloud人才更受企业欢迎