Dubbo3.0|阿里巴巴服务框架三位一体的选择与实践

简介: 服务框架就像铁路的铁轨一样,是互通的基础,只有解决了服务框架的互通,才有可能完成更高层的业务互通,所以用相同的标准统一,合二为一并共建新一代的服务框架是必然趋势。Dubbo3.0 是 Dubbo2.0 与 HSF 融合而来,是阿里经济体面向内部业务、商业化、开源的唯一标准服务框架。

服务框架就像铁路的铁轨一样,是互通的基础,只有解决了服务框架的互通,才有可能完成更高层的业务互通,所以用相同的标准统一,合二为一并共建新一代的服务框架是必然趋势。

Dubbo3.0 是 Dubbo2.0 与 HSF 融合而来,是阿里经济体面向内部业务、商业化、开源的唯一标准服务框架。

阿里巴巴服务框架的选择与实践

Dubbo 和 HSF 在阿里巴巴的实践

Dubbo 和 HSF 都是阿里巴巴目前在使用的微服务 RPC 框架。

Dubbo 则在 2011 年开源后,迅速成为业界广受欢迎的微服务框架产品,在国内外均有着广泛应用。Dubbo 项目诞生于 2008 年,起初只在一个阿里内部的系统使用;2011 年,阿里 B2B 决定将整个项目开源,仅用了一年时间就收获了来自不同行业的大批用户;2014 年,由于内部团队调整,Dubbo 暂停更新;2017 年 9 月,Dubbo 3.0 重启开源,在 2019 年 5 月由 Apache 孵化毕业,成为第二个由阿里巴巴捐献至 Apache 毕业的项目。

1.png

HSF 在阿里巴巴使用更多,承接了内部从单体应用到微服务的架构演进,支撑了阿里历年双十一的平稳运行;自 2008 年 5 月发布第一个版本 1.1 后,经历数年迭代,HSF 从一个基础的 RPC 框架逐渐演变成为日支撑十万亿级别调用的易于扩展的微服务框架。内部场景中,用户既可以选择少量配置轻松接入微服务体系,获取高性能的稳定服务调用。也可以按照自身业务需求,对 HSF 进行扩展,获取整条链路的能力增强。

对于集团内的需求而言,稳定和性能是核心,因此,当时选型了在电商这种高并发场景久经考验的 HSF 做为新一代服务框架核心。随后,HSF 推出了 2.0 的版本,并针对 HSF 之前版本的主要问题进行重构改造,降低了维护成本,进一步提高了稳定性和性能。HSF2.0 解决了通讯协议支持不透明,序列化协议支持不透明等框架扩展性问题。基于 HSF2.0 的 Java 版本,集团内也演进出了 CPP/NodeJs/PHP 等多语言的客户端。由于 HSF 还兼容了 Dubbo 的协议,原有的 Dubbo 用户可以平滑地迁移到新版本上,所以 HSF 推出后很快就在集团全面铺开,部署的 server 数量达到数十万,基本完成了阿里巴巴内部微服务框架的统一,并经历了多年双十一零点流量洪峰的验证。

下一代微服务的挑战和机遇

然而,业务的发展和框架自身的迭代使得两个框架从协议层的简单兼容已经无法满足需要。随着云计算的不断发展和云原生理念的广泛传播,微服务的发展有着以下趋势:

  1. K8s 成为资源调度的事实标准,Service Mesh 从提出到发展至今已经逐渐被越来越多用户所接受。屏蔽底层基础设施成为软件架构的一个核心演进目标,无论是阿里巴巴还是其他企业用户,所面临的问题都已经从是否上云变为如何平滑稳定地低成本迁移上云。
  2. 由于上云路径的多样以及由现有架构迁移至云原生架构的过渡态存在,部署应用的设施灵活异变,云上的微服务也呈现出多元化的趋势。跨语言、跨厂商、跨环境的调用必然会催生基于开放标准的统一协议和框架,以满足互通需求。
  3. 端上对后台服务的访问呈爆炸性的趋势增长,应用的规模和整个微服务体系的规模都随之增长。

这些趋势也给 HSF 和 Dubbo 带来了新的挑战。

HSF 和 Dubbo 面临的挑战

