在 Dubbo3.0 上服务治理的实践

简介: Dubbo 3.0 是在云原生背景下诞生的,使用 Dubbo 构建的微服务遵循云原生思想,能更好的复用底层云原生基础设施、贴合云原生微服务架构。

Dubbo3.0 介绍

作者 | 十眠

自从 Apache Dubbo 在 2011 年开源以来,经过多年一众大规模互联网、IT 公司的实践积累了大量经验,Dubbo 凭着对 Java 用户友好、功能丰富、治理能力强等优点在过去取得了很大的认可,成为国内外流行主流的 RPC 框架之一。

但随着云原生时代的到来,对以 Apache Dubbo、Spring Cloud 等为代表的 Java 微服务治理体系提出了新的要求,包括期望应用可以更快的启动、应用通信的协议穿透性可以更高、能够对多语言的支持更加友好等。比如 Spring 在今年也推出了其基于 GraalVM 的 Spring Native Beta 解决方案,拥有毫秒级启动的能力、更高的处理性能等。

这样的背景对下一代 Apache Dubbo 提出了两大要求:

1、要保留已有开箱即用和落地实践背景下带来的好处,这也是众多开发者所期望的;

2、尽可能地遵循云原生思想,能更好的复用底层云原生基础设施、贴合云原生微服务架构。

Dubbo 3.0 是在云原生背景下诞生的,使用 Dubbo 构建的微服务遵循云原生思想,能更好的复用底层云原生基础设施、贴合云原生微服务架构。这体现在:

  • 服务支持部署在容器、Kubernetes 平台,服务生命周期可实现与平台调度周期对齐;
  • 支持经典 Service Mesh 微服务架构,引入了 Proxyless Mesh 架构,进一步简化 Mesh 的落地与迁移成本,提供更灵活的选择;
  • 作为桥接层,支持与 SpringCloud、gRPC 等异构微服务体系的互调互通。

在云原生大背景下,Apache Dubbo 3.0 选择全面拥抱云原生,对 Dubbo 架构升级,提出了全新的服务发现模型、下一代 RPC 协议和云原生基础设施适配等。

1.png

Dubbo3.0 商业版

下面我先介绍阿里云上微服务治理相关的三款云产品:EDAS、MSE、SAE。

  • EDAS

阿里云 aPaaS 产品,一站式部署发布平台,同时它是一艘航母,具备微服务治理、监控、压测、限流降级等一系列能力,同时它也是一个 AIOps 平台。

EDAS 3.0 作为分布式架构、数字化转型上云的首选在线业务应用托管平台,在微服务治理、应用发布变更以及智能运维等多个维度为用户应用提供智能化、自动化的解决方案。

"在 PaaS 层面,我们始终拥抱开源技术,并保持和社区版本兼容的时效性;在企业特性上,例如服务治理、应用监控等方面,我们提供一个稳定成熟的产品,来降低企业构建互联网化应用的门槛,例如企业级应用服务 EDAS 3.0 就是这样一个典型的产品"。

——阿里巴巴合伙人、阿里云智能基础产品事业部 高级研究员 蒋江伟

  • MSE

微服务引擎(Micro Service Engine,简称 MSE)是一个面向业界主流开源微服务生态的一站式微服务平台, 帮助微服务用户更稳定、更便捷、更低成本的使用开源微服务技术构建微服务体系。提供注册中心、配置中心全托管(兼容 Nacos/ZooKeeper/Eureka)、网关(兼容 Zuul/Kong/Spring Cloud Gateway)和无侵入的开源增强服务治理能力。

  • SAE

Serverless 应用引擎(简称 SAE)是首款面向应用的 Serverless PaaS,提供成本更优、效率更高的一站式应用托管方案。支持 Spring Cloud/Dubbo/HSF 应用零改造上云,提供监控诊断、自动构建镜像、Java 全链路加速、多发布策略、秒级自动弹性等能力,支持 Jenkins/云效/插件等部署应用,还能通过 Docker 镜像部署任何语言的应用。

