最近阿里方面低调重启Dubbo的更新,连续发布了几个更新版本,修复了大量的问题和进行框架优化,这也让业界目光又重新聚焦到了Dubbo 和 Spring Cloud 这两个开发者熟知的框架上,
首先看下Dubbo和Spring Cloud有何不同?
功能 | Dubbo | Spring Cloud |
---|---|---|
服务注册中心 | Zookeeper | Spring Cloud Netflix Eureka |
服务调用方式 | RPC | REST API |
服务监控 | Dubbo-monitor | Spring Boot Admin |
断路器 | 不完善 | Spring Cloud Netflix Hystrix |
服务网关 | 无 | Spring Cloud Netflix Zuul |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth |
消息总线 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
从上图可以看出其实Dubbo的功能只是Spring Cloud体系的一部分。
但其实这样对比是不够公平的,首先 Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用,流量分发、流量监控和熔断。而 Spring Cloud 诞生于微服务架构时代,考虑的是微服务治理的方方面面,另外由于依托了 Spring、Spring Boot 的优势之上,两个框架在开始目标就不一致,Dubbo 定位服务治理、Spring Cloud 是一个生态。
另外:
· Dubbo存在的jar包依赖问题(大体是指,Dubbo内部对部分通用jar包依赖了不同版本)(后续更新:可以通过其它方式处理,并且Dubbo开发团队已经在后续版本中解决,但是需要升级);
· 关于业界很多人说Dubbo是二进制RPC,Spring Cloud是基于HTTP协议的JSON,以此来衡量性能和传输效率,但其实存在不全面的地方, 感兴趣的完全可以通过测试工具去验证;
· 对于比较两者架构臃肿程度(例如Dubbo没有自己的依赖体系、Spring Cloud 全家桶过于臃肿自由度不高等),这些都是基于上述描述的一样,二者是不同是时期、不同目的的产物,自身设计都是尽可能贴合当下需求;
如果仅仅关注于服务治理的这个层面,Dubbo其实还优于Spring Cloud很多:
· Dubbo 支持更多的协议,如:rmi、hessian、http、webservice、thrift、memcached、redis 等。
· Dubbo 使用 RPC 协议效率更高,在极端压力测试下,Dubbo 的效率会高于 Spring Cloud 效率一倍多。
· Dubbo 有更强大的后台管理,Dubbo 提供的后台管理 Dubbo Admin 功能强大,提供了路由规则、动态配置、访问控制、权重调节、均衡负载等诸多强大的功能。
· 可以限制某个 IP 流量的访问权限,设置不同服务器分发不同的流量权重,并且支持多种算法,利用这些功能我们可以在线上做灰度发布、故障转移等,Spring Cloud 到现在还不支持灰度发布、流量权重等功能。
所以Dubbo专注于服务治理;Spring Cloud关注于微服务架构生态。
Dubbo发布对Spring Cloud有影响吗?
国内技术人喜欢拿 Dubbo 和 Spring Cloud 进行对比,是因为两者都是服务治理非常优秀的开源框架。但它们两者的出发点是不一样的,Dubbo 关注于服务治理这块并且以后也会继续往这个方向去发展。Spring Cloud 关注的是微服务治理的生态。因为微服务治理的方方面面都是它所关注的内容,服务治理也只是微服务生态的一部分而已。因此可以大胆的断定,Dubbo 未来会在服务治理方面更为出色,而 Spring Cloud 在微服务治理上面无人能敌。
同时根据 Dubbo 最新的更新技术来看,Dubbo 也会积极的拥抱开源,拥抱新技术。Dubbo 接下来的版本将会很快的支持 Spring Boot,方便我们享受高效开发的同时,也可以支持高效的服务调用。Dubbo 被广泛应用于中国各互联网公司,如今阿里又重新重视起来并且发布了新版本和一系列的计划,对于正在使用 Dubbo 的公司来说是一个喜讯,对于中国广大的开发者来说更是一件非常喜悦的事情。我们非常乐于看到中国有一款非常优秀的开源框架,让我们有更多的选择,有更好的支持。
两者其实不一定有竞争关系,如果使用得当甚至可以互补;另外两个关注的领域也不一致,因此对 Spring Cloud 的影响甚微。
如何选择?
可能很多人正在犹豫,在服务治理的时候应该选择那个框架呢?如果公司对效率有极高的要求建议使用 Dubbo,相对比 RPC 的效率会比 HTTP 高很多;如果团队不想对技术架构做大的改造建议使用 Dubbo,Dubbo 仅仅需要少量的修改就可以融入到内部系统的架构中。但如果技术团队喜欢挑战新技术,建议选择 Spring Cloud,Spring Cloud 架构体系有有趣很酷的技术。如果公司选择微服务架构去重构整个技术体系,那么 Spring Cloud 是当仁不让之选,它可以说是目前最好的微服务框架没有之一。
最后,技术选型是一个综合的问题,需要考虑团队的情况、业务的发展以及公司的产品特征。最炫最酷的技术并不一定是最好的,选择适合自己团队、符合公司业务的框架才是最佳方案。技术的发展永远没有尽头,因此我们对技术也要保持空杯、保持饥饿、保持敬畏!
相关网站和博文参考(持续更新中…):
Apache Dubbo 官网
Apache Dubbo 生态系统,构建产品级微服务
阿里重启维护 Dubbo 了 - InfoQ
阿里Dubbo疯狂更新,关Spring Cloud什么事? - ityouknow
Dubbo 各版本总结与升级建议
Dubbo Spring Boot 脚手架