阿里集团业务驱动的升级 —— 聊一聊Dubbo 3.0 的演进思路

简介: 阿里云在 2020年底提出了“三位一体”理念,目标是希望将“自研技术”、“开源项目”、“商业产品”形成统一的技术体系,令技术的价值可以达到最大化。Dubbo 3.0 作为三位一体架构的首推方案,在集团内被寄予了厚望。它完美融合了内部 HSF 的特性,天然拥有高性能、高可用的核心能力,我们期望用它来解决内部落地问题,做到技术栈统一。本文将分享Dubbo 3.0的演进思路以及如何帮助用户享受云原生带来的技术红利。

作者 | 远云

三位一体

2020年底,阿里云提出了“三位一体”的理念,目标是希望将“自研技术”、“开源项目”、“商业产品”形成统一的技术体系,令技术的价值可以达到最大化。

1626079956599-66991174-5b04-4fa1-a246-7dc875e90b47.png

阿里集团内部的 HSF 框架在经历了多年双十一流量洪峰的考验后,锻炼出了高性能和高可用的核心竞争力。而对于 Dubbo,作为国内外最受欢迎的服务治理框架之一,它的开源亲和性就不用再多说了。

Dubbo 3.0 作为三位一体架构的首推方案,在集团内被寄予厚望。它完美融合了内部 HSF 的特性,天然拥有高性能、高可用的核心能力,我们期望用它来解决内部落地问题,做到技术栈统一。目前在考拉已经大规模落地,未来也会在众多核心场景进行落地,并承载 618、双十一等复杂的业务场景。

Dubbo 3.0 带来的好处

1626054949412-85d82e29-5b0c-4779-91d8-6f2a66a41b5c.png

在具体说明 Dubbo 3.0 的变化细节之前,先从两个方面说一说升级到了 Dubbo 3.0 能带来什么好处。

首先是,Dubbo 3.0 会着力提升大规模集群实践中的性能与稳定性,通过优化数据存储方式来降低单机资源损耗,并基于此保证超大规模集群的水平扩容的情况下集群的稳定性。同时,Dubbo 3.0 提出了柔性集群的概念,能够在异构体系下有效保证和提高全链路总体的可靠性和资源的利用率。

第二点是 Dubbo 3.0 代表着 Dubbo 全面拥抱云原生的里程碑。当前 Dubbo 在国内外有着基数巨大的用户群体,而随着云原生时代的到来,这些用户上云的需求越来越强烈。Dubbo 3.0 将提供一整套的解决方案、迁移路径与最佳实践,来帮助企业实现云原生转型,从而享受云原生带来的红利。

1、业务收益

1625927285744-7e7de6b1-70cd-425d-a678-ed1698750b47.png

那么站在业务应⽤的视角来看,如果升级到 Dubbo 3.0,能获得哪些具体的收益呢?

首先,在性能与资源利用率⽅面,Dubbo 3.0 能有效降低框架带来的额外资源消耗,从而⼤幅提升资源利用率。

从单机视⻆,Dubbo 3.0 能节省约 50% 的内存占⽤;从集群视角,Dubbo 3.0 能⽀持的集群实例规模以百万计,为未来更大规模的业务扩容打下基础;而 Dubbo 3.0 对 Reactive Stream 通信模型的支持,在⼀些业务场景下能带来整体吞吐量的⼤幅提升。

其次,Dubbo 3.0 给业务架构升级带来了更多的可能性。最直观的就是通信协议的升级,给业务架构带来了更多选择。

Dubbo 原来的协议其实在⼀定程度上束缚了微服务接⼊⽅式。举个例子,移动端、前端业务要接入 Dubbo 的后端服务,需要经过网关层的协议转换;再比如,Dubbo 只⽀持 request-response 模式的通信,这使得⼀些需要流式传输或反向通信的场景⽆法得到很好的支持。

最后,Dubbo 3.0 给业务侧的云原生升级带来了整体的解决方案。不论是底层基础设施升级带来的被动变化,还是业务为解决痛点问题进行的主动升级,当业务升级到云原生,Dubbo 3.0 通过给出云原生解决方案,可以帮助业务产品快速接入云原生。

