共计 5664 个字符,预计需要花费 15 分钟才能阅读完成。
作者 | 郭浩(项升)阿里巴巴经济体 RPC 框架负责人
导读:本文整顿自作者于 2020 年云原生微服务大会上的分享《Dubbo3.0 – 开启下一代云原生微服务》,次要介绍了对于思考 rpc 框架层面,性能演进的方向是什么?以及怎么更好地反对云上的多语言开发的新思考。
关注阿里巴巴云原生公众号,后盾回复【818】即可获取直播回看地址和大会 PPT 合集。
看到这个题目,大家可能会有几个问题,比方,什么是云原生微服务?Dubbo3.0 是什么?和目前的 Dubbo2.0 有什么区别?用了 Dubbo3.0 会带来哪些业务视角的益处?前面的分享会对这些问题逐个解答。
这次分享分为以下几个环节:
- Dubbo 的演进历史
- Dubbo 的开源现状
- 定义 Dubbo3.0
- 分享 Dubbo 3.0 目前获得的一些成绩
思考到有些同学对 Dubbo 可能不太熟悉,在介绍背景之前,我先简略介绍一下 Dubbo 是什么。简略地说,Dubbo 是基于 Java 的 RPC 框架。一个 RPC 框架至多由数据格式、传输协定和连贯治理组成,这三点也是形成外围。Dubbo 可能被广泛应用次要有两个起因:
- 一方面是较好的插件机制撑持了多种扩大,这些扩大在不同业务场景和基础架构中能别离施展最大劣势;
- 另一方面不同于一般的 RPC 框架,Dubbo 的服务治理性能让其在易用性方面怀才不遇,比方路由规定可能反对灵活多样的运行时动静路由,能够基于此性能实现灰度、ABTest、流量回放等性能。
Dubbo 倒退历程
简略介绍完 Dubbo,当初让咱们一起回顾一下 Dubbo 的历史。
在 2008 年,Dubbo 作为阿里巴巴外部 SOA 解决方案横空出世。业务的急速倒退带来了强烈的服务化需要,只用了两年的工夫 dubbo 就在外部大面积落地,日均调用量超过了 30 亿。通过落地过程中一直的打磨,Dubbo 无论是在性能上还是在扩展性方面,都成为了过后遥遥领先的 RPC 框架。为了更好地回馈开发用户和其余有服务化需要的公司,在 2011 年 Dubbo 抉择了开源,并公布了 2.0.7 版本作为开源的第一个正式版本。
开源后 Dubbo 蓬勃发展,社区沉闷,取得了开发者的统一好评。2017 年 9 月,阿里巴巴发表重启 dubbo 的开源保护,重启开源后,解决了积攒很久的 pull request 和 Issue,以及之前一些公司不得不开始本人保护 dubbo 的公有分支也逐渐合入了骨干。同时,与社区进一步的互动,也会激发 dubbo 团队对产品的灵感。
目前 Dubbo 团队就是阿里巴巴外部负责服务框架的团队,咱们在大流量、大规模集群、服务治理畛域有着丰盛的实际,这些教训曾经在有序地回馈给社区。重启开源后公布的 2.7.x 版本带了了很多新的个性,比方 JDK8 反对,残缺的异步反对,以及元数据的精简和形象。在往年,咱们启动了另外一个新的历程碑 —— Dubbo3.0,这也会率领 Dubbo 走向下一个阶段,即云原生微服务。
Dubbo 开源现状
简略介绍完 Dubbo 的历史,下一步咱们来走进 Dubbo 的开源现状。
Dubbo 目前有 57 位 committer 和 379 位 contributor。依据 X-lab 凋谢实验室最新公布的《2020 年微服务畛域开源数字化报告》,Dubbo 的开源活跃度全球排名 693,在微服务框架中排名第五。整个社区蓬勃发展,来自内部的代码奉献量曾经超过来自阿里员工的奉献量。也正是因为有这么沉闷的社区,Dubbo 目前反对 6 种语言和 30 多个生态我的项目。
数据起源《2020 年微服务畛域开源数字化报告》,阿里巴巴云原生公众号后盾回复关键词“微服务报告”获取报告全文。
作为国内 RPC 框架的领跑者,Dubbo 也在被 Spring Cloud Sleuth、Zipkin、Envoy、Mosn 等标杆我的项目官网集成。Dubbo-go 子社区是社区演进的另一个摸索和优良实际。Dubbo-go 子社区由官网疏导,齐全社区化运作和开发,前不久公布的 Dubbo-go 1.5 版本在性能上曾经齐全对齐 Dubbo-java 2.7 版本,后续的 Dubbo3.0 也会蕴含 Dubbo-go 3.0,让咱们刮目相待。
从数据上看,Dubbo 目前有 33k stars 和 21k forks,别离位于 github java 我的项目前十和前三,用户的认可带来了社区的沉闷,而沉闷的社区则会以高频率的版本更新带来更多新的、有用的个性来彰显其旺盛的生机。目前曾经注销的 Dubbo 企业用户超过了 200 个,其中有 30 多个企业成为了 Dubbo 的生态合作伙伴。
有了这些公司的帮忙,Dubbo 在设计、开发、测试、灰度上线的整个流程都有了更强有力的保障。让应用了 Dubbo 的利用跑的更快更稳固始终是 Dubbo 社区不变的谋求。
从性能上看,Dubbo 3.0 实现后的性能将涵盖从开发人员间接接触的 API 层到底层传输的残缺链路。
API 层将包含基于 IDL 的残缺数据交换格局买通,这会带来两方面的益处:
- 一是对立的 IDL 模型能够生成对立的 client stub 和 server stub,这些 stub 能间接进行非反射调用,会在性能上有很大的晋升;
- 第二点是对异步和 streaming 的原生反对可能给用户更多的选项,依据不同的业务场景抉择更不便的用法。
第二层是对于注册核心、元数据中心和配置核心的扩大。注册核心和配置核心根本反对了所有业界支流的实现,元数据中心是 Dubbo 2.7 新形象出的组件,负责元数据的存取。这里的元数据包含服务的调用配置,如超时工夫,序列化形式,协定等,以及对服务办法签名的形象,不便 Dubbo 实现跨框架和跨语言调用。
集群层 是 Dubbo 的一个次要亮点,除了反对各种重试策略外,Dubbo 也提供了各种场景下的负载均衡器,比方随机和权重。值得一提的是,Dubbo3.0 将带来 pull-based 的自适应负载平衡,这将显著晋升分布式集群的性能和效率。
再下一层是 协定层,协定层是 RPC 框架的内核局部,个别分为应用层协定和传输层协定。应用层协定 Dubbo3.0 反对 GRPC / Redis / REST 等支流协定以及 Dubbo 原生的 Dubbo2.0 协定。传输层反对 HTTP / HTTP2 和一些自定义的协定如 RSOCKET。序列化方面,Dubbo 除了反对 hessian、Java 外,还反对 protobuf,这对于性能和跨语言都有着微小的意义。
看完了 Dubbo 3.0-java 的性能图,咱们再来看一下 Dubbo-go 的性能图。能够看到,从分层到实现,Dubbo-go 曾经根本和 JAVA 对齐,前面的 3.0 版本也会和 JAVA 齐头并进,独特迈向云原生。
Dubbo3.0- 下一代云原生微服务
介绍完了 Dubbo 的现状,上面咱们进入明天的主题:Dubbo3.0 - 下一代云原生微服务。
一个新架构或新技术的呈现肯定会随同特定的发展趋势。
目前咱们能够看到的几个趋势是 K8s 成为资源调度的事实标准、Mesh 化成为支流以及规模上的急速增长。这些趋势的存在对 Dubbo 提出了更高的要求:
- 首先,用户如何在 K8s 上更不便的部署和调用 Dubbo 服务是必须要解决的问题,要解决这个问题,对立的协定和数据交换格局是必须前提;
- 其次,Mesh 化的风行带来了多元化问题,即原生 Dubbo 和 Mesh 化 Dubbo 如何共存,多语言的场景如何反对;
- 第三点,规模的增长会给整个 Dubbo 架构带来更大的挑战,无论是注册核心等组件,还是客户端,都会有更多的数据和调用量。如何在保持稳定的前提下,提供更高效的服务是 Dubbo 演进的重中之重。
这些云原生时代带来的挑战,促成了 Dubbo 的下一代定义。新协定、K8s 基础架构反对、多语言反对和规模化反对四个子项目独特组成了 Dubbo3.0。上面咱们将走进 Dubbo3.0,看看具体有哪些新个性。
1. 下一代 RPC 协定
首先咱们从协定开始。
大家能够看到,这是 Dubbo2.0 的协定。从性能上看,Dubbo2.0 提供了 RPC 的外围语义,包含协定头、标记位、申请 ID 以及申请 / 响应数据。在云原生时代,2.0 协定次要面临两个挑战:
- 一是生态不互通,用户很难间接了解二进制的协定;
- 第二是对 Mesh 等网关型组件不够敌对,须要残缺的解析协定能力获取到所须要的调用元数据,如一些 RPC 上下文,从性能到易用性方面都会面临挑战。
那么,在反对已有的性能和解决存在的问题的前提下,下一代的协定须要有哪些个性呢?
- 首先,协定须要解决跨语言互通的问题,传统的多语言多 SDK 模式和 Mesh 化跨语言模式都须要一种更通用易扩大的数据传输格局;
- 其次,协定应该提供更欠缺的申请模型,除了 Request/Response 模型,还应该反对 Streaming 和 Bidirectional;
- 第三点,在性能上,新的协定应该保留 request Id 机制,以防止 HOL 带来的性能损耗;
- 最初,新协定应该易扩大,包含但不限于 Tracing/ Monitoring 等反对,也应该能被各层设施辨认,升高用户了解难度。
基于这些需要,HTTP2/protobuf 的组合是最合乎的。提到这两个,大家可能很容易想到 GRPC 协定。那新一代的协定和 GRPC 的关系是什么呢?
- 首先,Dubbo 新协定是基于 GRPC 扩大的协定,这也保障了在生态系统上新协定和 GRPC 是可能互通和共享的;
- 其次,在这个根底上,Dubbo 新协定将更原生地反对 Dubbo 的服务治理,提供更大的灵活性;
- 在序列化方面,因为目前大多数利用方还没有应用 Protobuf,所以新协定会在序列化方面给予足够的反对,平滑的适配现有序列化,不便迁徙到 Protobuf;
- 在申请模型上,新协定将原生反对 Reactive,这也是 GRPC 协定所不具备的。
2. 利用级注册发现
Dubbo3.0 第二个内容是利用级注册发现。
相熟 Dubbo 的同学都晓得,Dubbo 目前的注册发现都是接口级别的。也就是同一个利用公布的多个服务会在注册核心注册多份数据,这些数据彼此独立,不便进行服务化革新和接口迁徙。为什么要提出利用级注册发现呢?
次要有两个起因:
- 一是现有生态系统的互通,包含 Spring cloud 和 K8s 都是基于实例,也就是利用级别进行的注册发现,Dubbo 要成为连贯异构零碎最好用的 RPC 框架就须要反对实例粒度;
- 第二个起因是从规模上看,更大规模的增长会带来元数据的极速收缩,这会给注册核心和客户端带来更大的内存占用。依照现有数据分析,如果降级到利用级注册发现,以均匀公布 50 个服务的利用为例,将缩小 60% 的内存占用和注册核心数据。以公布超过 10k 接口的平台型利用为例,这些数据可升高 90%。
能够看到,利用级注册发现带来的优化是非常显著的。因为利用级注册发现目前曾经根本开发结束,上面咱们能够简略介绍下它的原理。
首先要解决的一个问题是如何保障平滑迁徙,用户基于接口的配置怎么映射到利用下来。
这里咱们形象出了元数据中心来治理接口到利用的映射以及利用级的元数据。在部署态,Dubbo 框架会主动上报这个关系到元数据中心。而运行态用户侧的配置和服务治理则通过这份映射关系从新将利用粒度映射到接口粒度。波及到最外围的局部——选址也是分为两局部,利用级选址和接口级选址同时存在,不便进行服务治理。
3. K8s 云原生反对
Dubbo3.0 第三个内容是 K8s 云原生反对。
这里次要包含两局部内容:
- 一是须要 对齐 K8s 的生命周期,可能让 Dubbo 服务原生的在 K8s 体系内注册和发现;
- 第二则是 对 Mesh 的反对。下面在协定那里咱们曾经讲到,新协定通过应用 HTTP2 进行 header / payload 拆散解决了网关须要解析残缺协定的问题。另外一个问题则是服务注册发现和治理,注册发现须要 Dubbo 可能在 Mesh 的 xDS 体系内作为数据面买通。治理则须要将原有的规定逐渐迁徙至基于 YAML 的剔除 IP 依赖的规定。最终的状态将是原生的 Dubbo 服务可能和基于 thin SDK 的 Dubbo + Mesh 完满互通和进行服务治理。
4. 柔性加强
Dubbo3.0 最初一部分是柔性加强。
柔性加强要解决的问题有两个:
- 一是在节点异样的状况下,分布式服务可能保持稳定,不呈现雪崩等问题;
- 二是对于大规模的利用,可能以最佳态运行,提供较高的吞吐量和性能。
从办法上看,Dubbo3.0 的柔性加强会以面向失败设计为理念,提供包含精准容量评估、自适应限流、自适应负载平衡的反对,自底向上的分步构建大规模牢靠利用。从繁多服务的视角看,服务是压不垮的,稳固的。
从分布式视角看,简单的拓扑不会带来性能的降落,分布式负载平衡可能以最优的形式动态分配流量,保障异构零碎可能依据运行时的精确服务容量正当调配申请,从而达到性能最优。
Dubbo3.0 路线图
介绍完了 Dubbo3.0 的次要内容,上面咱们来看一下 roadmap。
在接下来的 9 月份,利用级注册发现会同时在阿里巴巴外部和内部公司同时大规模落地。往年双十一前会交付云原生服务治理规定。到明年的 3 月份,开源侧的新协定反对性能根本齐备。明年的 6 月份,云原生 K8s 的反对和 Mesh 反对性能齐备,开始试点。柔性加强将在 2022 年的 3 月份全面落地,请刮目相待。
看了 roadmap,大家能够发现,Dubbo3.0 曾经是运行态。
首先,基于 Dubbo3.0 外围的 HSF3.0 在阿里巴巴外部大规模落地,内外对立的路线不仅仅是对 Dubbo 品质的必定,也是对社区用户的保障和回馈。
后续咱们会将外部的大规模高并发教训持续输入到 Dubbo 开源侧,也会以最高的品质来保障 Dubbo 的牢靠演进。Dubbo 3.0 的利用级注册发现性能也在外部和开源侧同时灰度试点。在协定侧,新协定曾经在阿里巴巴和蚂蚁的互通中失去广泛应用,外部实际的教训将更好的服务开源侧协定演进。
最初,欢送大家参加 dubbo 的社区,分享你们在实践中的教训,反馈碰到的问题,携手让 Dubbo 倒退得更好。
关注阿里巴巴云原生公众号,后盾回复【818】即可获取直播回看地址和大会 PPT 合集。
“阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术畛域、聚焦云原生风行技术趋势、云原生大规模的落地实际,做最懂云原生开发者的公众号。”