以上三款云产品所有的服务治理能力开箱即用,支持近五年来市面上所有开源 Dubbo、Spring Cloud 框架,包括 Dubbo 3.0;以下的所有能力无需修改一行代码与配置,您只需将您的 Dubbo 3.0 的应用接入 EDAS/MSE/SAE ,都是开箱即用的能力。

1、完整的服务契约详情

在治理的过程中,服务契约是所有功能的原材料。在进行测试验证其可用性的时候,需要知道服务提供的方法,并根据方法参数自动填充模板,进而进行测试;在配置流量规则时候,需要能知道方法的参数,从而根据流量特征来进行流量规则配置;在进行服务降级、服务鉴权等配置的时候,需要根据方法的具体名称和参数类型,来给不同的方法在不同的参数或者返回值的时候进行不同的降级/鉴权策略。

开源的 Swagger 已经做得比较不错了,但是 MSE 的服务契约更加简单高效。开源的 Swagger 只需要引入依赖,并在编码的时候配置好 @API  注解,然后启动一个 Swagger 的 Server 端就能看到详情,美中不足的是没有适配 Dubbo。

考虑到要让用户不修改任何代码配置就能使用,且老旧版本的应用代码和镜像也得支持。因为如果需要开发的话,会因为侵入性比较大会影响迭代效率,我们还是选择了 Agent 方案,这样可以做到无需修改任何代码和配置,只需要将应用接入 One Agent,就可以在 MSE 控制台看到微服务的详情。

2.png

当然,如果应用本身已经接入了 Swagger,我们也能够做到很好的兼容支持。最后我们可以简单地看一下服务契约的效果,已经同时支持了 Spring Cloud 和 Dubbo 应用。

  • 可以详细的查看应用注册了哪些服务,以及这些服务的消费者有哪些;
  • 可以详细地查看应用提供的所有微服务方法;
  • 可以详细地查看应用提供的所有方法的返回值、参数的详情;
  • 服务测试、服务降级、服务鉴权这些功能,能够直接获取服务契约的数据以便后续的治理规则配置。

2、全链路流量控制

在微服务场景下,想让流量精确命中到整个链路上的某一个应用的灰度版本,想要控制流量在整条链路上完整且精确地按照预期流转,目前开源并没有提供这样的能力。但是我们常会碰到以下的场景,导致我们不得不去面对全链路流量控制的这个诉求。

如何做到项目/测试环境隔离?

我们首先通过新建项目环境,给每个项目环境都有唯一的一个项目标签。当流量带上这个项目标签后会路由到该项目环境,否则会去主干环境。项目环境隔离带来的好处是每个开发人员都可以有自己的项目环境,防止开发者们开发过程中的互相影响。

如何实现全链路灰度?

我们首先划分出灰度的机器,然后对线上所有应用部署灰度版本,灰度流量全部进入灰度版本,正常流量进入生产版本。灰度版本只针对灰度流量验证,有效减少风险。当我们要灰度发布 N 个应用,需要做到灰度流量在这 N 个应用的灰度版本之间路由。

下面这张图很好地说明使用流量控制让我们的开发同学在开发环境 1 和开发环境 2 各自部署各自的应用,可以实现环境隔离与全链路灰度的能力。

3.png

但是如果没有全链路流量控制的这套机制,各种开发/灰度/生产环境都要进行逻辑或者物理隔离,这就需要部署N套整套的微服务架构,成本非常高。

4.png

可以看到上图的基于全链路流量控制的方案才是更加合理的部署方案设计,我们提供了开箱即用全链路流量控制的能力,下面以电商架构中的下单场景为例介绍全链路流控功能。

客户下单后流量从入口应用(或者微服务网关)进来,调用交易中心,交易中心再调用商品中心,商品中心调用下游的库存中心。交易中心和商品中心各有两个新版本(1和2)在运行,需要对这两个新版本进行灰度验证。此时在入口应用(或者微服务网关)上期望将满足特定流控规则的请求流量路由到新版本,其余流量全部路由到线上(正式)版本。

5.png

我们只需在 EDAS 控制台创建如下全链路流量控制规则:

6.png

同时我们还提供了流量控制的监控大盘,可以实时查看各个应用的 qps 指标,来确认流量走向是否符合预期。