Dubbo 3.0 概览

1625927293341-c52a1407-34fc-4bba-a5a8-d19bf5c21471.png

在明确了升级到 Dubbo 3.0 能够带来的收益之后,来看看 Dubbo 3.0 有哪些具体的改动。

1、支持全新的服务发现模型。Dubbo 3.0 尝试从应用模型入手,对其云原生主流设计模型优化其存储结构,避免在模型上带来互通问题。新模型在数据组织上高度压缩,能有效提高性能和集群的可伸缩性。

2、提出了下一代 RPC 协议 —— Triple。这是一个基于 HTTP/2 设计的完全兼容 gRPC 协议的开放性新协议,由于是基于 HTTP/2 设计的,具有极高的网关友好型和穿透性,完全兼容 gRPC 协议使得其在多语言互通方面上天然具有优势。

3、提出了统一治理规则。这套规则面向云原生流量治理,能够覆盖传统 SDK 部署、Service Mesh 化部署、VM 虚拟机部署、Container 容器部署等一系列场景。一份规则治理全部场景可以大大降低流量治理成本,使得异构体系下的全局流量治理得到统一。

4、提供接入 Service Mesh 的解决方案。面向 Mesh 场景,Dubbo 3.0 提出了两种接入方式:一种是 Thin SDK 模式,部署模型和当前 Service Mesh 主流部署场景完全一样,而 Dubbo 将进行瘦身,屏蔽掉与 Mesh 相同的治理功能,仅保留核心的 RPC 能力;第二种是 Proxyless 模式,Dubbo 将接替 Sidecar 的工作职责,主动与控制面进行通信,基于 Dubbo 3.0 的统一治理规则,应用云原生流量治理功能。

应用级服务注册发现

1625927300811-e534dbd4-674b-4b68-9ac7-79b13640bcde.png

应用级服务发现模型

应用级服务发现模型的原型其实最早在 Dubbo 2.7.6 版本中已经提出来了,经过一段时间的迭代,最终形成了 Dubbo 3.0 中一个较为稳定的模型。

在 Dubbo 2.7 及以前版本中,应用进行服务注册和发现时,都是以接口为粒度,每个接口都会对应在注册中心上的一条数据,不同的机器会注册上属于当前机器的元数据信息或者接口级别的配置信息,如序列化、机房、单元、超时配置等。

所有提供此服务的服务端在进行重启或者发布时,都会在接口粒度独立地变更。举个例子,一个网关类应用依赖了上游应用的 30 个接口,当上游应用在发布时,就有 30 个对应的地址列表在进行机器的上线和下线。

以接口作为注册发现的第一公民的方式是最早的 SOA 或微服务的拆分方式,提供了单一服务、单一节点的独立和动态变更能力。随着业务的发展,单一应用依赖的服务数在不断增多,每个服务提供方的机器数量也由于业务或容量原因不断增长,从客户端整体上看,依赖的总服务地址数迅速上涨。根据这种情况,可以考虑从注册发现的流程设计上优化。

这里注意有两个特征:

  • 随着单体应用拆分为多微服务应用的基本完成,大规模的服务拆分和重组已经不再是痛点,大部分接口都只被一个应用提供或者固定几个应用提供。
  • 大量用于标志地址信息的 URL 都是存在极大冗余的,如超时时间、序列化等。这些配置变更频率极低,却在每个 URL 中都出现。

结合以上特征,最终应用级注册发现被提出了,即以应用作为注册发现的基本维度。和接口级的主要区别是,原来一个应用如果提供了 100 个接口,需要在注册中心上注册 100 个节点;如果这个应用有 100 台机器,那每次发布,对于它的客户端来说都是 10000 个虚拟节点的变更。而应用级注册发现则只需要 1 个节点, 每次发布只变更 100 个虚拟节点。对于依赖服务数多、机器多的应用而言,是几十到上百分之一数量级的规模下降,内存占用上也将至少下降一半。

然而,技术方案的设计不仅仅需要考虑功能正确,还需要考虑现有业务的升级。因此,升级到应用级注册发现的基础,是在其功能上需要对齐接口级注册发现的能力。而无论客户端是否升级或是否开启应用级注册发现,前提都是不影响正确的业务调用。

