原文出处,在 Spring For All 社区(http://spring4all.com ): http://www.spring4all.com/article/213java
最近,开源社区发生了一件大事,那个全国 Java 开发者使用最广的开源服务框架 Dubbo 低调重启维护,而且 3 个月连续发布了 4 个维护版本。git
我上次在写放弃Dubbo,选择最流行的Spring Cloud微服务架构实践与经验总结这篇文章的时候,就有不少的网友给我留言说,Dubbo 又开始更新了。我固然是清楚的,我也一直在关注着 Dubbo 的走向,在几个月前技术圈里面就有一个消息说是 Dubbo 又开始更新了,你们议论纷纷不知真伪。我还专门跑到 GitHub 上面进行了留言询问,最后在 Dubbo 的 gitter 聊天室里面找到了确信的答案,说是正在组建团队。虽然稍稍有所期待,但也不知道阿里此次拿出了多少的诚意来作这件事,因而我昨天又到 GitHub 逛了一下,发现从 9 月开始,阿里三个月连着发布了四个版本,仍是很是有诚意的,值得关注。web
Dubbo 是阿里巴巴公司一个开源的高性能服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案,使得应用可经过高性能 RPC 实现服务的输出、输入功能和 Spring 框架无缝集成。Dubbo 包含远程通信、集群容错和自动发现三个核心部分。redis
它提供透明化的远程方法调用,实现像调用本地方法同样调用远程方法,只需简单配置,没有任何 API 侵入。同时它具有软负载均衡及容错机制,可在内网替代 F5 等硬件负载均衡器,下降成本,减小单点。它能够实现服务自动注册与发现,再也不须要写死服务提供方地址,注册中心基于接口名查询服务提供者的 IP 地址,而且可以平滑添加或删除服务提供者。算法
2011 年底,阿里巴巴在 GitHub 上开源了基于 Java 的分布式服务治理框架 Dubbo,以后它成为了国内该类开源项目的佼佼者,许多开发者对其表示青睐。同时,前后有很多公司在实践中基于 Dubbo 进行分布式系统架构。目前在 GitHub 上,它的 fork、star 数均已破万。spring
Dubbo核心功能:json
发展到开源缓存
2008 年末在阿里内部开始规划调用,2009 年初开发 1.0 版本;2010 年 04 月在 1.0 的版本之上进行了重构,发布了 2.0 版本;2011 年 10 月阿里宣布将 Dubbo 开源,开源的第一个版本为版本 dubbo-2.0.7。服务器
开源成长架构
Dubbo 开源以后,框架发展比较迅速,几乎两三个月会发布一个版本,于 2012 年 3 月 14 号发布版本 dubbo-2.1.0。随后又进入另外一个快速发展期,版本发布频繁,几乎每个月会发布好几回。直到 2013 年 3 月 17 号发布了 dubbo-2.4.10,版本陷入停滞;2014 年 10 月 30 号发布版本 dubbo-2.4.11,修复了一个小 Bug,版本又陷入漫长的停滞到如今。
阿里以外的发展
2014 年的 10 月 20 号,当当网 Fork 了阿里的一个 Dubbo 版本开始维护,并命名为 dubbox-2.8.0。值得注意的是,当当网扩展 Dubbo 服务框架支持 REST 风格远程调用,而且跟随着 ZooKeepe 和 Spring 升级了对应的版本。以后 Dubbox 一直在小版本维护,2015 年 3 月 31 号发布了最后一个版本 dubbox-2.8.4。
目前 Dubbo 的主力开发以阿里巴巴中间件团队为主,同时在阿里内部也招募了一些对 Dubbo 感兴趣的同事。你们要知道,Dubbo 距离今年开始维护的上一个版本是什么时间发布的吗?是 2014 年 10 月 30 号,差了整整将近 3 年,Dubbo 所依赖的 Jdk、Spring、Zookeeper、Zkclient 等等不知道都更新了多少个版本。所以阿里恢复更新的第一步就是适配所依赖的各组件版本,让 Dubbo 所依赖的基础环境不要太落伍,另外也 Fixed 掉了一些严重的 Bug。
dubbo-2.5.4/5版本
2017 年 9 月,阿里发布了 dubbo-2.5.4/5 版本,更新内容以下:
依赖升级
依赖 | 当前版本 | 目标版本 | 影响点 |
---|---|---|---|
spring | 3.2.16.RELEASE | 4.3.10.RELEASE | schema配置解析;Http RPC协议 |
zookeeper | 3.3.3 | 3.4.9 | 经常使用注册中心 |
zkclient | 0.1 0.10 | zookeeper | 客户端工具 |
curator | 1.1.16 | 2.12.0 | zookeeper客户端工具 |
commons-logging | 1.1.1 | 1.2 | 日志实现集成 |
hessian | 4.0.6 | 4.0.38 | hessian RPC协议 |
jedis | 2.1.0 | 2.9.0 | redis注册中心;缓存RPC |
httpclient | 4.1.2 | 4.5.3 | hessian等用http链接池 |
validator | 1.0.0 | 1.1.0.Final | java validation规范 |
cxf | 2.6.1 | 3.0.14 | webservice |
jcache | 0.4 | 1.0.0 | jcache规范 |
这版在升级相关依赖版本的同时,以问题反馈频率和影响面排定优先级,优先解决了几个反馈最多、影响较大的一些缺陷,包括优雅停机、异步调用、动态配置、MonitorFilter 监控统计等问题。
dubbo-2.5.6版本
2017 年 10 月,阿里发布了 dubbo-2.5.6 版本,又 Fixed 掉了一大批严重的 Bug。
发布内容
dubbo-2.5.7版本
2017 年 11 月,也就是 12 天前,阿里发布了 dubbo-2.5.7。此次不但修复了一批主要的 Bug,还作了一处小功能的完善。
发布内容
此次版本发布内容较多,所以还给出了升级建议。
升级请注意
重点
在 2.5.7 版本更新的同时还给出了下一步的预告,近期即将提供 dubbo-spring-boot-starter 启动配置模块。
这个提示说明了两个事情:
根据阿里技术的信息,最近三个版本会作的事情以下:
将来计划:
重构动态配置模块,动态配置和注册中心分离,集成流行的开源分布式配置管理框架,服务元数据注册与注册中心分离,丰富元数据内容,适配流行的 consul etcd 等注册中心方案。考虑提供 opentrace、oauth二、metrics、health、gateway 等部分服务化基础组件的支持,服务治理平台 OPS 重作,除代码、UI 重构外,指望能提供更强的服务测试、健康检查、服务动态治理等特性。Dubbo 模块化,各个模块可单独打包、单独依赖,集群熔断和自动故障检测能力。
继续在 Dubbo 框架现代化、国际化这两个大的方向上进行探索。现代化方面主要是考虑到目前微服务架构以及容器化日渐流行的大趋势,Dubbo 做为 RPC 框架如何很好地融入其中,成为其生态体系中不可或缺的一个组件。**强调的是 Dubbo 将来的定位并非要成为一个微服务的全面解决方案,而是专一在 RPC 领域,成为微服务生态体系中的一个重要组件。**至于你们关注的微服务化衍生出的服务治理需求, Dubbo 将积极适配开源解决方案,甚至启动独立的开源项目予以支持。
首先作一个简单的功能对比:
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 诞生于微服务架构时代,考虑的是微服务治理的方方面面,另外因为依托了 Spirng、Spirng Boot 的优点之上,两个框架在开始目标就不一致,Dubbo 定位服务治理、Spirng 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 是当仁不让之选,它能够说是目前最好的微服务框架没有之一。
最后,技术选型是一个综合的问题,须要考虑团队的状况、业务的发展以及公司的产品特征。最炫最酷的技术并不必定是最好的,选择适合本身团队、符合公司业务的框架才是最佳方案。技术的发展永远没有尽头,所以咱们对技术也要保持空杯、保持饥饿、保持敬畏!