7.png

3、标签路由

EDAS/MSE 服务治理提供了标签路由的流量控制能力。每个 pod/ecs 都可以打上标签,标签被识别后会在控制台上展示,然后我们可以对标签设置比例和内容规则。

8.png

可以设置各个标签的流量比例:

8.5.png

也可以点击流量规则设置各个标签的内容流量规则:

9.png

如果有全链路诉求。上述 "是否透传" 开关可以用来透传标签。

4、开箱即用的服务测试

服务测试即为用户提供一个云上私网 Postman ,让用户能够轻松调用自己的服务。用户无需感知云上复杂的网络拓扑结构,无需关系服务的协议,无需自建测试工具,只需要通过控制台即可实现服务调用。支持 Dubbo 3.0 框架,以及 Dubbo 3.0 主流的 Triple 协议。

10.png

5、离群实例摘除

在微服务架构中,当服务提供者的应用实例出现异常时,服务消费者无法及时感知,会影响服务的正常调用,进而影响消费者的服务性能甚至可用性。

11.png

在上图的示例场景中,系统包含 4 个应用,A、B、C 和 D,其中应用 A 会分别调用应用 B、C 和 D。当应用 B、C 或 D 的某些实例异常时(如图中应用 B、C 和 D 标识的各有 1个和 2 个异常实例),如果应用 A 无法感知,会导致部分调用失败;如果业务代码写的不够优雅,有可能影响应用 A 的性能甚至整个系统的可用性。

在这里,主要介绍一下离群实例摘除。那什么是离群实例,在微服务集群中出现间歇性的单机抖动( load 极高、 CPU 短时无法响应、线程池满等),由于这些个别节点的抖动会导致整体集群的服务质量下降。这种情况在云上时常出现,特别是对于一些大客户来说,这种能力极为重要。为了提高业务的稳定性,我们需要一种自动化的方案当出现离群实例时,可以自动将其摘除,同时当其恢复健康后,又需要将其放回集群继续提供服务。

一句话总结:提供了业务单点异常自愈能力。

我们只需要选择框架类型与应用,然后配置允许的错误率下限即可。

12.png

6、服务鉴权

相比于开源的 Dubbo 3.0,MSE 提供了开箱即用的服务鉴权能力,保护你的敏感业务,可以做到精准地控制服务调用的权限。

当我们的业务发展后,我们的服务还会遇到权限控制的需求:比如优惠券部门的某个应用,同时包含了优惠券查询接口和优惠券发放接口,对于优惠券查询接口来说,默认公司内部的所有应用都有权限调用的;但优惠券发放接口只有客服和运营部门的某些应用才有权限调用。

如下图所示,MSE 用户可以对自己的服务进行权限管理,这里以 Dubbo 为例,下图中配置表明,应用 cartservice 发布的 com.alibabacloud.hipstershop.CartService 服务的 addItemToCart 的方法,只允许 frontend 这个应用调用。

13.png

精准的权限管理,可以让你更好地管理微服务调用的权限,保证业务的合规性,保障数据的安全。

7、服务 Mock

相比于开源 Dubbo 3.0 服务 Mock 能力,MSE 提供的是开箱即用的完整解决方案。

当您遇到业务高峰期,发现下游的服务提供者遇到性能瓶颈,甚至影响业务时。您可以通过服务 Mock 实现服务降级,对部分的服务消费者进行降级操作,让不重要的业务方不进行真实地调用,直接返回 Mock 的结果,将宝贵的下游服务提供者资源保留给重要的业务调用方使用,从而提升整体服务的稳定性。

开源已有的 Sentinel、Hystrix 等开源的熔断降级,主要是对不稳定的弱依赖服务调用进行熔断降级,暂时切断不稳定调用,避免局部不稳定因素导致整体的雪崩。熔断降级作为保护自身的手段,通常在服务消费端进行配置。

服务降级功能既支持在服务调用报错时候进行降级,同时也支持在服务调用正常时也开启,这样可以很好地保护服务提供者,将有限的资源更多地分配给关键的服务消费者。

