【直播】基于微服务 MSE 最佳实践|学习笔记(二)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 快速学习【直播】基于微服务 MSE 最佳实践

开发者学堂课程【微服务治理技术进阶【直播】基于微服务 MSE 最佳实践】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/1033/detail/15321


【直播】基于微服务 MSE 最佳实践


准备工作:

1、开通 MSE 服务治理

2、安装 Ingress-nginx 组建

3、部署 Demo 应用

此处已经部署好 demo 应用,可以进行查看,如图,输入 spring-cloud

图片6.png

可以看到有 abc 和 a-grey、b-grey、c-grey。再来查看 MSE 控制台,在应用列表中输入 spring-cloud,进入 spring-cloud-a,可以看到有 grey 环境和 base 环境

图片7.png

下面将演示如何使用全链路灰度环境的功能,点击创建泳道组。泳道组是我们涉及到流控的应用都可以加入,例如输入泳道组名称 demo,选择应用 spring-cloud-a、spring-cloud-b、spring-cloud-c,创建完成后可以看到此处都有相关的监控调用

图片8.png

可以看到一直在调用,因为已经配置好了 ingress 路由并且可以看到流量不论是打到 a 还是 a 的 gray,因为我们要开启泳道,所以后期会自动走到一个 base 环境中。

那么我们该如何将流量按照泳道的方式进行分流呢?只需要创建一个分流的泳道,泳道名称为 gray 环境泳道,可以选择标签,因为已经在控制台上打出了 gray 标,如果没有打标先进行打标然后在控制台上可以进行查看。选择标签会自动出现三个应用 spring-cloud-a、spring-cloud-b、spring-cloud-c,三个应用都打上了 gray 的标。创建完泳道后可以看到对于 bc,所有流量都打到未打标的。

图片9.png

此时不断地刷请求,可以看到当配完泳道后,打完 agray 的流量其实都会打到bgray、cgray,并且打到 base 的流量都到了 b 的 base 和 c 的 base。可以看到在没有配置泳道前,agray 最后都是打到一个线上的 base 环境。

图片10.png

可以理解配置泳道的作用是将 gray 环境的应用都串成一个泳道,往后会自动找gray 环境的一个标。到目前为止,流程已经完成。只需要创建一个泳道规则即可。

如图脚本可以看到流量明显成打到 base 环境一直在 base 环境,打到 gray 环境一直在 gray 环境。

图片11.png

此外还有一个能力可以看到刚才创建的 demo 应用

图片12.png

想要查看所有流量的情况,还可以点击流量监控,可以看到流量的分配情况。以上就是一个全链路灰度的演示。只需要几个简单步骤:创建泳道组(泳道组就是圈入所有我们需要关心的泳道组)、创建泳道(创建一个流量分流的泳道,只要配好入口应用的流量比例,后续都将经过对应环境的流量,继续往后传递下去形成一个泳道的概念)、第三步提供了一个监控以及全局的监控来验证流量特征是否符合全链路灰度的流量规则。

三、基于消息队列 RocketMQ 实现全链路灰度

全链路灰度-消息

图片13.png

原理入上图所示,在客户端发消息时会在用户属性中带上环境,订阅的都是同一个topic,我们会在消息的发送方带上用户的属性,如果是 gray 应用会带上 gray 环境,如果是未打标环境会带上 base 的标。消息经过 MQ 服务端后会经过一个 SQL92 的过滤,如果是 gray 环境的消费组,会将 gray 的消息发到 gray 的消费者中;如果是 base 环境的消息会将 base 环境的消息发到 base 环境的消费者中从而实现一个消息的灰度。。

准备工作:

开通 MSE 服务治理

部署 Demo 应用

图片14.png

在上述的应用中加入消息的方式,可以通过 /test 方式来实现一个灰度应用的调用,调用路径是从 dubbo 调到 a,dubbo 或 springcloud 调到 c,c 会产生消息再给 a 消费。可以看到 c 产生 base 消息,a 消费到 base;c 产生 gray 消息,a 消费到 gray。接着会通过一个消息灰度的能力来进行演示。但是都需要开通 MSE服务治理和部署 Demo 应用的。

此处已经部署好了 demo 应用 abc,并且都有 gray 和 base 环境。

图片15.png

可以看到产品上的一个提示,有三个步骤:第一步服务端要支持 SQL 的过滤,此处已经配置好,同时会有一个操作,如果服务端配置好会自动创建。如果是使用阿里云的 MQ,需要提前创建好 group。只需要打开消息灰度即可,此处已经打开。

我们需要配合调用将整个链路都在灰度环境中闭环。此处配置了一个灰度的消息的消费:

图片16.png

如果参数 name=xiaoming 或者换成 user=test,走到灰度环境,然后 a 调用 b 再调用 c,然后 c 产生灰度的消息从而再消费消息。

在网址上查看路径,输入网址后可以看到其实都是灰度的流量。

图片17.png

如果输入 user=test1 是不满足灰度环境,会走 base 环境。现在来恢复 user=test的调用来查看消息的灰度是否生效。可以看到当前在 a 的 base 环境未打标环境,如果 c 发送的是未打标消息,a 收到打印出对应的消息其实是一个 a 的未打标环境。c 生产出未打标的消息然后由 a 进行消费。再来查看 agray 环境,可以看到 c产生消息后,a 消费到的都是一个 gray 环境的消息。以上就是简单的消息灰度的演示,整个步骤还是比较简单,但是需要一定的前置条件:支持 RocketMQ 版本>4.2.0、支持 Pull 和 Push 两种模式、需要在服务端配置 enablePropertyFilter=true 并重启服务端。

