写点什么

Apache Dubbo Roadmap 2019

  • 2019-09-22
  • 本文字数:4336 字

    阅读完需:约 14 分钟

Apache Dubbo Roadmap 2019


Dubbo 是一个分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册、自动发现等高效服务治理方案。它是 Apache 第五个国人主导的顶级项目,到 2019 年 5 月初,Dubbo 在 Github 上有 26683 个星,处于领先的位置,今年 5 月,Apache 软件基金会宣布 Dubbo 正式毕业,成为 Apache 的顶级项目,Dubbo 从 2017 年 7 月开始重新维护到现在 22 个月以来,发布了 17 个版本,最大的变化是修复了之前积攒的 bug,同时加入了很多新特性,第三个变化是重新成立了技术社区,贡献者的数量从原先的 41 到现在的 201,引入了 200 多个贡献者,Commiter 所在公司的数量从 4 家扩展到了 18 家,这些人代表了 Dubbo 社区的声音。



接下来介绍下 Dubbo Star 数的增长趋势,从图中可以看出 Dubbo 和其它的框架相比,自 2017 年 7 月阿里重启 Dubbo 开源,到目前为止 Github Star 数,Contributor 数都有了非常大的提升,Dubbo 增长速度很快,处于领先的位置,这主要是由于 Dubbo 整体的功能比较完善并且社区发展的比较红火。



接下来介绍下 Dubbo 的功能体系和生态体系。从功能体系来看目前微服务关注的点 Dubbo 基本都有涉及,图中蓝色的方块代表的是 Dubbo 重新维护之前就有的功能,绿色的方块代表的是 Dubbo 重新维护之后规划去做的,Dubbo 从它的核心的 Api,注册中心,集群的策略,再到它支持的协议和支持的序列化格式和传输,以及它的路由和负载均衡相关的策略都比较完善,之前是有一些功能,但是因为过了几年相比现在的流行的框架比较滞后,当时的设想就是把这些缺的功能给补全,甚至把阿里内部比较前沿的一些技术也融合进去,使 Dubbo 处于一种比较前沿的位置。


Dubbo 从一开始的定位就是一种典型的 RPC 的扩展,它不光支持各种 RPC 协议,比如两个系统之间的 RPC 通信你使用 Hessian 或者 Http 协议,同时你可以把这些对外暴露的服务注册到注册中心,指定协议调用时使用的序列化的格式,使用哪种格式的传输,如果有多台机器做集群,通过什么样的策略来选择哪些机器符合服务调用的条件,最终哪台机器会被负载均衡选中,来提供服务,这一整套的流程,Dubbo 提供了一个完备的框架,这些早在 10 年前就被设计 Dubbo 的程序员架构师考虑到,重新启动以后,我们将 Dubbo 和 Spring Boot 和 Spring Cloud 进行了深度的融合,把 Sping Cloud 里面一些极佳的特性和好的工具也会融合到 Dubbo 里,另外一个方面就是响应式编程,Dubbo 重启以后对之前支持的不好的异步化的 Api 进行重新梳理和设计,我们就可以使用异步化的 Api 来处理生产和消费的问题,同时在进一步的基础上我们积极拥抱了 RSocket,通过 RScocket 可以很自然地做到响应式的编程模型,性能高效,这会是 3.0 里比较大的一个特性,最后一个方面是 FluentApi,这个主要是考虑到易用性。Dubbo 在注册方面加了很多功能,拥抱 K8s,这是目前微服务鼓励原生做 Service Mesh 方面的基础设施去做的工作。集群方面,不仅支持常规方面的路由,也支持打 Tag 的方式,对集群内部的机器打标签来进行灰度,同时也支持柔性和反压的特性,集群的机器可以根据自身的负载能力动态做出反馈,实现流量权重的动态分配,集群会更具有弹性和柔性,在这个基础上,我们做了更多集群高可用和稳定性相关的工作。协议方面重启以后,除了支持 Rest 协议,同时也包含了 JsonRpc 协议,它可以看做是类似 WebSerivce 的 Rpc 调用,具有简单和跨平台的优点,RSocket 会在 3.0,在序列化方面,加入了 FST,它比较精简,序列化以后的数据量减小到原来的 1/10,还有一个配置协议,是谷歌 2016 年提出来的,底层基于 UDP,但是在 UDP 的基础上封装了可靠性和安全性,这个协议我们觉得未来有很大的发展趋势,这些是目前的扩展和当时规划的事情。



从图中可以看到,当时规划的事情,黑白框表示的是都已经完成的,剩下的是目正在做的,以上是目前的一个时间点看到的 Dubbo 的一些功能组件。



接下来我们看一下 Dubbo 目前的一个生态,生态这方面最主要的讲的是 Dubbo 方面的多语言支持,Dubbo 和 Sping Cloud 原生的 Rest 协议相比,差异化在于大家一直认为 Dubbo 只支持 Java,而 Sping Cloud 基于 Rest 可以在不同的异构的系统里使用,所以 Dubbo 为了适配 Spring Cloud 的这个功能,为了后面更好的拥抱云原生,Service Mesh 这一层,做了多语言的接入,为了支持跨语言 Go,Js 主要是 Node Js,Python 等的接入,这些协议都可以通过代理或者 SideCar 的方式来进行接入调用 Dubbo 的服务,然后服务发现和其它的管理相对应的基础设施在整套的核心体系的外围提供基础的支持。



实际上今天为止,Js 和 Go 的已经比较完善了,各种外围的配套工具,像服务的发现和配置,新的管理控制平台,各种测试的支持和 Trace 跟踪是由 Spring Cloud 团队的的一个同事做的适配,这是 Dubbo 目前整体的一个生态,可以看出 Dubbo 在微服务里配套还是比较齐全的。其实对微服务来说最大的问题不是技术问题,因为技术的问题发展的已经很完善了,我们知道把一个系统引入微服务以后,拆成粒度比较小的系统有很多好处,比如每个系统的开发和维护成本会变低,因为系统变得简单了,但是更大的问题也出现了,比如说把一个很复杂的业务系统拆成 20 个小系统,这 20 个小系统都需要单独的做测试,部署,维护,当系统出了问题,需要对 20 个系统去排查问题,这些对自动化测试,自动化运维,全链路跟踪,监控做提出了非常高的要求,这就对整个研发团队的技术成熟度提出了一定要求,只有当测试,运维,业务方面的监控,自动化的 Trace 做的比较完善时,容器化的改造完成以后,再去做服务化会比较合理。微服务和单体在软件设计里面有两条曲线,叫成熟度的曲线,当你的团队规模很小的时候,单体的成本要比微服务的成本低很多,但是随着你的团队规模的增大,微服务的成本虽然起点很高,但是它的复杂度是比较平稳的,不会增加很多,比如你有 50 个开发人员和 500 个开发人员,你使用微服务的方式在保持业务的复杂度和质量的情况下是可以往前扩展的,但是单体的复杂度和成本会随着业务的复杂度逐渐递增,中间有个交叉点,这个交叉点和团队规模,业务复杂度和你的技术成熟度这几个选项有关系,超过这个交叉点就需要进行微服务改造,超不过这个点业也许单体是更好的选择。



再看一下整个 Dubbo 在 2019 年需要做哪些事情,在 5 月中旬 Apache 已经毕业了,6 月份发布了 2.6.7 的版本,再往下基本上每个月发布一个版本,3.0 的版本计划在 2020 年 2 月份推出,目前维护的主流的版本是 2.7,现在 Dubbo 为了维护社群的生态,每个月会在一个城市举办技术沙龙。



Dubbo 2.7 是维护的主流的版本,特别是新注册的机制和与 k8s 的配合都会在陆续的两个月推出来,同时计划在 Q3 的时候会进一步把 k8s 完善掉,把 Dubbo 的 Go 语言的版本发布出来,现在这一块很多公司已经在用,但是没有合并大 Dubbo 的主干分支上,还在单独的一个分支上,但是已经比较成熟,Q4 的时候主要去支持下 Service Mesh,包括在 2020 年的 Q1 的时候主要去拥抱下云原生和 Service Mesh 的浪潮。