在开发的过程中,相信我们大家都到过,下游依赖方开发进度比较慢,导致自己的开发进度被 block 的情况,在使用 微服务治理 Mock 功能之后,可以通过固定地 Mock 某个返回值,从而使得开发的过程不需要依赖于下游依赖方的进度,同时还可以灵活地在控制台变更 Mock 的规则,从而达到快速开发的目的。

如下图所示,当应用接入 MSE 之后,就可以在控制台中通过如下方式来提供服务 Mock 的功能。

14.png

8、服务监控

对于Dubbo应用线上监控以及诊断能力是必不可少的能力,我们提供了以下完整且开箱即用的应用监控能力,可以让应用的运维变得轻松高效。

  • 应用详情

15.png

  • 应用依赖服务以及应用实例/状态码统计

16.png

  • 应用的系统信息与慢调用次数监控

17.png

  • 应用数据的统计分析

18.png

  • 应用的调用拓扑分析

19.png

小结

EDAS/MSE/SAE 服务治理中心是商业化版的 Dubbo Admin,但不止于此,我们通过无侵入方式增强市面上 Dubbo/Spring Cloud 等框架的全部版本,提供了一站式完整的微服务治理能力的解决方案。

不只是 Dubbo3.0

同时,EDAS/MSE/SAE 服务治理也将 Dubbo 3.0 一些优秀的设计以及能力通过无侵入服务治理能力普惠到 Dubbo 2.x 以及 Spring Cloud 框架。

1、微服务与K8s生命周期对齐

如果微服务没有实现其接口,当部署架构 K8s 化,在应用的 缩容、扩容、重启、新版本发布 这些过程中,会出现影响业务的错误,所以要配置好微服务在 K8s 环境下的健康检查。

其实仅仅是做健康检查其实不够:因为出现上述场景的原因可能有很多:

1、应用的下线过程中:应用提供者正常收到 kill 信号,提供者处理完在途请求再停止,注册中心感知提供者下线,消费者收到下线通知,消费者刷新调用列表 等等这些过程中,都可能出现错误和延迟。

2、应用上线过程中也可能出问题:服务还未注册订阅完成Pod的健康检查已经就绪,Dubbo 还没准备好大流量就进来了,数据库/Redis 建立连接导致初次请求失败,JVM 类加载出现锁导致启动缓慢,健康检查写的有问题导致滚动发布过程中没有一个健康的节点等等。

上述的阶段,都有可能出现问题,这些问题都是需要解决和保证的。这个可以通过开源的方式一个个去解决,比如调整注册中心的配置,调整连接池的配置,调整镜像打包文件,自己写代码实现在途请求处理完的逻辑等等。也可以选择使用 MSE 方案,不需要修改代码,只需要接入 MSE 即可, 只需要接入一次,接入过程在 5 分钟之内。

Readiness 检查

MSE 会提供一个 Readiness 接口,该接口会在微服务启动完全就绪后,返回的 status 会成为 200,否则返回 503。

Liveness 检查

MSE 会提供一个 Liveness 接口,该接口在判断微服务就绪后且服务状态为健康,返回的 status 会成为 200,否则返回 503 。

我们只需将相关配置配置在K8s提供的接口上即可。

2、无损上下线

若您的应用没有具备无损下线的能力,您的任何应用在发布的过程中会造成短暂的服务不可用,短时间内业务监控会出现大量 io 异常报错。如果您的业务没做好事务,那么还会引起数据不一致的问题,您需要紧急手动订正错误数据。每次发布,您需要发告示停机发布,否则您的用户会出现一段时间服务不可用,会对用户产品体验造成影响。

对于任何一个线上应用,如何在服务更新部署过程中保证业务无感知是开发者必须要解决的问题,即从应用停止到重启恢复服务这个阶段不能影响正常的业务请求,目前开源的框架均不能很好地解决这个问题。

当您的应用接入MSE/EDAS/SAE 后,将通过无侵入的方式自动增强 Dubbo 和 Spring Cloud 流量的无损下线能力。微服务治理中心将无损下线的能力整合在 K8S 的生命周期中,对 ACK 集群中的应用进行部署、回滚、缩容等操作时,会自动实现无损下线的效果。

