Service mesh时代,Dubbo架构该怎么跟进?
导读:6月21-23日,2019 GIAC全球互联网架构大会将于深圳举行。GIAC是面向架构师、技术负责人及高端技术从业人员的年度技术架构大会,是中国地区规模最大的技术会议之一。今年GIAC邀请到了众多布道师、明星讲师以及105位来自Google、微软、Oracle、eBay、百度、阿里、腾讯、商汤、图森、字节跳动、新浪、美团点评等公司专家出席。
在大会前夕,高可用架构采访了本届 GIAC Java分论坛讲师小马哥,就目前大家广泛关注的Dubbo/微服务相关的问题进行了访谈。
邓启明:小马哥您好,我是高可用架构的编辑邓启明,很高兴采访到您。请先简单介绍下自己。
小马哥:大家好,我是小马哥(mercyblitz),一名学习当爸爸的父亲,Java 劝退师 (https://www.douyu.com/mercyblitz),Apache Dubbo (https://dubbo.apache.org/) PMC、Spring Cloud Alibaba (https://github.com/spring-cloud-incubator/spring-cloud-alibaba)项目架构师,《Spring Boot 编程思想》的作者。目前主要负责集团中间件开源项目、微服务技术实施、架构衍进、基础设施构建等。
邓启明:简单介绍下你自己的从业经历?
小马哥:今年是我从业的第十二个年头,这些年一直在从事 Java 研发。首个雇主是一家外企公司,为其服务了三年。外企的工作相对轻松,拥有充分的自主时间提升技能,同时也有机会提升英语水平。期间通过了 SUN Java(SCJP、SCWCD、SCBCD)以及 Oracle OCA 等的认证,尽管这些证书并没有受到国内雇主的重视,不过对我后续的职业产生了深远的影响。当然,事情并不是总是积极正面,东西方文化差异,以及部分外籍同事的傲慢与偏见着实让本人对西方的技术和文化重新开始审视。既然无法改变,那么离开并继续深造或许是必然的选择,希望有一天能够通过共同的努力,让世界看到中华的进步。于是,我的第一份工作就在 2010 年 10 月 1 号画上了句点。迎接我的是第二份工作,至今也快九个年头。这几年,我经历了很多、学到了很多,也成长了很多,岂能尽如人意,但求无愧我心。不可否认的是,儒家思想对我的影响最为深刻,它让我学会独立、理性以及辩证的思考,培养我处变不惊的人生态度,直接或间接地提升了专业素质。经过数年的沉寂,我也明确了自己的方向,辗转投入开源社区的建设。不过,纵使浑身是铁能打几根钉,开源社区的发展需要更多的能人参与,知之者不如好之者,好之者不如乐之者。然而现实的情况又有些残酷,不少的年轻人在经济的压力下,逐渐失去对技术的追求。于是从 2016 年开始,我便尝试做一些技术分享,希望能够帮助到部分年轻从业人员,使他们对技术产生兴趣。随后,我又着手编写《Spring Boot 编程思想》,希望读者能够理解规范和基础的重要性,如果读者从中能够培养自己系统化的知识体系或者思维方式,那就善莫大焉了。我也时常鼓励更多的小伙伴多多分享,无论是免费,还是收费。同时,注重知识产权的保护,树立良好的生态环境。当然,我的第二份职业尚未告一段落,或许等它结束之际,方可“盖棺定论“。总之,但行好事,莫问前程。
邓启明:请介绍下 Dubbo 的现状?
小马哥:2019年5月16日,Apache 软件基金会董事会决议通过了 Apache Dubbo 的毕业申请,这意味着 Apache Dubbo 正式成为 Apache 的顶级项目。Apache Dubbo 项目在 Github 上的 star 数已超过 2.7 万,contributors 人数达到 202,Commiters 人数也升至 32 人,借此机会感谢所有关系和参与 Apache Dubbo 建设的小伙伴。目前,项目主要包含三大核心的分支,均在并行开发。其中,2.6.x 处于维护状态;2.7.x 聚焦云原生微服务方向,3.0.x 则指定未来标准和技术走向。简言之,Dubbo 不再是纯粹的 Java 服务治理 PRC 框架,已经逐渐成为多语种 Cloud Native 基础设施的中坚力量。
邓启明:Dubbo 开源以来,代码贡献者中阿里本身的开发者占绝大多数,这是否意味着来自阿里的需求会起主导作用?在后续的发展过程中,计划如何引入阿里之外的开发者?
小马哥:尽管目前 Apache Dubbo 代码贡献者主要来自于阿里的开发人员,不过这个比重正在迅速地变小,一方面说明 Dubbo 用户人数在逐渐变大,专业程度在不断地变深,同时,也说明有意主导并且贡献的小伙伴越来越活跃。这无论对社区的发展,还是从业人员的职业技能均有裨益。因此,需求的来源不再已阿里为绝对主导,社区共建和共制的发展模式已成事实。
邓启明:在未来一年,Dubbo的新特性路线图可以简单介绍下吗?
小马哥:由于 Dubbo 2.6.x 处于维护状态,不会新增明显的功能特性。
本年度主要的发力点在 Dubbo 2.7 这个版本上,该版本致力于 Cloud Native 以及微服务领域,大致的路线计划为:
* 2.7.2 - Metrics、etcd 元数据、nacos 配置与元数据以及 2.6 兼容
* 2.7.3 - Cloud Native 注册机制、服务自省以及 Dubbo Proxy
* 2.7.4 - K8s 原生支持(服务发现、元数据存储和配置推送)、Dubbo GO 以及 gRPC 集成
* 2.7.5 - 服务治理规则支持 Pilot CRD
* 2.7.6 - 控制面 xDS API 对接
Dubbo 3.0.0 M1 版本的核心特性围绕在 RSocket、Reactive 以及异步化上的支持。 M2 版本计划将在 8 月发布,主要提供对 HTTP/2 的支持和性能调优。接下来的 M3 版本将通过 HTTP/2 支持 gPRC 以及 Rocket 通讯协议。3.0.0 正式的发布将安排在 2020 年的 2 月。
邓启明:Spring Cloud 和 Dubbo 在微服务方面的优劣分别是什么?
小马哥:在 Java 生态中,Spring Cloud 和 Dubbo 都是微服务框架。前者被业界常作为 Java 微服务的首选框架,而后者有时被错误地解读为服务治理的 RPC 框架。实际上,两者在微服务架构中并没有本质的差异,均是分布式应用服务治理的框架。
在开发体验方面,Spring Cloud 开箱即用的组件让人印象深刻。在 API 抽象和设计方面,流淌着 Spring 家族血液的 Spring Cloud 延续了父辈的荣耀。由此观之,Dubbo 与其存在差距。
然而随着实践的不断深入,Spring Cloud 功能的稳定性以及版本的兼容性等问题较为突出。当应用集群达到一定规模时,其分布式经验上的短板也随之暴露,尤其是 Spring Cloud Netflix 套件,比如 Eureka 与 Ribbon 之间的 90 秒延迟会影响服务调用的成功率,以及负载均衡算法缺少权重无法帮助 JVM 预热。简言之,在服务治理方面,Spring Cloud 相较于 Dubbo 而言,并不算太成熟。如果大家有兴趣了解更多的话,可参考「小马哥技术周报」 (https://github.com/mercyblitz/tech-weekly)。
总之,Spring Cloud 和 Dubbo 各有特色,过度地关注彼此优劣并不可取。为此,Spring Cloud Alibaba 项目综合两家之长,提供了一套名为 Dubbo Spring Cloud 的整容实现,使得 Dubbo 与 Spring Cloud 不再是互斥性选项。
邓启明:Dubbo在成为Apache顶级项目的过程中,背后有哪些不为人知的故事?
小马哥:Dubbo 在 Apache 从孵化到毕业,期间的确有太多不为人知的故事,这里我简单地介绍一下其中孵化过程:
* 筹备期(2017.12-2018.2):最主要的工作是准备进入孵化器相关的材料,比如寻找合适的导师,编写加入孵化器的提案等。
* 初始期(2018.2-2018.5):主要完成的工作主要是完成知识产权的清理,邮件列表的创建,代码迁移等工作。
* 首次 Release:Apache孵化项目第一个重要的里程碑,第一次Release非常关键,除了确保功能的稳定以外,最重要的就是需要确保引入的代码的许可证符合Apache的政策,Apache对于许可证有着明确的规定。
* 社区发展(Community Building):也是作为一个Apache项目非常看重的一环。最不愿意看到的就是一家公司独大,控制整个项目,对于Dubbo来说,经过这么多年的发展,在国内已经具备了一定的渗透率,有了不少用户,但是他们就像花粉一样散落在各个角落里面,需要做的事情就是把他们都聚集起来。
邓启明:Service Mesh 时代,需要什么样的微服务框架?
小马哥:哈哈,需要 Dubbo 这样的框架(玩笑)。首先,个人并不是 Service Mesh 方面的专家,就目前所得到掌握的信息,Service Mesh 并不算成熟的技术,换言之,目前还不是 Service Mesh 的时代,甚至我听到不少的朋友由于性能和稳定性方面的原因,从该架构中退化,这也是 Dubbo 在 Service Mesh 方面的衍进相对缓慢的原因之一。当然,技术的发展总会是在掌声伴随着嘘声中前进,因此,个人对于 Service Mesh 的看法是谨慎乐观的。
邓启明:对于公司内部定制Dubbo而言,你有什么建议吗?
小马哥:流水不腐户枢不蠹,我希望这些公司能够积极参与 Dubbo 社区的共建,或许这些定制化的场景也可以服务其他场景。大家互通有无,实现共同进步。
邓启明:对于初级开发者而言,学习Dubbo应该如何入手?对于资深开发者而言,怎样研究Dubbo的源代码更加高效?
小马哥:对于初级开发者,我的建议是首先从 Apache Dubbo 官网(https://dubbo.apache.org (http://dubbo.apache.org/))学习《用户文档》,初步了解了 Dubbo 架构和特性后,再结合 Dubbo 官方样例(https://github.com/apache/dubbo-samples)全面掌握 Dubbo 功能和最佳实践。最后,参考官方博客(http://dubbo.apache.org/zh-cn/blog/index.html),深度理解 Dubbo。
对于资深开发者,尤其是那些致力于贡献的小伙伴,我建议参考《开发者文档》,掌握 Dubbo 设计和实现,并且结合 Dubbo 的源码巩固学习,最好直接贡献代码(在 GitHub Pull Request),战胜心中一切的畏惧。如果仍不满足于此,强烈推荐参考 Apache Dubbo PMC 商宗海(花名:诣极)编写书籍 - 《深入理解 Apache Dubbo 与实战》,从中本人也受益匪浅,建议小伙们入手。
邓启明:作为Dubbo的开发者,你最喜欢的Java(Java8以后)特性是什么?你最希望加入的Java特性是什么?
小马哥:Java 8 是 Dubbo 2.7 默认的语言级别,其中 Lambda 表达式以及 Stream API 被广泛地使用。除此之外,本人同样偏好使用 CompletableFuture 作为并行编程的 API。我最希望 Java 增加 JVM 级别的协程支持。
邓启明:你作为讲师参加GIAC,对本次GIAC大会有何寄语?
小马哥:非常感谢 GIAC 的主办方给本人这次机会分享 Dubbo 相关的的议程,这也是我本人第二次在 GIAC 分享该主题了。我衷心地祝福 GIAC 影响力越做越大,希望能够走出国门,成为具有国际化影响力的技术组织,向世界传播技术和力量。
本届GIAC Java专场/微服务/Service Mesh/Cloud Native的精彩议题如下: