阿里重启维护 Dubbo 了

最近,开源社区发生了一件大事,那个曾经风靡国内 Java 开发者的开源 RPC 服务框架 —— Dubbo,低调宣布将重新得到官方维护与支持。

对于 Dubbo 框架,大部分 Java 开发者都不会感到陌生,它自诞生起就备受关注。

2011 年末,阿里巴巴在 GitHub 上开源了基于 Java 的分布式服务治理框架 Dubbo,之后它成为了国内该类开源项目的佼佼者,许多开发者对其表示青睐。同时,先后有不少公司在实践中基于 Dubbo 进行分布式系统架构,目前在 GitHub 上,它的 fork、star 数均已破万。

Dubbo 致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案,使得应用可通过高性能 RPC 实现服务的输出、输入功能和 Spring 框架无缝集成。Dubbo 包含远程通讯、集群容错和自动发现三个核心部分。

Dubbo 核心功能:

· 远程通讯,提供对多种基于长连接的 NIO 框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

· 集群容错,提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

· 自动发现,基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

Dubbo 架构:

dubbo 架构图

Dubbo发展史

发展到开源

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 和 Spring Cloud 进行对比,因为两者都是服务治理非常优秀的开源框架。

但事实上,这样对比是不够公平的,首先 Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用,流量分发、流量监控和熔断。而 Spring Cloud 诞生于微服务架构时代,考虑的是微服务治理的方方面面,另外由于依托了 Spirng、Spirng Boot 的优势之上,两个框架在开始目标就不一致,Dubbo 定位服务治理、Spirng Cloud 是一个生态。

因此可以大胆地判断,Dubbo 未来会在服务治理方面更为出色,而 Spring Cloud 在微服务治理上面无人能敌。

提到 Dubbo 的未来,不禁想问大家,你们知道 Dubbo 重启维护后的上一个版本是什么时候发布的吗?是 2014 年 10 月 30 号,距今整整将近 3 年,Dubbo 所依赖的 JDK、Spring、Zookeeper、Zkclient 等等不知道都更新了多少个版本。

因此 Dubbo 恢复更新的第一步就是适配所依赖的各组件版本,让 Dubbo 所依赖的基础环境不要太落伍,另外也修复了一些严重的 Bug。

事实上,从 9 月开始,Dubbo 三个月里连着发布了四个版本(2.5.4、2.5.5、2.5.6 和 2.5.7),我们看看更新了什么 ——

· 2.5.4:主要是解决 issues 和依赖升级

· 2.5.5:升级了依赖包版本 ;以问题反馈频率和影响面排定优先级,优先解决了几个反馈最多、影响较大的一些缺陷,包括优雅停机、异步调用等

· 2.5.6:优先级较高的几个 issue 修复,吸纳社区的优秀 PullRequest,新增 Netty4通信模块、线程堆栈dump特性

· 2.5.7:阶段性完成了社区累积 issue 的处理,同时开始满足社区反映的新需求

Dubbo Spring Boot 工程

Dubbo Apache Dubbo™ 是一款高性能Java RPC框架。 Spring Boot 应用场景的开发。同时也整合了 Spring Boot 特性:

自动装配 (比如: 注解驱动, 自动装配等).
Production-Ready (比如: 安全, 健康检查, 外部化配置等).

Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

快速开始可以通过访问:

http://start.dubbo.io/

关于升级新版本Dubbo

Dubbo 社区目前主力维护的有 2.6.x 和 2.7.x 两大版本,其中,

· 2.6.x 主要以 bugfix 和少量 enhancements 为主,因此能完全保证稳定性
· 2.7.x 作为社区的主要开发版本,得到持续更新并增加了大量新 feature 和优化,同时也带来了一些稳定性挑战

为方便 Dubbo 用户升级,社区在以下表格对 Dubbo 的各个版本进行了总结,包括主要功能、稳定性和兼容性等,从多个方面评估每个版本,以期能帮助用户完成升级评估;

但是考虑到目前大部分用户在使用的 dubbox(当当网维护的独立分支)是之前外部社区维护的项目,dubbox 分支在协议层面存在一些不兼容性改动,若新工程直接采用Dubbo目前主力维护的分支版本,则不需要考虑兼容问题,如果是对此前的旧项目进行升级,可能存在大量的兼容适配工作,是一个不小的工作量;

关于Dubbo的未来

业内表示阿里内部现在基本上没有在使用 Dubbo,而是用了 Dubbo 之后开发的第三代 RPC 服务框架 HSF(High-speed Service Framework),那现在还将 Dubbo 重启维护,大家不免疑惑,Dubbo方面相关负责人表示:

Dubbo2 作为一款优秀的开源产品,由于面向的用户群体非常广泛,这就决定了它的设计原则强调扩展性、使用轻量、以及对开源外围系统和协议的适配。通过开源社区的建议,目前 Dubbo 已经具备了一些特有功能,例如对 REST 的支持和对 Spring Boot 的集成。

得注意的是,目前负责 Dubbo 的团队和内部负责 HSF 的是同一个团队,在聆听外部用户反馈之余,我们也会把大规模领域里的服务运维经验反哺回 Dubbo 社区,形成良性循环,做到真正意义上的内外统一。

有关 Dubbo 项目今后的发展,还请密切关注 GitHub 上的 Release Notes(https://github.com/alibaba/dubbo/releases)以及 Dubbo 的云栖社区专栏。

相关网站和博文参考(持续更新中…):

Apache Dubbo 官网
Apache Dubbo 生态系统,构建产品级微服务
阿里重启维护 Dubbo 了 - InfoQ
阿里Dubbo疯狂更新,关Spring Cloud什么事? - ityouknow
Dubbo 各版本总结与升级建议
Dubbo Spring Boot 脚手架