3、服务并行注册订阅

Dubbo 默认服务注册/订阅行为是串行执行,当您的 Dubbo 应用中服务数过多,该流程会变得很长,影响应用启动时长,存在一定的稳定性风险;为了应用可以更快的启动,MSE 会通过无侵入的方式增强你的微服务框架,只需加一个开关,就能开启服务并行注册与订阅,大大减少应用启动时长。

总结

Apache Dubbo 3.0.0 是捐给 Apache 后的一个里程碑版本,代表着 Apache Dubbo 全面拥抱云原生的一个节点。

EDAS/MSE/SAE 服务治理能力也在随着云原生微服务的发展以及 Dubbo 的演进而不断丰富,随着客户大规模上云后,一些云原生场景下微服务的痛点也不断浮出水面,我们致力于无侵入的微服务治理增强,在解决客户痛点的过程中保证云上客户的业务永远在线,使得云原生微服务的架构升级更加 easy 。

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

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

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

相关文章

redis 可视化工具_自荐一个有情怀的跨平台Redis可视化客户端工具——RedisViewer...

介绍在以往的文章中曾经介绍过几款Redis的可视化工具,在笔者的印象中,Redis至今没有一款非常专业的可视化管理客户端,就算之前介绍过的几款也是差强人意,有些时候满足不了我们的需求,而今天本文要介绍的是另一款值得推…

内核热补丁,真的安全么?

简介: Linux 内核函数的热替换“撞上”函数调用约定还靠谱吗? Linux 内核热补丁可以修复正在运行的 linux 内核,是一种维持线上稳定性不可缺少的措施,现在比较常见的比如 kpatch 和 livepatch。内核热补丁可以修复内核中正在运行的…

谁是 2021「IT 圈」年度 C 位?快来报名,彰显你的影响力!

2021年,数字化转型正磅礴兴起,大批传统企业正在拥抱数字化,云计算、大数据、AI、5G应用能力正在变成企业的核心竞争力;核心技术正在崛起,在操作系统、数据库,依靠开源的力量,众多开发者背后的行…

当Java遇上机密计算,又一段奇幻之旅开始了!

简介: 汪少军:如何为Java业务提供机密计算保护? 写在前面 在信息世界里,数据存在三种状态: 存储态、传输态和计算态。存储在数据库或磁盘中的数据属于存储状态,在网络中传输的数据属于传输状态&#xff0c…

电脑桌面归纳小窗口_电脑一分钟小技巧:如何将电脑设置为定时关机?

关注公众号,发现好教程如何设置电脑设置定时关机呢?哈哈哈,可能这个教程用处不大,不过每个教程都有它的用处,这个也算是教程哈!有些小伙伴可能需要这个教程!至于什么用处,我就不多说…

时序数据库永远的难关 — 时间线膨胀(高基数 Cardinality)问题的解决方案

简介: 本文主要讨论 influxdb 在遇到写入的数据出现高基数 Cardinality 问题时,一些可行的解决方案。 作者 | 徐建伟 (竹影) 前序 随着移动端发展走向饱和,现在整个 IT 行业都期待着“万物互联”的物联网时代。在物…

中文巨量模型“源1.0”:模型结构与生成效果解析

