透过 3.0 Preview 看 Dubbo 的云原生变革

简介: 做过微服务开发的开发者相信对 Dubbo 都不陌生,Dubbo 是一款能帮助我们快速解决微服务开发、通信以及流量治理的框架。相比于之前只限定在 Java 语言范围内,Dubbo 的多语言版本在这两年呈现了良好的发展势头,其中,Dubbo Go 语言版本在功能、稳定性各个方面都已非常完备,其它几种主流的多语言版本在社区也有提供。

头图.png

作者 | 陆龟
来源 | 阿里巴巴云原生公众号

本文整理自作者在3月20日云原生中间件 Meetup 上海站的分享。回复关键字“中间件”可以获取视频录播地址和 PPT。

就在今天,Dubbo 社区刚刚发布了 3.0 的首个预览版本 - 3.0.0.preview。

1.png

https://github.com/apache/dubbo/releases/tag/3.0.0.preview

本文将和读者一起解读 Dubbo3 的首个 preview 版本:一方面,我们将深入分析  Dubbo3 云原生变革的核心理念;另一方面,我们将逐个解读 preview 版本的核心功能

做过微服务开发的开发者相信对 Dubbo 都不陌生,Dubbo 是一款能帮助我们快速解决微服务开发、通信以及流量治理的框架。相比于之前只限定在 Java 语言范围内,Dubbo 的多语言版本在这两年呈现了良好的发展势头,其中,Dubbo Go 语言版本在功能、稳定性各个方面都已非常完备,其它几种主流的多语言版本在社区也有提供。

云原生视角的微服务变革

Dubbo 主要解决微服务开发、运行域问题,它和微服务的编程、通信、流量治理等密切关联,因此,在探寻 Dubbo3 的云原生变革之前,我们先尝试从云原生视角观察云原生基础设施带给微服务架构和实践的变革,进而总结出 Dubbo 这样一个和微服务实践密切相关的框架所面临的变革与挑战。

2.png

微服务在让业务开发演进更灵活、快捷的同时,也带来了一些它独有的特征和需求:如微服务之后组件数量越来越多,如何解决各个组件的稳定性,如何快速的水平扩容等。

这些诉求,尤其是运维、交付相关诉求,如微服务组件的生命周期、网络、通用服务绑定、服务状态管理等,并不应该是开发人员关注的重点,因为它们已经完全脱离了业务逻辑,开发人员更愿意专注在有业务价值组件上,但这个层次的诉求却是实现微服务交付的关键能力。开发者期望由底层基础设施来提供此类能力支持,而处于不同阶段发展的基础设施却不一定具备这样的能力,因此,在微服务软件架构和底层基础设施之间就出现了一条鸿沟,我们需要有组件能填补这一鸿沟,让微服务组件能更好的接入底层基础设施。

3.png

这里从一个更抽象的层面,尝试用两条发展曲线演示了软件架构诉求与底层基础设施能力丰富度之间的关系。总体上,两者之间的发展关系可拆分为两个阶段。

在第一个阶段,软件架构(这条红色的线)从单体应用、到面向服务的软件架构、再到微服务架构,快速演进,从而也提出了上文我们讲到的对基础设施对交付的诉求,这个时候基础设施层还多是以定制化的方式来满足软件架构的诉求,如过往的集中化的 ESB、各个不同的 PaaS 平台等。

第二个阶段,是从容器、Kubernetes 为代表的基础产品的出现开始,蓝线与红线之间的增长速度被快速拉近,以云原生技术为代表的底层基础设施丰富度得到了极大改善,它们不再只是被动的满足微服务开发的诉求,而是开始抽象更多的软件诉求到底层的基础设施,将它们下沉为基础能力,并开始以统一的、标准化的形式向上输出以满足微服务对交付、运维等的诉求,不仅如此,通过更深入的主动创新、持续的向上释放能力,底层基础设施还开始反过来影响微服务的开发、接入方式,如 sidecar、dapr 等模型。

Dubbo3 的云原生变革