Dubbo 3.0 的路线图更加明确,一方面会继续拥抱云原生,同时会把响应式和异步化做好,把对 Rx 的支持做好, 同时我们一直在设想,做另外一件事情,响应式微服务这个概念非常火,我们知道微服务架构不管外部系统还是内部系统都走的 Rest,对外提供 Rest 是因为容易接入好管理,但是我们知道走 Rest,Http,Json 不是一种效率很高的调用方式,所以在内部应该会有更易用,更高效的方式去管理,去调用,所以这个是现在提响应式微服务架构在思考和尝试的事情。比如说我们也尝试另外一套技术栈,叫 Vert.X,Vert.X 对外提供 Rest 服务,它对外提供 Rest 调用,内部是一种 EventBus,内部所有的节点通讯是不走 RPC 调用的,类似 actor 模型,一个节点可以直接通过地址向另一个节点发消息,只要在内部一个大的集群内,这样一种方式要远远比走 RPC 调用更高效,而且这种异步的处理方式可以使系统不管存储量还是延迟降低很多,这是后面我们需要考虑的重点因素,好多的东西都会围绕这个来做。



最后两块我们看下整个的部署模式的改造,一块是和 Spring Cloud 结合,另一块是和 Service Mesh 相结合,从当前的部署模式可以看到,Dubbo 的 Client 和 Server 分别去注册和订阅它的注册中心,然后调用的时候通过一个代理和 Dubbo 的 Server 去通讯,然后非 Dubbo 的情况下,会不走 Dubbo 的注册和发现机制,但是一样是可以调用的,希望在未来可以和 Sping Cloud 的技术栈打通,所有的调用都是直连的。



另外一个方面主要是与 Service Mesh 的结合,主要是利用 K8s 的基础的元数据的管理能力和服务发现能力,所有的 Service Mesh 其实就是,不管是使用 Dubbo 还是 Spring Cloud 就会发现我们在我们的程序中会有很多控制路由,控制我们网络流量的流控,比如做我们线程调用的管控和调用速度的管控,和系统 load 负载的管控,这些和业务都没有关系,我们用的中间件可以把这些从业务复杂度中抽离出来,下沉,但是现在负责业务处理的和负责策略处理的在一个进程里,Servie Mesh 的想法是把这些策略的东西向下沉,沉到更下一部的基础设施层,就跟我们业务本身的进程没有关系,业务的进程只需要处理业务本身就可以了,这样的话,下面处理这些策略限流,流控管理,跟踪,服务发现,元数据,把这些东西抽象出来,就是 Service Mesh ,它贯穿在提供服务能力的各个节点上,相互之间可以通讯,这样的话就组成网格,所以就叫做 Mesh,如果 Service Mesh 的东西发展的非常好,我们微服务业务层就会做的很薄,开发人员只需要专注于自己的业务,提供自己的服务,消费自己的服务,而不用关心自己的服务在哪里,下沉的 Mesh 层都帮忙给处理掉了。



最后是 Dubbo 在 ISTIO 上的部署,除了部署在 K8s 上,还可以部署在 ISTIO 上,其实都是类似的方式,这些都是 Dubbo 未来要做的事情。


作者介绍


秦金卫 ( KimmKing ) ,现火币集团研发中心高级技术总监、Apache Dubbo PMC ,前阿里架构师/某商业银行北京研发中心负责人,阿里云 MVP 、TGO 鲲鹏会会员。关注于互联网,电商,金融,支付,区块链等领域,熟悉海量并发低延迟交易系统的设计实现,10 多年研发管理和架构经验,对于中间件、SOA 、微服务,热爱各种开源技术和分享布道,活跃于 Dubbo、Fastjson、ActiveMQ 等多个开源社区。《 微服务架构实战:基于 Dubbo、Spring Cloud 和 Service Mesh 》作者之一。


个人博客:


http://kimmking.github.io


本文来自 DataFun 社区


原文链接