为了提供这个保证,我们设计了一个新的组件,元数据中心,用于管理两部分数据:

  • 接口应用映射关系:上报和查询接口到应用的映射,可以决定客户端是否启用应用级,避免业务代码变更;
  • 应用级元数据快照:当一个应用不同接口之间使用的配置不同就会出现数据的分化,因此在应用级方案里,提出了元数据快照的概念,即每个应用在每次发布时都会统一生成一份元数据快照,这个快照包含当前应用的元数据版本以及当前应用提供的所有接口的配置。这个快照 ID 会存储在 URL 中,这样既提供了动态变更能力, 又在量级上减少了数据存储对内存的压力。

最后,由于这个新的服务发现与 Spring Cloud、Service Mesh 等体系下的服务发现模型是高度相似的,因此 Dubbo 可以从注册中心层面与其他体系下的节点实现互发现。

Dubbo 3.0-云原生&阿里背书、易用

1.png

Dubbo 3.0 的定位是成为云原生时代的最佳微服务框架。目前可以看到的几个趋势有 K8s 成为资源调度的事实标准、Mesh 化成为主流以及规模上的急速增长等。这些趋势的存在都对 Dubbo 提出了更高的要求。

1、用户如何在 K8s 上更方便地部署和调用 Dubbo 服务是必须要解决的问题,要解决这个问题,统一的协议和数据交换格式是必须前提。2、Mesh 化的流行带来了多元化问题,即原生 Dubbo 和 Mesh 化 Dubbo 如何共存,多语言的场景如何支持。3、规模的增长会给整个 Dubbo 架构带来更大的挑战,无论是注册中心等组件,还是客户端,都会有更多的数据和调用量。

如何在保持稳定的前提下,提供更高效的服务是 Dubbo 演进的重中之重。

这些云原生时代带来的挑战,促成了 Dubbo 发展到下一代:新协议、K8s 基础架构支持、多语言支持和规模化。

1、下一代RPC协议

2.png

作为 RPC 框架最基础的能力是完成跨业务进程的服务调用,将服务组成链、组成网,这其中最核心的载体就是 RPC 协议。

同时,由于与业务数据的紧密耦合,RPC 协议的设计与实现,也在一些方面直接决定了业务架构,比如从终端设备到后端的交互、微服务架构中多语言的采用、服务间的数据传输模型等。

Dubbo 2 提供了 RPC 的核心语义,包括协议头、标志位、请求 ID 以及请求/响应数据。但在云原生时代,Dubbo 2 协议主要面临两个挑战:一是生态不互通,用户很难直接理解二进制的协议;二是对 Mesh 等网关型组件不够友好,需要完整的解析协议才能获取到所需要的调用元数据,如一些 RPC 上下文,从性能到易用性方面都会面临挑战。

Dubbo 作为服务框架,其最重要的还是提供远程通信能力。⽼版本 Dubbo 2 RPC 协议的设计与实现,已在实践中被证实在⼀些⽅面限制了业务架构的发展,⽐如从终端设备到后端服务的交互、微服务架构中多语言的采⽤用、服务间的数据传输模型等。

在支持已有的功能和解决存在的问题的前提下,下一代的协议需要有以下特性:

  • 协议需要解决跨语言互通的问题。传统的多语言多 SDK 模式和 Mesh 化跨语言模式都需要一种更通用易扩展的数据传输格式。
  • 协议应该提供更完善的请求模型,除了 Request/Response 模型,还应该支持 Streaming 和 Bidirectional。
  • 在性能上保留 request Id 机制,以避免队头阻塞带来的性能损耗。
  • 易扩展,包括但不限于 Tracing/ Monitoring 等支持,也应该能被各层设备识别,降低用户理解难度。

基于这些需求,HTTP2/protobuf 的组合是最符合的。提到这两个的组合,可能很容易就会想到 gRPC 协议。新一代的协议和 gRPC 的关系如下:

1、Dubbo 新协议是基于 GRPC 扩展的协议,这也保证了在生态系统上新协议和 GRPC 是能够互通和共享的。

2、在第一点的基础上,Dubbo 新协议将更原生的支持 Dubbo 的服务治理,提供更大的灵活性。

