手机阿里巴巴聊天记录迁移(阿里巴巴聊天记录转移)
手机阿里巴巴聊天记录迁移(阿里巴巴聊天记录转移)
服务框架就像铁路的铁轨一样,是互通的基础,只有解决了服务框架的互通,才有可能完成更高层的业务互通,所以用相同的标准统一,二为一并共建新一代的服务框架是必然趋势。
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 毕业的项目。
HSF 在阿里巴巴使用更多,承接了内部从单体应用到微服务的架构演进,支撑了阿里历年双十一的平稳运行;自 2008 年 5 月发布个版本 1.1 后,经历数年迭代,HSF 从一个基础的 RPC 框架逐渐演变成为日支撑十万亿级别调用的易于扩展的微服务框架。内部场景中,用户既可以选择少量配置轻松接入微服务体系,获取高性能的稳定服务调用。也可以按照自身业务需求,对 HSF 进行扩展,获取整条链路的能力增强。
下一代微服务的挑战和机遇
然而,业务的发展和框架自身的迭代使得两个框架从协议层的简单兼容已经无法满足需要。随着云计算的不断发展和云原生理念的广泛传播,微服务的发展有着以下趋势:
这些趋势也给 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 完全兼容的前提下,同时具备了以下几大面临云原生挑战下的新特性
对于微服务框架来说,由于关联到客户的业务代码,要做商业化还是有非常大的挑战的。
对于商业化中微服务框架的选择,我们选择的态度一直是拥抱开源。
我们还需要在开源微服务框架的基础上提供差异化的服务治理能力,传统开源微服务框架在 K8s 上的问题在上云的过程中逐步暴露出来。通过一系列和客户的交流,我们总结出了客户的云原生下进行微服务治理的几大痛点,主要包括微服务发布过程中的无损上下线,标签路由,服务鉴权,离群实例摘除,全链路灰度等等,我们通过 Java Agent 技术实现了在用户不改代码的情况下,解决了上述问题,通过客户交流,收集需求,落到产品,给客户 demo 验证这个模式跑通了正向的循环,功能不断丰富中。除了Java Agent,对于多语言的场景我们使用 Service Mesh、WA 等技术,同样支持客户无需修改一行代码,就具备于 Java 应用一致的服务治理能力与体验。
同时在Java Agent 的选择上我们也有过一些尝试跟选择,一开始我们使用闭源开发的 Java Agent,每个云产品都有一个对应的 Java Agent,这样会导致 Java Agent 过多以及Agent冲突等问题,同时由于我们自己维护的 Java Agent 又是闭源的。踩过一些坑后,我们决定使用 Arthas One Agent 重构服务治理体系的 Agent,将治理相关的 Agent 成一个,同时我们底座的 Java Agent 也使用拥抱开源的策略,我们使用开源的 Arthas One Agent。
Dubbo3.0 顺应了这个方向,通过 Dubbo3.0 + Java Agent 将集团技术发展和 Dubbo 社区演进、以及商业化实践的技术红利不断且持续地输出给云上的客户。
服务治理无缝支持 Dubbo3.0
阿里云上微服务治理相关的三种解决方案: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 在落地的过程中,我们具备许多大规模的实践,考拉、钉钉等。
下面以钉钉为例介绍
背景
为了拥抱容器化、享受云上的福利,钉钉文档在 2020 年启动了上云战役。目前已有 50% 的流量,跑在公有云集群。
业务挑战
文档的上云,分成了两个阶段。
阶段,弹内(即阿里集团内网络)和云上各有一个文档集群:弹内集群承接存量业务;云上集群承接增量业务。弹内集群同时起了代理的功能:对弹内的上游服务来说,弹内集群代理了对文档云上集群的调用;对云上集群来说,弹内服务代理了集团内下游的依赖。
阶段:弹内、云上各有一个集群
第二阶段,存量数据迁移到了云上,只保留云上集群。上游服务、下游依赖,都是通过 triple 协议直接调用。
第二阶段:只有一个云上集群
目前我们处于阶段。
在阶段,我们有几个诉求:
1、希望使用一套代码,跑在弹内、云上两个集群;
2、希望弹内集群继续使用 HSF 协议;
3、希望云上使用开源的 RPC 协议;
4、希望云上、弹内集群,可以互通。
而 Dubbo 3.0,的契我们的需求。
落地方案
1、双集群
文档目前有两个集群。弹内集群暴露了 triple、hsf 双协议,云上集群仅暴露 triple 协议。
弹内的版本号保持 1.0.0 不变,云上使用 1.0.0.ZJK 的版本号。
对上游服务来说,只有弹内一个集群,所有流量都是打到弹内集群。这样上游业务无需做任何改造。
2、单元化路由
弹内服务,对到来的 HSF 请求进行拦截。如果解析出需要将请求路由到云上,则对云上服务发起一次 triple 调用。否则,继续将请求交给弹内的服务。
3、下游依赖
文档有一些对弹内服务的依赖,去除不掉。目前的做法,是文档自己把下游服务做一次封装,暴露出 triple 协议,供云上调用。
4、服务治理
服务互通完成了之后,就是开始看如何进行服务治理了。包括服务查询、服务测试、服务压测、服务限流、服务监控等。
4.1 MSE
服务查询、服务测试、服务路由等,都是通过接入 MSE 完成的。这里要特别提一下 MSE 的服务测试。业务同学最开始是在本机 curl hsf 的 http 端口进行测试,非常麻烦,但是在接入 MSE 服务治理之后,就可以直接用 MSE 平台的服务测试功能。服务测试即为用户提供一个云上私网 Postman ,让用户能够轻松调用自己的服务。用户无需感知云上复杂的网络拓扑结构,无需关系服务的协议,无需自建测试工具,只需要通过控制台即可实现服务调用。支持 Dubbo 3.0 框架,以及 Dubbo 3.0 主流的 Triple 协议。
4.2 其他
由于云上使用了标准的 Dubbo 协议,Ahas、Arms 等中间件,都可以无缝的接入。
钉钉文档借助三位一体的红利实现三个月内快速上云,通过云产品方式产品化标准化地解决了上云过程中遇到的问题,借助 Dubbo3.0 的云原生特性,以及 MSE 服务治理能力的快速接入与支持,快速完成服务框架从互通到治理的落地。
本文为阿里云原创内容,未经允许不得转载。
阿里巴巴