微服务框架是基础组件,大部分公司在早期选型或业务发展到一定规模的时候都需要确定使用某一个框架。而一个稳定高效的自研框架通常需要较长时间的迭代来打磨优化。所以大部分公司初期都会倾向于使用开源组件。对阿里云而言,这就带来了一个问题:内部使用的是 HSF 框架,而云上的用户大部分都是使用的开源 Dubbo 框架,两种框架在协议、内部模块抽象、编程接口和功能支持上都存在差异。

如何能让使用了 HSF 的阿里集团内部组件的最优实践和前沿技术更简单直接地输出到云上,这是每一个做技术商业化的同学都会遇到和必须解决的问题。其实我们也有过一些探索,云上微服务最早推的是 HSF 框架,闭源组件在云上输出的时候,对于许多用户而言,遇到问题后无从排查,整个服务框架对于他们来说是一个黑盒的组件。我们发现这并不是一个很好的产品化方向,在云上输出的时候,我们必须选择拥抱开源的方式,主推 Dubbo 与 Spring Cloud 框架。

同时在集团内也因为同时存在 HSF 与 Dubbo 框架而导致的不少问题。原有部门或公司的技术栈如何更快地融入到现有技术体系是一个绕不开的问题。一个典型的例子就是 2019 年加入阿里巴巴的考拉。考拉之前一直使用 Dubbo 作为微服务框架,基于 Dubbo 构建了大规模的微服务应用,迁移的成本高,风险也大。需要集团和考拉的基础架构部门耗费较长的时间进行迁移前调研、方案设计,确保基本可行后再开始改动。从分批灰度上线,再到最终全量上线。这种换血式的改动不仅需要耗费大量人力,时间跨度也很长,会影响到业务的发展和稳定性。同时由于历史原因,集团内部始终存在着一定数量的 Dubbo 用户。为了更好的服务这部分用户,HSF 框架对 Dubbo 进行了协议层和 API 层的兼容。但这种兼容仅限于互通,随着 Dubbo 开源社区的多年发展,这种基础的兼容在容灾、性能和可迭代性方面,都有着较大的劣势,同时很难对齐 Dubbo 的服务治理体系。在稳定性方面也存在风险,更无法享受到集团技术发展和 Dubbo 社区演进的技术红利。

产生这些问题的根本原因是闭源的 HSF 无法直接用于广大云上用户和外部其他用户,而开源产品对闭源产品的挑战会随着开源和云的不断发展愈演愈烈。越早解决这个问题,阿里巴巴和外部企业用户的云原生迁移成本越低,产生的价值也就越大。

因此,HSF 和 Dubbo 的融合是大势所趋。为了能更好的服务内外用户,也为了两个框架更好发展,Dubbo3.0 和以 Dubbo3.0 为内核适配集团内基础架构生态的 HSF3.0 应运而生。

三位一体战略下服务框架的最终选择 Dubbo3.0

Dubbo3.0 在原有功能集与 API 完全兼容的前提下,同时具备了以下几大面临云原生挑战下的新特性

  • Dubbo 3.0 支持全新的服务发现模型,Dubbo 3.0 尝试从应用模型入手,优化存储结构,对齐云原生主流设计模型,避免在模型上带来的互通问题。新模型在数据组织上高度压缩,能有效提高性能和集群的可伸缩性。
  • Dubbo 3.0 提出了下一代 RPC 协议 —— Triple。这是一个基于 HTTP/2 设计的完全兼容 gRPC 协议的开放性新协议,由于是基于 HTTP/2 设计的,具有极高的网关友好型和穿透性;完全兼容 gRPC 协议是的天然在多语言互通方面上具有优势。
  • Dubbo 3.0 面向云原生流量治理,提出了一套能够覆盖传统 SDK 部署、Service Mesh 化部署、VM 虚拟机部署、Container 容器部署等场景的统一治理规则,支持一份规则治理大部分场景,大大降低流量治理治理成本,使得异构体系下全局流量治理变得可能。
  • Dubbo 3.0 将提供接入 Service Mesh 的解决方案,面向 Mesh 场景,Dubbo 3.0 提出了两种接入方式,一种是 Thin SDK 模式,部署模型和当前 Service Mesh 主流部署场景完全一样,而 Dubbo 将进行瘦身,屏蔽掉与 Mesh 相同的治理功能,仅保留核心的 RPC 能力;第二种是 Proxyless 模式,Dubbo 将接替 Sidecar 的工作职责,主动与控制面进行通信,基于 Dubbo 3.0 的统一治理规则应用云原生流量治理功能。