3、在序列化方面,由于目前大多数应用方还没有使用 Protobuf ,所以新协议会在序列化方面给予足够的支持,平滑的适配现有序列化,方便迁移到 Protobuf。

4、在请求模型上,新协议将原生支持 Reactive,这也是 gRPC 协议所不具备的。

2、Service Mesh

3.png

为了使 Dubbo 在 Service Mesh 体系下落地,在参考了众多的方案之后,最终确定了最适合 Dubbo 3.0 的两种形态的 Mesh 方案。⼀种是经典的基于 Sidecar 的 Service Mesh,另⼀种是无 Sidecar 的 Proxyless Mesh。

对于 Sidecar Mesh 方案,其部署方式和当前主流 Service Mesh 部署方案一致。Dubbo 3.0 的重点是尽量给业务应用提供完全透明的升级体验,不止是编程视角的无感升级,还包括通过 Dubbo 3.0 轻量化、Triple 协议等,让整个调用链路上的损耗与运维成本也降低到最低。这个方案也被称为 Thin SDK 方案,而 Thin 的地方就是在于去除了所有不需要的组件。

Proxyless Mesh 部署方案则是 Dubbo 3.0 规划的另⼀种 Mesh 形态,目标是不需要启动 Sidecar,由传统 SDK 直接与控制面交互。

设想一下针对以下⼏种场景会⾮常适用 Proxyless Mesh 部署方案:

  • 业务方期望升级 Mesh 方案,但却无法接受由于 Sidecar 进行流量劫持所带来的性能损耗,这种情况常见于核心业务场景
  • 期望降低 Sidecar 运维成本,降低系统复杂度
  • 遗留系统升级缓慢,迁移过程漫长,多种部署架构⻓期共存
  • 多种部署环境,这里的多种部署环境包括了如 VM 虚拟机、Container 容器等多种部署方式,也包括了多种类型应用混合部署,例如 Thin SDK 与 Proxyless 方案混合部署,对性能敏感应用部署 Proxyless 模式,对于周边应用采用 Thin SDK 部署方案,多种数据面共同由统一控制面进行调度。

将这两种形态统筹来看,在不同的业务场景、不同的迁移阶段、不同的基础设施保障情况下, Dubbo 都会有 Mesh ⽅案可供选择,⽽这进⼀步的都可以通过统⼀的控制⾯进行治理。

未来的部署

1、部署在K8s上

4.png

上图是 Dubbo 3.0 未来期望在 Kubernetes 上的部署方案。Dubbo 3.0 将在服务发现模型上对其 Kubernetes 的原生服务,支持不需要部署独立的注册中心就可以实现互相调用。

2、部署在Istio上

5.png

上图是 Dubbo 3.0 未来期望在 Istio 上的部署方案。这里采用的是 Thin SDK 与 Proxyless 混合部署模式,如图中的 Pod 1 和 Pod 3,数据流量由 Dubbo Service 直接发出,而 Pod 2 部署的是 Thin SDK 模式,流量由 Sidecar 进行拦截后流出。

柔性增强规划

6.png

云原生带来了技术标准化的重大变革。如何让应用在云上更简单地创建和运行,并具备可弹性扩展的能力,是所有云原生基础组件的核心目标。借助云原生技术带来的弹性能力,应用可以在极短时间内扩容出一大批机器以支撑业务需要。

比如为了应对零点秒杀场景或者突发事件,应用本身往往需要数千甚至数万的机器数来提升性能以满足用户的需要,但是在扩容的同时也带来了诸如集群节点极多导致的节点异常频发、服务容量受多种客观因素影响导致节点服务能力不均等一系列的问题,这些都是在云原生场景下集群大规模部署时会遇到的问题。

Dubbo 期待基于一种柔性的集群调度机制来解决这些问题。这种机制主要解决的问题有两个方面,一是在节点异常的情况下,分布式服务能够保持稳定,不出现雪崩等问题;二是对于大规模的应用,能够以最佳态运行,提供较高的吞吐量和性能。

  • 从单一服务视角看,Dubbo 期望的目标是对外提供一种压不垮的服务,即是在请求数特别高的情况下,可以通过选择性地拒绝一些的请求来保证总体业务的正确性、时效性。
  • 从分布式视角看,要尽可能降低因为复杂的拓扑、不同节点性能不一导致总体性能的下降,柔性调度机制能够以最优的方式动态分配流量,使异构系统能够根据运行时的准确服务容量合理分配请求,从而达到性能最优。