通过上文云对原生基础设施演进给传统微服务带来变革的分析,我们得出,以 Dubbo 为代表的微服务开发框架,应重点在以下方向突破与变革。

  • 更多的微服务组件及能力正下沉到以 Kubernetes 为代表的基础设施层。传统微服务开发框架应剔除一些冗余机制,积极的适配到基础设施层以做到能力复用;微服务框架生命周期、服务治理等能力应更好地与 Kubernetes 服务编排机制融合。
  • 以 Service Mesh 为代表微服务架构给微服务开发带来的新的选择,但由于 Mesh 架构本身的复杂性,其距离大规模生产落地还有一段距离。我们相信,基于 ServiceMesh 的体系会逐步从孵化器走向成熟期,会有越来越多的企业采用 Service Mesh技术,但在未来在很长一段时间内,基于服务框架的传统微服务体系还将是主流,长期仍将占据半壁江山。

我们不妨回想一下,在云原生基础设施能力被充分释放前,围绕 Dubbo 构建微服务时,它给微服务开发提供了哪些能力?或者我们期望它提供哪些能力?

4.png

Dubbo2 提供了包括服务注册、服务发现、负载均衡、流量治理等相当丰富的能力,当然还包括微服务最需要的远程通信能力,这些能力很好地解决了微服务的诉求。

而在云原生架构之下,我们需要重新审视,Dubbo2 的哪些能力是冗余的,是需要接入基础设施的?哪些能力是已经不适合云原生时代的,需要被重构的?

5.png

首先,是接入云原生基础设施后,一些能力出现了重复,像服务定义、服务注册、甚至是服务治理能力在不同层面基础设施中出现了重复,需要 Dubbo3 作出适配与调整,以更好的解放业务开发效率,利用好这些基础能力。

其次,是 Dubbo 在微服务架构中的最基本的能力:RPC 远程通信。通信协议和数据传输格式的标准化应该算是 Dubbo2 面临的又一重要挑战,在云原生背影下,协议、数据定义、传输格式的标准化和穿透能力成为更需要优先考虑的指标,纵然私有协议具有更高效、灵活的潜力,但考虑到云原生下多语言、组件间互通、网关等代理设备友好性、避免厂商锁定等诉求,在 Dubbo3 中私有协议都应该被摒弃,转而拥抱基于 HTTP/2 的更通用的协议,采用跨语言的更通用的数据定义和传输格式。

最后,是关于服务治理能力,Dubbo 的服务治理能力应该充分结合底层基础设施的特点,比如之前绑定 ip 的流量过滤方案在地址不固定的 Kubernetes 平台就已不再适用,另外,流量治理也要充分的与调度平台的灰度发布、动态扩缩容能力整合起来;考虑到未来微服务可能会有多种不同的部署形态(下文会讲到),Dubbo3 应该制定一种能适用于各种部署形态的路由规则。

从云原生视角来说,Dubbo3 的核心能力基本上也就成围绕以上几点分析展开的,主要涉及:抽象全新的服务发现模型、定义下一代的更能用的 RPC 协议与数据传输格式、服务治理能力重构等。接下来,我们就看看 3.0 preview 中这些能力的具体实现。

Preview 版本功能速览

就在今天,Dubbo 3.0.0.preview 版本正式通过了 Apache 社区投票并完成了正式发布,作为 3.0 的首个发布版本,代表了社区 3.0 版本的全面启动,也展示了未来 3.0 的发展方向。当然,我们要意识到 preview 版本还远未达到生产可用,它只是为了让大家快速、方便了解 Dubbo3 的一个预览版本,离正式版本甚至 alpha 版本还有一段时间要走,具体大家可关注文后的 Dubbo Roadmap。

以下 preview 版本发布的几个核心特性:

  • 全新的服务发现模型
  • 下一代基于 HTTP/2 的 RPC 协议:Triple
  • 服务治理重构:全新路由规则
  • 性能提升

    • 百万节点级水平扩容
    • 调用链路 QPS 性能提升

在 preview 以上能力中,特别值得注意的是得益于 Dubbo3 与 HSF 的融合,Dubbo3 的整体性能也有望得到大幅提升。