2.png

服务框架在阿里云商业化方向上的演进思路

对于微服务框架来说,由于关联到客户的业务代码,要做商业化还是有非常大的挑战的。

首先,迁移成本上来说,希望把降低迁移成本为 0,最开始我们在云上售卖的是 HSF + EDAS Container 这一套的架构,因此客户在上云的时候,不得不对自己的业务代码进行改造,另外,由于代码不开源,排查问题也是一个非常头疼的问题,后来,我们发现客户大多数的微服务框架都会选择开源的 Dubbo/Spring Cloud,但是客户有自建的注册中心,如果要上云还需要把自己的注册中心迁移到 MSE 注册中心上,这个过程需要用户对代码做改造才行,一般来说会采用双注册的方案,在云上我们发现推动客户做代码改造,包括 SDK 的升级是一件非常难的事情,很多客户的 Dubbo 版本还停留在 4-5 年的版本,不仅需要研发、测试、运维都来关注,还需要排期支持,这个动作会耗费大量的人力资源,同时面临许多稳定性的挑战。光是这一步就会阻挡住许多的客户了,为了解决客户 SDK 升级的问题,我们在想,能不能不要迁移注册中心呢,最好是代码一行也不用改,部署到云上来,但我们又需要提供同等的服务治理能力,因此,我们提出了基于 Java Agent 字节码增强的技术,帮助用户不改一行代码使用云产品,对客户做到了随时可上可下,没有绑定,让客户比较放心的上云产品,同时我们还提供了能力更强的面运维的托管的注册中心。

对于商业化中微服务框架的选择,我们选择的态度一直是拥抱开源。

我们还需要在开源微服务框架的基础上提供差异化的服务治理能力,传统开源微服务框架在 K8s 上的问题在上云的过程中逐步暴露出来。通过一系列和客户的交流,我们总结出了客户的云原生下进行微服务治理的几大痛点,主要包括微服务发布过程中的无损上下线,标签路由,服务鉴权,离群实例摘除,全链路灰度等等,我们通过 Java Agent 技术实现了在用户不改代码的情况下,解决了上述问题,通过客户交流,收集需求,落到产品,给客户 demo 验证这个模式跑通了正向的循环,功能不断丰富中。除了Java Agent,对于多语言的场景我们使用 Service Mesh、WASM 等技术,同样支持客户无需修改一行代码,就具备于 Java 应用一致的服务治理能力与体验。

同时在Java Agent 的选择上我们也有过一些尝试跟选择,一开始我们使用闭源开发的 Java Agent,每个云产品都有一个对应的 Java Agent,这样会导致 Java Agent 过多以及Agent冲突等问题,同时由于我们自己维护的 Java Agent 又是闭源的。踩过一些坑后,我们决定使用 Arthas One Agent 重构服务治理体系的 Agent,将治理相关的 Agent 合成一个,同时我们底座的 Java Agent 也使用拥抱开源的策略,我们使用开源的 Arthas One Agent。

3.png

Dubbo3.0 顺应了这个方向,通过 Dubbo3.0 + Java Agent 将集团技术发展和 Dubbo 社区演进、以及商业化实践的技术红利不断且持续地输出给云上的客户。

服务治理无缝支持 Dubbo3.0

4.png

阿里云上微服务治理相关的三种解决方案:MSE(微服务引擎,提供微服务治理的能力)、EDAS(全生命周期托管的应用平台)、SAE(具备弹性伸缩能力的Serverless 应用平台),EDAS 与 SAE 均深度集成了 MSE 服务治理能力;其中 MSE 所有的服务治理能力都是开箱即用,支持近五年来市面上所有开源 Dubbo、Spring Cloud 框架,包括 Dubbo 3.0 您无需修改一行代码与配置,您只需将您的 Dubbo 3.0 的应用接入 EDAS/MSE/SAE。包括微服务发布过程中的无损上下线能力,对齐了微服务与 K8S POD 的生命周期;标签路由能力弱化了对 IP 的绑定依赖,服务鉴权,离群实例摘除,全链路灰度,服务 Mock、服务监控、服务契约等等。