Dubbo 3.0 路线图

7.png

Apache Dubbo 3.0.0 作为捐给 Apache 后的一个里程碑版本已经在今年 6 月份正式发布了,这代表着 Apache Dubbo 全面拥抱云原生的一个节点。

在 2021 年 11 月我们会发布 Apache Dubbo 3.1 版本,届时我们会带来 Apache Dubbo 在 Mesh 场景下部署的实现与实践。

在 2022 年 3 月我们会发布 Apache Dubbo 3.2 版本,在这个版本中我们将带来全新的大规模应用部署下智能流量调度机制,提高系统稳定性与资源利用率。

最后,Apache Dubbo 3.0 已经和阿里巴巴集团内部的 RPC 框架实现了融合,期望用它来解决内部落地问题,做到技术栈统一。未来,Apache Dubbo 3.0 将大规模落地阿里集团,承载 618、双十一等复杂业务场景。

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

淘宝小部件:全新的开放卡片技术!

简介: 淘宝的开放技术目前主要有两种形态,第一种是小程序,第二种是今天的主角小部件。它是基于小程序技术体系,面向标准化、轻量化、高性能的开放卡片场景。本文我们将通过技术设计策略、核心技术设施、业务场景接入、技术演进路线…

hadoop上传文件java_hadoop入门之通过java代码实现将本地文件上传到hadoop的文件系统...

第一步:首先搭建java的编译环境。创建一个Java Project工程,名为upload。第二步:选中所需的Jar包。选中JRE System Library 选择BuildPath Configure Build Path 选择hadoop相应的jar包。通过Add External JARS --〉Hadoop-0.20.2下所有的jar…

外卖和快递行业数据_抢人大战愈演愈烈,东莞再现用工荒!不只流向外卖、快递等行业...

12月初,距离过年只有两个月的时间。按照往年惯例,这并不是一个大肆招人的好时机。然而世界工厂中国,一场抢人大战却于此时低调地打响,在东莞,不少工厂亲身上阵,在厂区附近的大街小巷拉满横幅,贴…

HIRO 部署新一代可扩展边缘微型数据中心

边缘计算对于充分发挥人工智能 (AI)、机器学习和物联网 (IoT) 的全部潜能至关重要。这些技术正在融入我们生活的方方面面:自动驾驶、智能楼宇、机器人、供应链管理和医疗保健。 何为边缘计算? 边缘计算作为速度更快的(中间层)数…

阿里数据中台底座的12年建设实践

简介: 在当下如火如荼的金融行业中台建设浪潮中,不少金融机构对于中台建设仍存诸多迷思,中台建设将走向何方?数据资产到底该如何管理?阿里巴巴的中台建设之路应该能为金融机构带来借鉴。 日前,在阿里云举办…

Hologres揭秘:如何支持超高QPS在线服务(点查)场景

简介: 本期我们将揭秘Hologres如何支持超高QPS在线服务(点查)场景。 Hologres(中文名交互式分析)是阿里云自研的一站式实时数仓,这个云原生系统融合了实时服务和分析大数据的场景,全面兼容Post…

请写一个java程序实现线程连接池功能_写一个java程序实现线程连接池的功能