Preview 版本是从架构层面对 Dubbo 的一次全面升级,接下来,社区一方面会从功能完善度、稳定性等几个方面继续增强 3.0 版本,并将在 6 月份发布首个稳定版本,另一方面社区将兑现更多新的功能。首先,接下来即将交付的是 Kubernetes Service 集成,而 Proxyless Mesh、基于反压的智能流量调度等功能正在前期的调研或开发阶段。

下面,我们就选取以上三个核心功能,深入了解它们的实现机制。

1. 全新服务发现模型

下图是 Dubbo2 的服务发现模型:Provider 注册服务地址,Consumer 经过注册中心协调并发现服务地址,进而对地址发起通信,这是被绝大多数微服务框架的经典服务发现流程。而 Dubbo2 的特殊之处在于,它把 “RPC 接口”的信息也融合在了地址发现过程中,而这部分信息往往是和具体的业务定义密切相关的。

6.png

而在接入云原生基础设施后,基础设施融入了微服务概念的抽象,容器化微服务被编排、调度的过程即完成了在基础设施层面的注册。如下图所示,基础设施即承担了注册中心的职责,又完成了服务注册的动作,而 “RPC 接口”这部分信息,由于与具体的业务相关,不可能也不适合被基础设施托管。

在这样的场景下,对 Dubbo3 的服务注册发现机制提出了两个要求:

  1. Dubbo3 需要在原有服务发现流程中抽象出通用的、与业务逻辑无关的地址映射模型,并确保这部分模型足够合理,以支持将地址的注册行为和存储委托给下层基础设施;
  2. Dubbo3 特有的业务接口同步机制,是 Dubbo3 需要保留的优势,需要在 1 中定义的新地址模型之上,通过框架内的自有机制予以解决。

7.png

这样设计的全新的服务发现模型,在架构兼容性、可伸缩性上都给 Dubbo3 带来了更大的优势。

8.png

在架构兼容性上,如上文所述,Dubbo3 复用下层基础设施的服务抽象能力成为了可能;另一方面,如 Spring Cloud 等业界其它微服务解决方案也沿用这种模型,在打通了地址发现之后,使得用户探索用 Dubbo 连接异构的微服务体系成为了一种可能。

Dubbo3 服务发现模型更适合构建可伸缩的服务体系,这点要如何理解?这里先举个简单的例子,来直观的对比 Dubbo2 与 Dubbo3 在地址发现流程上的数据流量变化:假设一个微服务应用定义了 100 个接口(Dubbo 中的服务),则需要往注册中心中注册 100 个服务,如果这个应用被部署在了 100 台机器上,那这 100 个服务总共会产生 100 100 = 10000 个虚拟节点;而同样的应用,对于 Dubbo3 来说,新的注册发现模型只需要 1 个服务(只和应用有关和接口无关), 只注册和机器实例数相等的 1 100 = 100 个虚拟节点到注册中心。在这个简单的示例中,Dubbo 所注册的地址数量下降到了原来的 1 / 100,对于注册中心、订阅方的存储压力都是一个极大的释放。更重要的是,地址发现容量彻底与业务 RPC 定义解藕开来,整个集群的容量评估对运维来说将变得更加透明:部署多少台机器就会有多大负载,不会像 Dubbo2 一样,因为业务 RPC 重构就会影响到整个集群服务发现的稳定性。

2. 下一代通信协议:Triple

我们将 Dubbo3 的新协议命名为 Triple,有代表第 3 代协议的意思。在云原生背景下,Triple 协议需要解决两大问题:

  • 通信协议和数据传输格式的标准化问题。这涉及到 RPC 协议、数据定义、数据传输等环节,未来可移植性、不被厂商锁定会成为每个上云企业用户的诉求,组件内的私有协议和特有数据格式,必然会成为很多用户选型的顾虑。
  • 穿透性、通用性问题。在 Mesh 等架构设想下,微服务甚至所有组件的通信都要经过 sidecar 代理转发,理论上,Sidecar 是要透明的转发流量的(收到什么就转发什么),起码 payload 不应该是 Sidecar 关注的;而 Sidecar 在某些时候也需要感知流量内容的,因为它要基于些做流量的调度,这个时候,Triple 就要做到足够通用 -- 让所有的 Sidecar 都能在预期的地方取到其关注的元数据,而不用解析整个 payload。