浪潮人工智能研究院 “源 1.0”自 2021 年 9 月底发布以来收获了广泛的关注。其参数量达 2457 亿,超越美国 OpenAI 组织研发的 GPT-3。“源 1.0”在语言智能方面表现优异,获得中文语言理解评测基准 CLUE 榜单的零样本学习(zero-shot&#xff…

python中gmtime的hour错误_python中gmtime的hour错误_在Python中操作日期和时间之gmtime()方法的使用...

python中datetime怎么用广告总是在最精彩的时候出现,你总是在小编爱的最深的时候离开。 日期相关的操作 from datetime import datetime from datetime import timedelta DATE_FMT %Y-%m-%d DATETIME_FMT %Y-%m-%d %H:%M:%S DATE_US_FMT %d/%m/%Y 格式化常用的…

webview键盘自适应_黑爵毛茸茸机械键盘:感受来自治愈系的暖萌

随着近几年电竞业的火爆,特别是女性玩家的增多,越来越多的外设厂商推出了个性化定制的产品,比如符合女生群体的鼠标、键盘、显卡甚至主板等。今天为大家介绍的这款黑爵毛茸茸机械键盘,是黑爵Project C系列的第三款主题键盘&#x…

阿里云云效技术专家分享:云原生开发、调测及可靠发布解决方案

简介: 高效开发、稳健发布。 在云原生环境中,基于Kubernetes的工具链一方面简化了开发者的许多日常琐碎,另一方面也带来了许多新的概念和工作方式的改变。本篇文章将聚焦于云原生基础设施,谈谈如何在面向云原生的开发流程中&…

代码质量第 5 层 - 只是实现了功能

产品实现的功能是产品价值的体现形式。功能实现是基础。功能没有实现,其他方面做得再好也没有意义。那么,如何保证实现的功能覆盖了需求呢? 产品实现的功能是产品价值的体现形式。功能实现是基础。功能没有实现,其他方面做得再好也…

阿里巴巴 DevOps 工具体系

简介: 随着阿里巴巴多元化业务 20 多年的高速发展,技术体系经历了 web 时代、移动化时代、数据智能时代、云计算时代等多个重大变革。在这些变革中,开发者面对的技术体系、工具体系、知识体系也在不断进化。研发工具在其中起到了技术规模化和…

云原生引领全云开发时代

简介: 云原生是近几年最火爆的技术热词之一,几乎所有的云计算产品都会或多或少跟云原生发生关联,云原生正在重塑整个软件的生命周期。但到底什么是云原生?云原生带来的最大的技术创新和未来机会是什么?以及&#xff0c…

中国首部智能交通微纪录片正式发布 探讨交通强国高质量发展路径

12月23日,由央视财经出品,中国首部智能交通题材微纪录片《大国交通-车路智行》正式发布。该微纪录片全景式呈现出中国交通领域智能化转型历程,探索了交通强国高质量发展的中国路径。据悉,《大国交通-车路智行》微纪录片共五集&…

Kettle on MaxCompute使用指南

简介: Kettle是一款开源的ETL工具,纯java实现,可以运行于Windows, Unix, Linux上运行,提供图形化的操作界面,可以通过拖拽控件的方式,方便地定义数据传输的拓扑。Kettle支持丰富的数据输入输出源&#xff0…

使用AirFlow调度MaxCompute

简介: airflow是Airbnb开源的一个用python编写的调度工具,基于有向无环图(DAG),airflow可以定义一组有依赖的任务,按照依赖依次执行,通过python代码定义子任务,并支持各种Operate操作器,灵活性大…

css让背景图片显示透明遮罩_CSS项目测试(支持深色模式)

*事先声明:本文章教程教学、文章封面来源自[CSS]聚光灯项目 by CodingStartup起码课,且已经CodingStartup起码课授权允许转载!为了保持原有风格,本文始终保持与CodingStartup起码课的视频风格一致*在出现同样的代码块时&#xff0…

一文读懂阿里云直播技术是如何实现的

简介: 东京奥运会已落下帷幕。比赛期间,全球亿万观众蜂拥至各大转播平台观看奥运赛事,平台直播能力显的尤为重要。阿里云作为视频直播平台的技术提供商,凭借在产品技术、资源带宽、服务保障等方面优势,可为各大转播平台…

低代码发展专访系列之七:低代码的火爆需要不一样的声音么?

编辑 | 曹芊芊话题:低代码发展系列专访前言:2019年开始,低代码爆火。有人认为它是第四代编程语言,有人认为它是开发模式的颠覆,也有人认为是企业管理模式的变革……有很多声音,社区讨论很热烈。CSDN随后展开…

启动、内存、卡顿三大分析,用户体验就用它?

简介: 启动分析支持通过预置采集和个性化自定义两种方式定义启动阶段,可以分别查询首次启动、冷启动、热启动的情况效果,并可以与设备、系统、版本、地域等维度做交叉筛选查询。 随着大量应用涌入市场加入“App内卷之战”,终端用…