如何将一个 HSF 应用无缝升级成 Dubbo 3.0 应用

三位一体是阿里巴巴“自研”、“开源”、“商业化”采用统一技术体系,在此技术方向下,Dubbo3.0 的设计与落地实现了 HSF/Dubbo 的技术统一,在集团内也正在快速推广落地中。同时 EDAS Container 4.x版本,正是 Dubbo3.0 的商业化输出形式之一。

如果您的应用在 EDAS 或者 SAE 上,使用的是 HSF + EDAS Container 这一套的架构,用户只需升级容器版本至 4.x 就可以便捷的将 HSF 应用升级为 Dubbo 3.0 应用。升级之后,HSF 应用可沿用原有开发方式,还可以使用 EDAS/SAE 为 Dubbo 应用提供的更加完善的服务治理功能。同时您的HSF应用也将会具备 Dubbo 3.0 的各种新特性、应用级服务发现、Triple 协议等。

Java 微服务 Proxyless Mesh 架构

在异构微服务场景下,随着 ServiceMesh 方案的普及,原先微服务应用如何在 Service Mesh 微服务架构中与其他 Mesh 节点进行互通以及治理能力对齐成了困扰用户的问题。开源 Spring Cloud / Dubbo 框架在MSE微服务引擎上无需增加 Envoy,同时也无需修改任何一行代码就可以与 Mesh 架构互通。

Dubbo3.0 的大规模生产实践案例

Dubbo3.0 在落地的过程中,我们具备许多大规模的实践,考拉、钉钉等。

下面以钉钉为例介绍

背景

为了拥抱容器化、享受云上的福利,钉钉文档在 2020 年启动了上云战役。目前已有 50% 的流量,跑在公有云集群。

业务挑战

文档的上云,分成了两个阶段。

第一阶段,弹内(即阿里集团内网络)和云上各有一个文档集群:弹内集群承接存量业务;云上集群承接增量业务。弹内集群同时起了代理的功能:对弹内的上游服务来说,弹内集群代理了对文档云上集群的调用;对云上集群来说,弹内服务代理了集团内下游的依赖。

5.png

第一阶段:弹内、云上各有一个集群

第二阶段,存量数据迁移到了云上,只保留云上集群。上游服务、下游依赖,都是通过 triple 协议直接调用。

6.png

第二阶段:只有一个云上集群

目前我们处于第一阶段。

在第一阶段,我们有几个诉求:

1、希望使用一套代码,跑在弹内、云上两个集群;

2、希望弹内集群继续使用 HSF 协议;

3、希望云上使用开源的 RPC 协议;

4、希望云上、弹内集群,可以互通。

而 Dubbo 3.0,完美的契合我们的需求。

落地方案

1、双集群

7.png

文档目前有两个集群。弹内集群暴露了 triple、hsf 双协议,云上集群仅暴露 triple 协议。

弹内的版本号保持 1.0.0 不变,云上使用 1.0.0.ZJK 的版本号。

对上游服务来说,只有弹内一个集群,所有流量都是打到弹内集群。这样上游业务无需做任何改造。

2、单元化路由

弹内服务,对到来的 HSF 请求进行拦截。如果解析出需要将请求路由到云上,则对云上服务发起一次 triple 调用。否则,继续将请求交给弹内的服务。

3、下游依赖

8.png

文档有一些对弹内服务的依赖,去除不掉。目前的做法,是文档自己把下游服务做一次封装,暴露出 triple 协议,供云上调用。

4、服务治理

服务互通完成了之后,就是开始看如何进行服务治理了。包括服务查询、服务测试、服务压测、服务限流、服务监控等。

4.1 MSE

服务查询、服务测试、服务路由等,都是通过接入 MSE 完成的。这里要特别提一下 MSE 的服务测试。业务同学最开始是在本机 curl hsf 的 http 端口进行测试,非常麻烦,但是在接入 MSE 服务治理之后,就可以直接用 MSE 平台的服务测试功能。服务测试即为用户提供一个云上私网 Postman ,让用户能够轻松调用自己的服务。用户无需感知云上复杂的网络拓扑结构,无需关系服务的协议,无需自建测试工具,只需要通过控制台即可实现服务调用。支持 Dubbo 3.0 框架,以及 Dubbo 3.0 主流的 Triple 协议。