9.png

除了以上两个核心问题,Triple 协议还需要被设计用来支持更多的业务语义。

  • 协议应该提供更完善的请求模型,除了 Request/Response 模型,还应该支持 Streaming 和 Bidirectional。
  • 在性能上,新的协议应该保留 request Id 机制,以避免 HOL 带来的性能损耗。
  • 新协议应该易于扩展,包括但不限于 Tracing、Monitoring、BackPressure 等支持。

基于以上需求,Triple 协议是完全基于 HTTP/2 之上构建的,另外,Triple 协议将会做到完全兼容 gRPC 协议;在服务定义、数据格式定义以及传输格式上,Triple 将更增加对 Protobuf 的支持。

3. 统一的路由规则

Dubbo3 会对服务治理规则进行全面的重构,以更好的适应云原生基础设施的变革。

当前的 3.0 preview 版本提供了一个重构后的路由规则机制原型,虽然当前版本的实现还需要继续增强,但从设计理念上,我们可以解读出:Dubbo3 期望提供一种跨平台、跨语言、跨多种部署架构的通用路由规则。

随着微服务对治理需求的挖掘,Dubbo2 路由规则除了在语义表达上不能涵盖所有场景之外,更为重要的是,其基于特定语言、特定主机 ip 的过滤机制,已不再适应底层调度平台的工作机制,Dubbo3 需要引入一种全新设计的路由规则。而对于“跨多种部署架构” 这个点,我们设想未来以 Dubbo 构建的微服务会有三种部署架构:传统 SDK、基于 Sidecar 的 Service Mesh以及脱离 Sidecar 的 Service Mesh,这三种部署形态都将由 Dubbo3 统一的路由规则进行治理。

  • 基于 Sidecar 的 Service Mesh,经典的 Mesh 架构,独立的 sidecar 运行时接管所有的流量。
  • 脱离 Sidecar 的 Service Mesh,变种 Mesh 架构,没有 sidecar 运行时,富 SDK 直接通过 xDS 与控制面通信,我们将在后续发布关于 Proxyless 模式更详细的解读。

10.jpg

实践中的 Dubbo3

云原生微服务变革在各大厂商内部早已展开,相比于当前开源社区的 preview 版本,Dubbo3 在阿里巴巴的开发与实践已经在逐步铺开:部分功能已经在阿里巴巴的部分业务线上得到了规模化验证(考拉),并且更多的功能和业务线也将进入试点、推广阶段(饿了么、钉钉等)。有一点是值得特别提及的是:在接下来阿里巴巴的微服务架构升级战略中,Dubbo3 将成为阿里巴巴经济体未来唯一的标准服务框架,它将逐步在所有业务线取代 HSF 和 Dubbo2,并且我们期待在接下来的 1-2 年 Dubbo3 内能覆盖大多数重要的业务线。

说在这里,有必要提一下阿里巴巴的微服务框架演进历程。大概在 2011 年,阿里巴巴开源了 Dubbo2 这一款服务框架并获得极大成功,在 Dubbo2 开源不久,在阿里巴巴内部又发展出了一款全新的服务框架 -- HSF,两者在设计理念上是高度相似的,而经过这么些年的发展,HSF 得以跟随阿里巴巴的业务系统更快速的成长,由其是在大集群、大流量治理下展现出了更好的性能和稳定性。在阿里云原生微服务战略下,整合各个优秀的框架并发展统一品牌的 Dubbo3 被纳入发展规划,在此背景下,Dubbo3 实现了Dubbo2 与 HSF 的融合,并将推动实现内、外技术栈的统一。

