2012 年,阿里巴巴在 GitHub 上开源了基于 Java 的分布式服务治理框架 Dubbo,之后它成为了国内该类开源项目的佼佼者,许多开发者对其表示青睐,同时,先后有不少公司在实践中基于 Dubbo 进行分布式系统架构。目前在 GitHub 上,它的 fork、star 数均已破万。
今年 9 月底,同为阿里开源的项目 RocketMQ 被 Apache 社区接纳为顶级项目;10 月中旬,OpenMessaging、ApsaraCache 等全球化开源项目在阿里云栖大会正式公布;同时,Dubbo 也被列入重点维护开源项目,期望继续保持快速发展的态势。
阿里这一系列开源项目的成绩,让人们看到了它对于开源这件事的重视,重启维护 Dubbo的背后,有什么样的思考呢?InfoQ 就此采访了 Dubbo 负责人、阿里巴巴中间件高级技术专家罗毅。
InfoQ:为什么重启维护?有哪些因素在驱动着?
罗毅:Dubbo 自开源以來,深受国内友商和开源爱好者的青睐,虽然一直陆续在维护,但是由于 Dubbo 用户群体庞大,日常维护根本无法完全满足社区的旺盛需求。随着集团内部技术水平的迅速发展,如今不仅能够保证集团及客户的系统高效运行,还能抽调更多精力将技术赋能给全社会。
开源就是阿里巴巴集团在技术层面赋能的重要领域。阿里巴巴中间件团队今后不仅要聆听社区的声音,及时修复问题,及时合并优秀的 pull request,还会力争将 Dubbo 打造成有国际影响力的 RPC 框架。
从集团层面看,阿里为国内甚至国际开源社区贡献了大量优秀开源项目,如大家熟知的 RocketMQ、JStorm、Fastjson、Dubbo、Weex 等。在今年的云栖大会上,阿里集团公开宣布了将加大技术投入、拥抱开源的发展策略。正是由于以上几个原因,阿里巴巴中间件团队决定 Dubbo 的下一步计划是持续发展,并走向国际化。
InfoQ:我们知道阿里内部现在基本上没有在使用 Dubbo,而是用了 Dubbo 之后开发的第三代 RPC 服务框架 HSF(High-speed Service Framework),那现在还将 Dubbo 重启维护,大家不免疑惑。
罗毅:Dubbo 和 HSF 都是阿里巴巴集团自研的 RPC 服务框架,在不同时期都很好的支持了集团业务的发展。目前,HSF2 主要服务于集团内部业务,而 Dubbo2 主要以开源的形式服务社会,它们之间的关系与 Google 内部使用的 Stubby 和开源的 gRPC 类似。
从功能及使用方式上来说,HSF2 和 Dubbo2 都是十分优秀的 RPC 框架,都能很好地满足搭建分布式服务化系统的诉求。内部坚持使用 HSF2 而不是开源版本的 Dubbo2 与业务属性和规模有关。
此外也出于以下几方面的考虑:内部统一技术框架、统一运维方面的诉求,应用迁移成本,内部服务注册发现、配置推送以及链路追踪等外围系统的集成度等。总的来说,HSF2 在服务治理、超大规模集群、多机房几个方面比 Dubbo2 更有优势,并且在使用层面保持了对 Dubbo2 的兼容性。
为什么我们还要重启 Dubbo 的维护呢?
道理和 Google 开源 gRPC 是一样的。开源不仅仅是赋能社会的方式,我们也可以通过社区反馈提升产品和技术能力。
Dubbo2 作为一款优秀的开源产品,由于面向的用户群体非常广泛,这就决定了它的设计原则强调扩展性、使用轻量、以及对开源外围系统和协议的适配。通过开源社区的建议,目前 Dubbo 已经具备了一些特有功能,例如对 REST 的支持和对 Spring Boot 的集成。
值得注意的是,目前负责 Dubbo 的团队和内部负责 HSF 的是同一个团队,在聆听外部用户反馈之余,我们也会把大规模领域里的服务运维经验反哺回 Dubbo 社区,形成良性循环,做到真正意义上的内外统一。
InfoQ:那这么多年过去了,现在 Dubbo 在同类型项目中还存在优势吗?
罗毅: Dubbo 目前在 GitHub 上有超过 12000 个 star 和超过 10000 的 fork 数,仍然是国内影响力最大的开源项目之一。这其中有两个重要因素,一个是 RPC 领域相对成熟,自 Dubbo 开源的第一天起,框架里已经融合了阿里巴巴服务化改造进程中沉淀下来的诸多宝贵经验。
其二是 Dubbo 设计上十分提倡可扩展性,在框架内置功能不能满足业务诉求甚至过时的情况下,用户可以选择自行扩展。这一点,从友商给我们提交来的 pull request 中可以明显感受到,优秀的框架设计本身就可以很好的支持用户千变万化的需求。
Dubbo 维护重启后,3 个月内连续发布 3 个维护版本,不仅修复了优雅停机、注解配置等一些框架缺陷,还新增了 Netty4 通信模块和线程堆栈 dump 特性等。在框架稳定性上已经有了大幅提升,今后 Dubbo 将持续保持快速迭代更新,以满足用户的各种需求。
InfoQ:如您所说,这个开源项目,很多代码贡献者和框架采用者其实提交了不少有意义的反馈,近期 Dubbo 官方一连给出的这三个版本更新,其中意义最大、大家最想看到的更新内容是什么呢?
罗毅: 的确,作为国内使用面最广的服务框架的代表,很多用户都贡献了在使用过程中发现的问题和建议。我们目前优先级最高的任务就是在其中遴选社区关注度最高的问题和建议优先给予支持,其中包括 issue 的修复、第三方依赖的升级、新技术新规范的适配、以及功能上的优化等。
已经发布的版本中我们筛选了社区反馈的框架缺陷、pull request 等,按照优先级顺序修复,保证框架的可用性和稳定性,并同时更新了主页 (http://dubbo.io/) 和文档 (https://www.gitbook.com/@dubbo)。最近即将发布的版本中完善了注解形式的配置、Docker 环境中部署的问题等几个社区呼声较高的需求。
目前团队最大的任务就是活跃社区,聆听用户的声音,已经发布的三个版本以及未来的几个维护版本都是围绕这个话题进行。
InfoQ:阿里对 Dubbo 接下来的发展有怎样的计划?能否给大家一个清晰的视图?
罗毅: 主力开发以阿里巴巴中间件团队为主,优先吸纳集团内部对 Dubbo 开源有热情的开发同学,同时积极与国内大量使用 Dubbo 框架的友商联系。一方面是合并大家的建议,对呼声最高的建议进行性能提升,另一方面是寻求共建开源项目的资源。总的来说,项目方面会以阿里内部专门的团队为主,并积极发展社区中的 committer。
在活跃社区的前提下,我们会继续在 Dubbo 框架现代化、国际化这两个大的方向上进行探索。现代化方面主要是考虑到目前微服务架构以及容器化日渐流行的大趋势,Dubbo 作为 RPC 框架如何很好地融入其中,成为其生态体系中不可或缺的一个组件。
这里就不得不提到目前的一些文章在谈到微服务的时候总是拿 Spring Cloud 和 Dubbo 来对比,需要强调的是 Dubbo 未来的定位并不是要成为一个微服务的全面解决方案,而是专注在 RPC 领域,成为微服务生态体系中的一个重要组件。至于大家关注的微服务化衍生出的服务治理需求,我们会在 Dubbo 积极适配开源解决方案,甚至启动独立的开源项目予以支持。
对于国际化方面的思考是虽然 Dubbo 在 GitHub 上非常受欢迎,但是受众主要来自国内各友商以及个人开发者,希望将来能够将用户拓展到全球,代表国人在 RPC 领域与 gRPC、Finagle 等竞争。
最后,感谢 InfoQ 对 Dubbo 开源项目的关注。有关 Dubbo 项目今后的发展,还请密切关注 GitHub 上的 Release Notes以及 Dubbo 的云栖社区专栏。