上述已经演示了灰度消息生效的场景,为了节省时间,本地已经搭建好了环境。流程总结只需要两个步骤,如果前提环境准备好,只需要编辑打开对应的环境。未打标环境忽略的标签是指例如回到刚才的场景下,如果在该过程中,gray 产生了消息但是消费者回滚,那么 server 端会堆积一些带上 gray 标的消息,此时如果 gray 环境的消息的消费者已经回滚,那么应该如何操作?此时通过这种方式,如果删掉就相当于未打标环境忽略的标签。服务端会堆积一堆 gray 环境的消息但是 gray 环境的消费者已经下线,此时我们就希望消息是被线上的 base 环境进行消费。就需要将忽略的标签删除,所有的消息就会被消费。但是如果我们不希望发生这种场景,只需要在此处输入需要被忽略的哪些标的消息。

图片18.png

四、总结

本节内容都是围绕全链路灰度产品化进行展开。先介绍了 MSE 全链路灰度产品化的能力,引入了一个泳道的概念,通过泳道可以做很多操作(例如之前提到的日常环境隔离以及一些核心应用的重保和一些全链路灰度的能力。)基于全链路灰度的能力的扩展还做了很多解决方案(例如基于 cloud 实现微服务的端云互联,以及基于 ingress 实现的全链路灰度。同时可以将 ingress 的实现换成 MSE 微服务网关。

也可以使用自建的 springcloud 等微服务网关来实现全链路灰度)。第二部分介绍了基于消息队列 RocketMQ 实现的全链路灰度(还支持将全链路灰度与CI/CD结合,通过 Jenkins 构建 CI/CD 实现路由的能力。还有基于日常环境隔离和端云互联实现一个微服务敏捷开发的最佳实践等与全链路灰度能力相关的解决方案。

并且随着用户的场景与实践的增加,解决方案会不断的完善与丰富。)第三部分分别演示了 RPC 全链路灰度、Rocket MQ 灰度的产品化方案。通过在控制台上增加开启消息灰度以及如果没有配置,base 环境会默认消费所有的消息。也可以增加一些 base 环境过滤的标签,即 base 环境忽略哪些标签。从而实现在变更或者回滚过程中避免丢失消息的情况。

在该部分我们还分享了来电科技的案例,来电科技使用的方式就是全链路灰度产品化的能力。它们通过创建一个小流量验证的泳道,从而实现小流量验证的场景。

MSE 的全链路灰度能力会随着客户场景的深入而不断迭代与扩展,只有经过客户打磨的产品才会愈发历久弥新。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
2月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
2月前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与最佳实践
在微服务架构中,数据库访问的效率直接影响到系统的性能和可扩展性。本文探讨了优化微服务架构中数据库访问的策略与最佳实践,包括数据分片、缓存策略、异步处理和服务间通信优化。通过具体的技术方案和实例分析,提供了一系列实用的建议,以帮助开发团队提升微服务系统的响应速度和稳定性。
|
3月前
|
监控 JavaScript 测试技术
从单体应用迁移到微服务的最佳实践
【8月更文第29天】随着软件架构的发展,越来越多的企业开始考虑从传统的单体应用迁移到微服务架构。虽然迁移可以带来诸如更好的可扩展性、更高的灵活性等优势,但这一过程也可能充满挑战。本文将详细介绍如何顺利地进行这一转变,并提供一些实用的步骤和示例代码。
132 0
|
5月前
|
消息中间件 Cloud Native 安全
《阿里云产品四月刊》—得物 ZooKeeper SLA 也可以 99.99%丨最佳实践(1)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
《阿里云产品四月刊》—得物 ZooKeeper SLA 也可以 99.99%丨最佳实践(1)
|
5月前
|
Cloud Native 数据库 存储
《阿里云产品四月刊》—得物 ZooKeeper SLA 也可以 99.99%丨最佳实践(2)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
《阿里云产品四月刊》—得物 ZooKeeper SLA 也可以 99.99%丨最佳实践(2)
|
4月前
|
Kubernetes 测试技术 数据库
详解微服务应用灰度发布最佳实践
相对于传统软件研发,微服务架构下典型的需求交付最大的区别在于有了能够小范围真实验证的机制,且交付单位较小,风险可控,灰度发布可以弥补线下测试的不足。本文从 DevOps 视角概述灰度发布实践,介绍如何将灰度发布与 DevOps 工作融合,快来了解吧~
30934 18
|
5天前
|
监控 Cloud Native 持续交付
云原生架构下微服务的最佳实践与挑战####
【10月更文挑战第20天】 本文深入探讨了云原生架构在现代软件开发中的应用,特别是针对微服务设计模式的最优实践与面临的主要挑战。通过分析容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,阐述了如何高效构建、部署及运维微服务系统。同时,文章也指出了在云原生转型过程中常见的难题,如服务间的复杂通信、安全性问题以及监控与可观测性的实现,为开发者和企业提供了宝贵的策略指导和解决方案建议。 ####
29 5
|
4天前
|
Kubernetes Cloud Native 持续交付
云原生架构下的微服务设计原则与最佳实践##
在数字化转型的浪潮中,云原生技术以其高效、灵活和可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务设计的关键原则与实施策略,旨在为开发者提供一套系统性的方法论,以应对复杂多变的业务需求和技术挑战。通过分析真实案例,揭示了如何有效利用容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,构建高性能、易维护的云原生应用。文章还强调了文化与组织变革在云原生转型过程中的重要性,为企业顺利过渡到云原生时代提供了宝贵的见解。 ##
|
5月前
|
Cloud Native 数据库 测试技术
《阿里云产品四月刊》—得物 ZooKeeper SLA 也可以 99.99%丨最佳实践(3)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
《阿里云产品四月刊》—得物 ZooKeeper SLA 也可以 99.99%丨最佳实践(3)

相关产品

  • 微服务引擎