线程池:import java.util.linkedlist;public abstract class manager {private string mthreadpoolname null;private int mthreadpoolmaxsize 1;private linkedlist workers new linkedlist();public manager() {}public manager(string name, int poolmaxsize) {mthreadpo…

shell 提取sql 的字段名表名_Mysql 常用SQL语句集锦(仅学习)

基础篇//查询时间,友好提示 $sql "select date_format(create_time, %Y-%m-%d) as day from table_name";//int 时间戳类型 $sql "select from_unixtime(create_time, %Y-%m-%d) as day from table_name";//一个sql返回多个总数 $sql "…

告别“大小周”、回到二三线,程序员“内卷”时代终结?

作者 | 郑丽媛出品 | CSDN(ID:CSDNnews)相信许多人都有这样一种感觉:工作之后,对于时间的概念似乎减弱了,只会在恍惚间瞄到日历,才惊觉:一年竟又已临近尾声。这一年,我们…

MySQL 8.0 Server层最新架构详解

简介: 本文基于MySQL 8.0.25源码进行分析和总结。这里MySQL Server层指的是MySQL的优化器、执行器部分。我们对MySQL的理解还建立在5.6和5.7版本的理解之上,更多的是对比PostgreSQL或者传统数据库。然而从MySQL 8.0开始,持续每三个月的迭代和…

产品解读 | 敏捷版数据库场景 一站式快速构建企业全场景数据库管理平台

简介: Gartner 的报告显示预计到2022年将有75%数据库将采用云数据库,与此同时,IDC预计到2024年传统部署数据库市场将达到13亿美元,企业数字化转型升级,积极拥抱开源、云原生数据库成为重要趋势,也是必然选择…

核弹级漏洞,把 log4j 扒给你看!

作者 | 轩辕之风O来源 | 编程技术宇宙相信大家这两天应该被这么一条新闻刷屏了:这个漏洞到底是怎么回事?核弹级,真的有那么厉害吗?怎么利用这个漏洞呢?我看了很多技术分析文章,都太过专业,很多非…

外部工具连接SaaS模式云数据仓库MaxCompute实战——商业BI分析工具篇

简介: MaxCompute 是面向分析的企业级 SaaS 模式云数据仓库,以 Serverless 架构提供快速、全托管的在线数据仓库服务,消除了传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,帮助企业和大数据开发者经济…

挑战程序设计竞赛_我系首次参加第六届中国大学生程序设计竞赛网络预选赛

点击上方蓝字关注 「龙外信息工程系」讲述有温度的故事 传递有态度的思想2020年9月20日12时至17时,第六届中国大学生程序设计竞赛网络赛预选赛在杭州电子科技大学OJ成功举办,黑龙江外国语学院(信息工程系)参赛队与来自清华大学、上海交通大学、复旦大…

如何用阿里云实行全链路数据追踪

简介: 阿里云采用了日志服务,帮助畅捷通构建了用户体验感知、业务安全合规、用户业务链路追踪、成本预算的使用场景,实现了对用户、业务、成本、安全等方面的全维度感知,使得运维效率提升了30%。 在日常生活中,遇到电…

谷歌能否赶上「元宇宙」这趟快车?

整理 | 禾木木出品 | CSDN云计算(ID:CSDNcloud)大多数人认为 Google Glass 只是领先于时代。虽然 Glass 不再出售给日常消费者(它仍然存在于企业版本中),但它在很多方面都是公众对混合现实体验的首次介绍。…

Flink on Zeppelin 流计算处理最佳实践

简介: 欢迎钉钉扫描文章底部二维码进入 EMR Studio 用户交流群 直接和讲师交流讨论~ 点击以下链接直接观看直播回放:https://developer.aliyun.com/live/247106 开源大数据社区 & 阿里云 EMR 系列直播 第十二期 主题:Flink on Zeppelin…

储留香:一个智能运维系统就是一个中枢神经系统,我说的!

简介: 运维系统可以像神经系统一样,首先,做到数据的统一汇总;其次,可以对数据进行识别筛选输出有效信息;再次,可以预先感知到异常风险,并进行有效规避。而日志服务SLS凭借出色的数据…

云上资源编排的思与悟

简介: 在传统软件架构下,撇开业务层代码,都需要部署计算节点、存储资源、网络资源,然后安装、配置操作系统等。而云服务本质上是实现 IT 架构软件化和 IT 平台智能化,通过软件的形式定义这些硬件资源,充分抽…

阿里云力夺FewCLUE榜首!知识融入预训练+小样本学习的实战解析

简介: 7月8日,中文语言理解权威评测基准CLUE公开了中文小样本学习评测榜单最新结果,阿里云计算平台PAI团队携手达摩院智能对话与服务技术团队,在大模型和无参数限制模型双赛道总成绩第一名,决赛答辩总成绩第一名。 作…