除了阿里之外,工商银行等标杆用户也已启动了对 Dubbo3 项目的试点。从社区角度来说,preview 预览版本的发布只是开始,未来随着阿里巴巴、工商银行等更多标杆用户的全面落地,将推动项目更快、更高质量的发展,助力项目保持持续的创新能力和社区生命力。

未来规划(Roadmap)

以下是 Dubbo3 的 Roadmap,截止此文发稿,社区已经完成了 3.0 preview 版本的发布。

11.png

在 6 月份,我们期望能迎来 Dubbo3 的首个社区正式版本。

随后,一直到下半年的 11 月份,我们将重点投入在对 Kubernetes、ServiceMesh 架构的支持上,中间当然也包括了对服务治理规则的全面重构。

在此之后,我们将开始在服务柔性上的尝试,以期提供一种能更高效的利用资源且能提高系统稳定性的流量高度机制。

本文开篇关于云原生微服务变革部分思想引自阿里云高级技术专家、CNCF TOC 张磊 《Microservices - A Cloud Native View》一文分享。

原文链接

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

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

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

相关文章

扩展云存储边界,阿里云推出全球首个云定义存储产品

云计算正带来一场消除线上线下存储边界的革命。 9月22日,阿里云宣布云存储服务全面升级,包括性能大幅提升300%、时延降低70%的ESSD云盘;可兼容HDFS的数据湖存储OSS,同时推出一款全新产品“云定义存储”(Cloud Defined…

Go Mysql Driver 集成 Seata-Golang 解决分布式事务问题

简介: 2020 年 4 月,我们开始尝试实现 go 语言的分布式事务框架 Seata-Golang。众所周知,Seata AT 模式以无业务代码侵入的特点,被广大开发者推崇。Java 版 Seata AT 模式通过对 DataSource 数据源进行代理,在 sql 语句…

安装redis提示[test] error 2_技术干货分享:一次flask+redis的微服务实战

先说一下需求的场景,策划部门想做一个垂直领域的社区产品,类似与知乎那种,但受益人群是金融行业的从业人员。产品中有一个搜索问题的需求,搜索的问题去题库中进行模糊匹配,终端支持H5/APP/小程序,甚至是微信…

实现阿里云容器镜像服务反向访问代理

简介: 本文会先介绍镜像推送/拉取过程的交互逻辑来梳理需要代理的所有服务,再通过搭建一个公网 HTTPS 反向代理来访问容器镜像服务来向您展示多场景代理访问模式原理。 真实业务场景可能很复杂,因安全、合规、访问限制等原因可能需要&#x…

数字基础设施开源操作系统欧拉全新发布

在华为全联接2021上,面向数字基础设施的开源操作系统欧拉(openEuler)全新发布。欧拉操作系统可广泛部署于服务器、云计算、边缘计算、嵌入式等各种形态设备,应用场景覆盖IT(Information Technology)、CT&am…

mysql 聚簇索引和非聚簇索引_MySQL 聚簇索引 二级索引 辅助索引(上两期中奖名单)...

阅读文本大概需要3分钟。MySQL中每个表都有一个聚簇索引( clustered index ),除此之外的表上的每个非聚簇索引都是二级索引,又叫辅助索引( secondary indexes )。以InnoDB来说,每个InnoDB表具有一个特殊的索引称为聚集索引。如果表上定义有主…

共筑计算新生态 共赢数字新时代

[中国,深圳,2021年9月25日] 在华为全联接2021上,华为副总裁、计算产品线总裁邓泰华分享了六大数字生态的最新进展,并携手生态伙伴为计算产业带来一系列重磅内容:欧拉开源操作系统(openEuler)全新…

数据湖,已成为海量数据存储与分析的重要承载方式

简介: 在云计算和大数据时代,基于数据开展生产、运营、决策成为常态,根据Gartner报道,2019年数据基建方面的采购费用飙升到660亿美元,占据基础架构类软件费用的24%。数据的存储及应用体系是企业生态运转的中枢神经&…

Fluid 0.5 版本发布:开启数据集缓存在线弹性扩缩容之路

简介: 为了解决大数据、AI 等数据密集型应用在云原生场景下,面临的异构数据源访问复杂、存算分离 I/O 速度慢、场景感知弱调度低效等痛点问题,南京大学PASALab、阿里巴巴、Alluxio 在 2020 年 6 月份联合发起了开源项目 Fluid。 作者 | 顾荣 …

php生成cookie在哪,php程序中cookie的使用方法

Cookie 可以翻译为“小甜品,小饼干” ,Cookie 在网络系统中几乎无处不在,当我们浏览以前访问过的网站时,网页中可能会出现 :你好 XXX,这会让我们感觉很亲切,就好像吃了一个小甜品一样。这其实是…

c#类属性和实例属性_Visual C#类和对象的创建方式,定义类,实例化对象,实例讲解...

定义类类由class member类成员组成,包含字段、属性、方法和事件。其中字段和属性为类的数据成员,用来存储数据;方法负责数据的传递和运算。使用类之前,要进行声明,声明的语法如下:Class 类名称{访问权限 数…

面对不可避免的故障,我们造了一个“上帝视角”的控制台

简介: 混沌工程随着云原生的发展逐渐进入大家的视野,通过混沌工程可以很好地发现和解决在云原生化过程中的高可用问题。阿里巴巴在 2019 年开源了底层的混沌工程工具 - chaosblade,今年年初再次开源混沌工程控制台 chaosblade-box&#xff0c…

腾讯云鼎实验室发布云安全攻防矩阵,绘制九大攻防路径全景图

随着云计算技术和产业的蓬勃发展,企业上云已是数字化转型的必然趋势。但云上千般好,却也给企业带来了全新的安全挑战。云平台不仅要应对传统网络架构中存有的DDoS、入侵、病毒等常态问题,还要高度重视技术架构中虚拟机逃逸、资源滥用、横向穿…

Knativa 基于流量的灰度发布和自动弹性实践

简介: Knative 提供了基于流量的自动扩缩容能力,可以根据应用的请求量,在高峰时自动扩容实例数;当请求量减少以后,自动缩容实例,做到自动化地节省资源成本。此外,Knative 还提供了基于流量的灰度…

nginx 部署_部署 hexo 到 nginx

本来博客是使用 GitHub pages ,但近些日子访问贼慢,刚好手里有一台小机器,当然是要用起来(折腾就对了 )。前置条件:已购买 vps 和域名,按需备案。ssh 登录远程服务器,以 CentOS 为例…

阿里云云效技术专家:一文详解kubernetes下5种常见发布模式如何选择

简介: Kubernetes下5场场景应用发布方式的选择,每种发布模式适合什么样的场景,以及如何在阿里云云效上高效落地。 作者:郑云龙,阿里云云效技术专家 Kubernetes面向通用场景提供了非常灵活的应用管理和运维方式&#…

“西部云安全优才计划”落地西安,为云安全高质量发展夯实才智支撑

9月26日,2021首届-西部云安全峰会在西安顺利召开。聚焦西部云安全发展和人才培养需求,在本次峰会上,腾讯安全云鼎实验室、陕西省计算机学会联合西安多所高校发布了“西部云安全优才计划”,凝聚西安以及西部的安全力量,…

如何做一场高质量的分享?

简介: 最近我发现一些同学的分享越来越趋于“念稿”式。我一边看着分享的同学在上面念稿,另一边看着几十号人在下面看电脑看手机,我心里就特别着急。恨不得我自己上去讲,也恨不得没收了大家的电脑手机。但这种粗暴的方法肯定是不解…

matlab knn实现,Matlab之KNN实现

1. 算法流程1) 通过Matlab产生高斯分布产生两类数据,并标明类别2) 数据初始化:设置K某个常数(一般为奇数)3) 对于每个测试数据,计算其到两类数据的所有点的距离对于上述求得的距离,选出K个最小的,检…

matlab 计算 工程,matlab工程计算.doc

您所在位置:网站首页 > 海量文档&nbsp>&nbsp计算机&nbsp>&nbspmatlabmatlab工程计算.doc167页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。下载提示1.本站不保证该用户上传的文档完整性,不预览、不比…