https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247493496&idx=2&sn=b746895ce8f0cc971ef254e5047b2ff3&chksm=fbd75514cca0dc0215e66ce5eb506c18ce5194234387fac69353f985ca1041f6159b504fb840&scene=27#wechat_redirect


2019-09-22 08:002904

评论

发布
暂无评论
发现更多内容

走得通,看得见!你的交通“好帮手”

天翼云开发者社区

云计算 大数据 AI

开源星「001 号」落地 FlyFish,欢迎登陆赢神秘大礼包!

云智慧AIOps社区

大前端 低代码 开源项目 数据可视化 大屏可视化

视频聊天源码——一对一直播如何提高直播质量?

开源直播系统源码

软件开发 直播系统源码 开源源码 语音聊天 视频聊天源码

2022年中国第三方证券APP创新专题分析

易观分析

App 金融 证券

艺术与科技的狂欢,云端XR支撑阿那亚2022砂之盒沉浸艺术季

阿里云弹性计算

vr 视觉计算 云XR平台 沉浸式体验 GPU实例

架构实战营第九模块作业-毕业项目

Geek_53787a

新思科技推动产业革新 为智能网联车系好“安全带”

InfoQ_434670063458

软件 车联网 新思科技

【活动报名】8月13日杭州站-开源遇上大数据

亚马逊云科技 (Amazon Web Services)

大数据 开源

融云 x N 世界:构建无限用户实时交互的「元宇宙会场」

融云 RongCloud

isc 元宇宙

[ Kitex 源码解读 ] Kitex 请求重试的分类及实现原理

baiyutang

Go 微服务架构 云原生 kitex CloudWeGo

体验远超Hue,这才是技术人员最喜欢的SQL工具

雨果

sql hue DaaS数据即服务

【Python】:如何利用Python实现文件操作

翼同学

Python 编程语言 文件操作 8月日更 入门学习

Python零基础入门的第一天——开发环境的搭建

北极的三哈

学习 后端 开发语言 Python.

为什么我要迁移 SpringBoot 到函数计算

阿里巴巴云原生

阿里云 云原生 springboot 函数计算

九章云极DataCanvas APS机器学习平台获得中国信通院“领先级”评级

九章云极DataCanvas

人工智能 机器学习 大数据 数据分析 数据智能

SpringBatch入门

五毛

sping ETL

现在,怎么挑选舞台租赁LED显示屏?

Dylan

LED LED显示屏

华为云全流程护航《流浪方舟》破竹首发,打造口碑爆款

华为云开发者联盟

云计算 后端 华为云 流浪方舟

【超级账本开发者系列】专访——肖慧 : 不忘初心,方得始终

旺链科技

区块链 技术 超级账本

开源一夏 | 使用 HTML、CSS 和 JS 制作一个中国象棋

海拥(haiyong.site)

开源 前端 8月月更

【Python】:如何处理异常报错?

翼同学

Python 编程语言 异常处理 8月月更 入门学习

Substrate 源码更新导读八月第1周: 新版事务化存储层启用默认模式, Polkadot v0.9.27发布

彭亚伦

Substrate polkadot 波卡

Python语言基本语法元素

北极的三哈

Python 学习 开发语言

如何通过 open-local 玩转容器本地存储? | 龙蜥技术

OpenAnolis小助手

开源 云原生 分布式存储 龙蜥技术 open-local

用Python自动生成 图文并茂的数据分析 报告

程序员晚枫

Python pip Office 自动化办公

看得见风和日丽,看不见风起“云”涌

天翼云开发者社区

云计算 大数据

43%非常看好TypeScript…解读“2022前端开发者现状报告”

华为云开发者联盟

typescript 开发者 前端

uniapp电影购票选座系统源码

清风

源码 计算机毕业设计

crm系统哪家好?好用的crm管理系统推荐

优秀

CRM系统

【燃】是时候展现真正的实力了!一文看懂2022华为开发者大赛技术亮点

华为云开发者联盟

云计算 华为云 开发者大赛

怎样选择一个好的SaaS知识库工具?

Geek_da0866

Apache Dubbo Roadmap 2019_文化 & 方法_DataFunTalk_InfoQ精选文章