4.2 其他

9.png

由于云上使用了标准的 Dubbo 协议,Ahas、Arms 等中间件,都可以无缝的接入。

总结

钉钉文档借助三位一体的红利实现三个月内快速上云,通过云产品方式产品化标准化地解决了上云过程中遇到的问题,借助 Dubbo3.0 的云原生特性,以及 MSE 服务治理能力的快速接入与支持,快速完成服务框架从互通到治理的落地。

自研、商用、开源的“三位一体”,使得我们在 双11 中沉淀的核心技术可以直接给到客户使用,省略了经过云上沉淀再输出的过程,降低了客户获取 “双11 同款技术引擎” 的门槛和成本,可帮助客户快速迈入数字原生时代。Dubbo3.0 正是在这个战略下的选择,Dubbo3.0 和基于 Dubbo3.0 内核的 HSF 正在外部和内部齐头并进,为阿里云上、集团内、以及开源的用户提供最佳的用户体验,一起参与来打造最稳定的服务框架,在云原生时代下引领微服务的发展。

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

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

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

相关文章

全球首款乘云而来的存储产品CDS诞生!

9月22日,阿里云发布全球首款“云定义存储”(Cloud Defined Storage,CDS)产品。作为一款本地部署的分布式存储产品,阿里云CDS拥有与公共云存储相同的技术架构,让企业客户在本地也能部署和使用与公共云一致的…

性能提升3倍、时延降低70%,阿里云企业级存储ESSD云盘再升级!

9月22日,阿里云存储年度新品发布会上,阿里云基础产品资深产品总监陈起鲲发布了其全球领先的旗舰级块存储产品ESSD的两款新规格(ESSD Auto PL、ESSD PL-X),并宣布了新增的多项企业级能力。 据了解,ESSD是阿…

一图看懂,什么是“云定义存储”

世界的诞生是从盘古开天辟地开始 而数据的存储 则由在龟甲上刻下的第一个字开始 经过数千年发展 数据存储也从最初的 龟壳、竹简等材料逐步进化到磁带、硬盘甚至云上 在之前几千年里 人们对于数据存储的需求并没那么高 仅仅通过纸张就能将所有数据记录下来 随着第一台计算机面…

Android 13 第一个开发者版本来了,网友直呼:Android 12 还没玩透!

整理 | 苏宓出品 | CSDN(ID:CSDNnews)2 月 10 日,Google 宣布 Android 13 首个预览版面向开发者开放,此版本重点聚焦隐私和安全、提供开发者生产力、应用兼容性,并保持与 OpenJDK 11 更新一致、提供主题图标…

「技术人生」第6篇:技术同学应该如何理解业务?

简介: 本文以大量理论论述解析业务,并提供多种基于不同场景的实操方法,帮助技术同学以科学、合理的方式开展日常工作、指导团队开展业务建设,保障顶层设计的落地执行。 一. 背景 目前已经发布《技术一号位的方法论》系列文章其实…

参数设置_变频器基本参数设置

工业设备的使用如何达到最大效能以及最佳效果,需要使用人员充分了解设备性能以及工艺要求,所以变频器参数设置或者优化是非常重要的环节,古人云失之毫厘差之千里就是这个道理。一、变频器基本参数设置参数设置可以是手持编程器操作&#xff0…

Morphling:云原生部署 AI , 如何把降本做到极致?

简介: Morphling 本意是游戏 Dota 中的英雄“水人”,他可以根据环境要求,通过灵活改变自身形态,优化战斗表现。我们希望通过 Morphling 项目,实现针对机器学习推理作业的灵活、智能的部署配置改变,优化服务…

datax参数设置_DataX Web数据增量同步配置说明

一、根据日期进行增量数据抽取1.页面任务配置打开菜单任务管理页面,选择添加任务按下图中5个步骤进行配置1.任务类型选DataX任务2.辅助参数选择时间自增3.增量开始时间选择,即sql中查询时间的开始时间,用户使用此选项方便第一次的全量同步。第…

Node18 即将支持 import HTTP资源!

作者 | 零一来源 | 前端印象最近看到Node官方提交了一条commit ,并且已经合入 master分支 ,如下图所示:node master commit由此可见,Node18可能会支持一个非常 nice 的功能,那就是 支持 import 远程HTTPS资源和本地的H…

MYSQL深潜 - 剖析Performance Schema内存管理

简介: 本文主要是通过对PFS引擎的内存管理的源码的阅读,解读PFS内存分配及释放原理,深入剖析其中存在的一些问题,以及一些改进思路。本文源代码分析基于Mysql-8.0.24版本。 作者 | 之枢 来源 | 阿里技术公众号 一 引言 MYSQL Pe…

基于MaxCompute SQL 的半结构化数据处理实践

简介: MaxCompute作为企业级数据仓库服务,集中存储和管理企业数据资产、面向数据应用处理和分析数据,将数据转换为业务洞察。通过与阿里云内、外部服务灵活组合,可构建丰富的数据应用。全托管的数据与分析解决方案,可简…

file_get_contents请求失败处理_SpringCloud Gateway网关处理请求过程中遇到400Bad Request问题解决方案...

大家在使用springcloud自己的gateway作为网关服务时,可能会不小心遇到自定义的Filter处理请求Request报文时出现400的错误,而且这个错误还不是每次请求都必现,额什么意思?难不成你是说请求还时好时坏?bingo&#xff01…

CSDN企业数字化之路 ——「低代码」发展研讨会北京站现场实录大放送

作者 | 千鸟 出品 | CSDN云计算(ID:CSDNcloud) 2021年底,CSDN面向行业开发者和高校学生开发者,展开了关于“低代码”的开发者调研活动。基于调研数据,CSDN提出了对低代码发展趋势的五大方向。在随后举行的 …

MaxCompute 存储设计

简介: 存储策略该怎么设计 写这篇存储规划的文章主要是想告诉大家该如何给存储做一个规划,在关系数据库的时代存储昂贵且珍惜,掰手指头花钱是存储规划的常态。但是到了大数据时代大家又立即就都变成印美元的美国政府了,感觉存储很…

Serverless Devs 2.0 开箱测评:Serverless 开发最佳实践

简介: 当下,Serverless 概念很火,很多同学被 Serverless 的优势吸引过来,比如它的弹性伸缩,免运维,高可用,资费少。但真正使用起来去落地的时候发现问题很多,大型项目如何组织函数&a…

【CDS技术揭秘系列 总篇】阿里云的云定义存储来了

简介: 全新发布的云定义存储 CDS 和传统的存储阵列、分布式存储、软件定义存储的区别在哪里?阿里云存储团队如何看待将来存储的发展趋势?本文邀请了 CDS 研发团队的核心技术负责人为大家揭开围绕着阿里云 CDS 的种种谜团。 云定义存储&#…

TSDB时序数据库时序数据压缩解压技术浅析

简介: 目前,物联网、工业互联网、车联网等智能互联技术在各个行业场景下快速普及应用,导致联网传感器、智能设备数量急剧增加,随之而来的海量时序监控数据存储、处理问题,也为时序数据库高效压缩、存储数据能力提出了更…

Atmosic推出ATM33新品,全新的ATM33系列性能大升级

为减少各种物联网产品高昂的电池更换成本,以及降低对环境的危害,在上个月举行的媒体发布会中,Atmosic营销及业务拓展副总裁 Srinivas发布了公司的新产品——ATM33,并详细解析了ATM33的技术特性和主要应用领域。 ATM33系列产品可支…

什么是低代码(Low-Code)?

简介: 什么是低代码?我们为什么需要低代码?低代码会让程序员失业吗?本文总结了低代码领域的基本概念、核心价值与行业现状,带你全面了解低代码。 阿里云 云原生应用研发平台EMAS 彭群(楚衡) 一…

php用wordanalysis抓取姓名_利用vba查询/抓取 外部数据

考虑这么一个excel文件,路径为:"E:dataEdata.xlsx",样式如封面图片所示想要在其他excel文件中,通过代码直接抓取Edata.xlsx中想要的数据,做法如下:先在Visual Basic中勾选“工具-引用-Microsoft …