微服务治理之全链路灰度|学习笔记(一)

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 快速学习微服务治理之全链路灰度

开发者学堂课程【微服务治理之全链路灰度微服务治理之全链路灰度】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/973/detail/14894


微服务治理之全链路灰度

 

内容介绍

单体架构与微服务架构的区别

微服务架构带来的挑战

什么是全链路灰度

全链路灰度的解决方案

五、流量入口:网关

六、从0到1实践全链路灰度

在微服务体系架构中服务之间的依赖关系是非常复杂的。有时某个功能发板依赖多个服务同时升级上线。对这些服务的新版本同时进行一些小流量灰度验证,这就是微服务架构中特有的全链路灰度场景。

本次课程一方面加深对全链路灰度的认识此外可以了解阿里云如何把阿里巴巴内部多年积累的恢复治理能力输出到云产品上面。

 

一、单体架构与微服务架构的区别

在早期的业务系统单体架构是非常普遍的,单体架构的核心思想是把所有的服务一起打包进行部署。现如今一些初创的公司进行项目立项,也会首选单体架构。因为单极架构部署结构简单便于理解。

图片1.png

如图所示单体架构的举例,蓝色部分是单体的应用,apipass匹配的路由user card and order对应用户服务购物车服务订单服务应用前端的流量网关是四层代理主要负责负载均衡单体应用不是单脸部署的,为了高可用进行多实例部署,因此需要进行流量负载。

安全通信需要在流量网关这进行统一的证书卸载。

安全防护,是为了保护后端服务不被一些非法流量入侵。

单体架构整体结构较简单,部署非常方便,用维人员方便使用。但在较大的项目随着一些开发软件的加入代码也会随之膨胀单体架构应用打包编译的速度因为单体架构服务是紧合在一起,随着业务增长会导致整个业务系统复杂性

除此之外,单体架构的扩展性跟灵活性较为薄弱导致技术栈较为单一,sdk升级周期较长。为了解决就单体架构服务发布的敏捷性不够,灵活性较差的问题开发者开始对原来应用进行服务拆分,拆分一般会按照功能维度和业务域进行服务拆分。被拆分后的服务会独立部署。

图中,用户服务User、购物车服务Cart订单服务Order都是通过网络互相通信单独应用。微服务网关是七层网关,作用暴露后端服务以及流量治理。例如限流一些对内容进行修改在认证健全方面可以对终端用户进行统一的健全。

流量监控作为一个流量入口,对流量可观性要求较高。

总体来看微服务架构似乎是一个很好的一个模式,但是存在一个缺点,对于这么多的微服务,怎么进行有效的治理是一个很难的问题。

 

二、微服务架构带来的挑战

 图片2.png

服务发现解决的是服务之间的可见性问题;

负载均衡主要是消费者从服务提供者连接池里,去有效的选择一ip地址;

熔断限流是为了保护后端服务安全的水位;

认证健全不仅是需要对终端用户进行健全,服务之间也需要进行健全的,并且保护敏感数据的服务;

监控告警,可以有效的发现每个微服务的一些运行状况;

服务发布一个重点关注服务发布主要是为了解决服务发布过程中怎么平滑无损。

 

三、什么是全链路灰度

1.业务场景——单体架构下的服务发布

举例:购物车服务需要灰度发布,它作为应用的一部分,单体架构中的服务发布上升成为一个应用发布,应用发布需要对整个应用进行编译,打包以及按照一些发布策略进行升级。

          图片3.png

一个服务接口需要发布升级,需要:

1. 整个应用编译、打包部署

2. 按照发布策略进行升级

主要有蓝绿发布和灰度发布:

蓝绿发布

如下图所示:    图片4.png

蓝绿发布需要对服务的新版本进行一个冗余部署。

一般新版本的机器规格数量都与旧版本保持一致相当于该服务有两套完全相同的部署环境。此时只有旧版本在对外提供服务,新版本作为一个热备的身份存在。

当流量需要从旧版本升级到新版本时,只需要在流量网关进行一个流量切换就可以把流量从一个环境转移到另一个环境,是一个整体切换的操作。

此时旧版本为一个热备的存在,如果新版本出现问题可以迅速在流量网关把流量切回去。

它的优点服务发布周期比较短,流量切换操作比较简单。缺点是需要引入额外的机器成本,来搭建卫星版本,搭建一个隔离的环境。 

灰度发布

图片5.png

灰度发布的思想不是将所有的流量从旧版本移到新版本上,而是以循序渐进的方式 。根据请求内容或请求流量的比例将线上的流量一小部分的转换至新版本。待灰度验证通过后逐步调大新版本的请求流量 

显示的有两种策略,一种是Traffic routing一种是Traffic shifting。Traffic routine是基于请求内容的例如将请求中头部含有stage=gray的流量转发到应用v2上,是对请求内容比较清晰化控制的一种方法。traffic shifting比较类似traffic Swiching,traffic Swiching主要是流量切,但是traffic shifting是流量分流,它们的思想都是无差别的将流量进行转移,只是转移只转移小部分。

灰度发布的优点是可以一小部分流量进行验证,如果新版本出问题,故障面比较小并且机器成本的要求也比较小,因为可以在发布过程中对新版本进行扩容,同时对老版本进行缩容。缺点就是发布周期比较长。

2.业务场景——微服务架构下的服务发布

               图片6.png

如图所示三个服务已经被拆分独立部署。一次请求是经过微服网关然后经过用户服务,经过购物车,经过订单,最后到数据库。

如果想对cart服务进行一个灰度升级只需要将cart服务单独部署一个灰度版本。

那么怎么使请求流量在整个调用链上命中cart服务的灰度版本呢?有两种方案:第一种方案是配置cart的流量流入规则,user路由cart的时候使用cart的流量流入规则。这是一种基于provider的治理规则

方案二配置user的流量流出规则。User路由到cart时使用user的流量流出规则。这是一种基于consumer的治理策略。这种方式可以解决微服务架构的服务发布问题但是若我们希望对Order服务也进行灰度发布:则需要按照方案一方案二对Order配置流量治理规则。

图上为三个微服务,但是整个请求应用链路上可能有很多的微服务,下面还有其他的服务也需要进行灰度发布那么需要每个服务去配置度规则当微服务非常多,治理规则就会呈指数级增长,就非常难维护。所以引出了全链路灰度发布的策略

3.全链路灰度发布:端到端的灰度发布

图片7.png

该策略将流量控制视角从服务转移到了整个请求链路上我们希望在请求链上命中更多微服务,所以在使用全链路灰度时并不关心灰度环境中有多少微服务,只需要本次请求流量在路由的时候会优先路由到灰度流量。

专注于整个调用链,仅需要少量的治理规则即可构建出从网关到整个后端服务的多个流量隔离环境可以有效保证多个亲密关系的服务顺利发布,以及服务多版本并行开发。

如左图是对于正常的流量,经过微服务网关,经过用户服务,经过cart然后经过order去正常进行。如果是灰度流量经过user服务时会被发现是一个灰度流量,然后根据流量治理规则,访问Cart服务。到达Cart服务,cart服务在访问order服务会发觉本次流量是一个灰度流量,所以它会优先访问order服务。

user服务进行拆分是根据请求内容来进行分流的,右图是根据请求比例的。

 

四、全链路灰度的解决方案

常见的解决方案有两种:一种是基于物理环境隔离,第二种是基于逻辑环境管理

方案一:物理环境隔离

图片8.png

物理环境隔离主要是采用堆机器的方式搭建真正意义上的流量隔离。需要灰度服务搭建一套网络隔离资源独立的环境,然后在其中部署服务的灰度版本。

至于其他服务,因为整个调用链涉及到这三个服务灰度环境1中的cart服务有v1版本,那么需要在这个灰度环境中部署user order正式服务版本

因为灰度环境跟正式环境是网络隔离的所以需要在各自的环境中去部署非灰度版本同时在搭建灰度环境时需要引入一个注册中心,因为两个环境是网络隔离的,所以在正式环境中user服务去访问Cart,从注册中心获取的Cart服务的地址是式环境的ip地址,然后在灰度环境中user服务去访问注册中心得到的是灰环境中cartv1的节点,所以注册中心也需要在每个环境中额外部署。

基于物理环境隔离的方案比较适用于企业中的正式环境,预发环境测试环境搭建。不便于对线上流量进行一些服务新版本的验证场景。当微服务规模比较小时可以采纳这种方案但是微服务规模比较大,机成本会远超收益。

方案二:逻辑环境隔离

图片9.png

基于逻辑环境隔离比较贴合全链路灰度的概念。流量经过微网关,流经每一个服务和组件,每一个服务都会在流量流出的时候动态去判断访问的provider应该是哪个版本,根据流量的一些特征进行动态路由。例如蓝色流量是正式环境的流量,可以看到它整个调用链链路都在这个蓝色节点中。黄色是灰度环境v1,在从微服务网关访问服务A时发现服务A没有灰环境的v1版本那么就直接访问正式环境。但是服务A在访问服务B服务A再次对流量进行判断,发现服务B有灰度环境v1,这时候流量就会流入到灰度环境v1

B访问C也执行类似判断红色的流量是灰度环境v2的流量也在流经整条链路上的各个组件进行动态判断

优点是不用大量的机器成本去搭建一个真正意义上的物理隔离,只需要部署需要灰度的服务即可。

真正灰度流量的路由只是由整个链路上的各个服务对流量进行判断去路由那么需要实现基于逻辑环境隔离的权限的灰度需要解决哪些问题呢?

第一个路上各个组件和服务能够根据流量特征进行动态路由。

二个是需要对服务下的所有节点进行分组能够区分出版本。

第三个是需要对流量进行灰度标识版本标识还有流量染色

第四个链路上的每个组件怎么去识别出不同版本的灰度流量

即:

1.标签路由(动态路由)

2.节点打标

3.流量染色(流量打标)

4.分布式链路追踪


相关文章
|
4月前
|
Kubernetes 测试技术 数据库
详解微服务应用灰度发布最佳实践
相对于传统软件研发,微服务架构下典型的需求交付最大的区别在于有了能够小范围真实验证的机制,且交付单位较小,风险可控,灰度发布可以弥补线下测试的不足。本文从 DevOps 视角概述灰度发布实践,介绍如何将灰度发布与 DevOps 工作融合,快来了解吧~
31056 18
|
4月前
|
监控 Kubernetes Cloud Native
云原生架构下的微服务治理之道
【7月更文挑战第30天】在数字化转型的浪潮中,企业级应用正迅速向云原生架构迁移。本文将深入探讨云原生环境下微服务治理的最佳实践,包括服务发现、配置管理、流量控制等关键策略,并结合实例分析如何在保障系统弹性、可维护性的同时,优化资源利用效率和加快业务创新速度。
52 2
|
4月前
|
运维 Kubernetes Cloud Native
云原生架构下的微服务治理之道
【7月更文挑战第20天】在数字化转型的浪潮中,企业纷纷拥抱云原生,以期实现更高效的资源利用、更快的业务迭代和更强的系统稳定性。本文将深入探讨如何通过云原生架构优化微服务的治理,确保系统的高可用性和可维护性,同时提升开发效率和运维灵活性。我们将从微服务治理的核心原则出发,结合具体案例,分析在云环境中实施微服务治理的策略与挑战。
53 2
|
4月前
|
监控 Cloud Native 安全
云原生架构下的微服务治理实践
在数字化转型的浪潮中,云原生技术以其灵活性和可扩展性成为现代软件工程的基石。本文将深入探讨云原生架构下微服务治理的实践路径,从微服务的拆分、容器化部署、服务网格的应用到最终的监控与故障排除,提供一套全面的方法论。文章旨在为读者呈现一个清晰的云原生环境下,如何高效管理和维护微服务系统的全景图。
61 2
|
4月前
|
负载均衡 Cloud Native 云计算
云原生架构下的微服务治理与挑战
随着云计算技术的不断演进,云原生架构已成为现代应用开发的首选模式。本文将深入探讨在云原生环境下,微服务治理的重要性、实现方法及所面临的挑战。通过分析微服务治理的关键要素如服务发现、配置管理、负载均衡和故障转移等,揭示如何在高度动态的云环境中保持服务的高可用性和灵活性。同时,本文也将指出在实施微服务治理过程中可能遇到的技术难题和应对策略,为构建健壮的云原生应用提供指导。
|
4月前
|
监控 负载均衡 Java
Spring Boot与微服务治理框架的集成
Spring Boot与微服务治理框架的集成
|
5月前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【6月更文挑战第30天】Spring Cloud是Java微服务治理明星框架,整合Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(断路器)、Zuul(API网关)和Config Server(配置中心),提供完整服务治理解决方案。通过Eureka实现服务注册与发现,Ribbon进行负载均衡,Hystrix确保服务容错,Config Server集中管理配置,Zuul则作为API入口统一处理请求。理解和使用Spring Cloud是现代Java开发者的关键技能。
132 2
|
4月前
|
负载均衡 Java Nacos
Spring Boot与微服务治理框架的集成策略
Spring Boot与微服务治理框架的集成策略
|
5月前
|
Kubernetes 监控 Cloud Native
云原生架构下的微服务治理实践
【6月更文挑战第23天】在云计算的浪潮中,云原生架构以其弹性、可扩展性和高效性成为企业数字化转型的重要推手。本文将深入探讨如何利用云原生技术实现微服务的治理与优化,确保系统的稳定性和高可用性。我们将从微服务的基本概念出发,通过具体案例分析,揭示云原生环境下微服务治理的关键策略,并分享实践经验,旨在为读者提供一套完整的微服务治理解决方案。
|
5月前
|
运维 负载均衡 Cloud Native
云原生架构下的微服务治理实践
【6月更文挑战第24天】在云原生的浪潮下,微服务治理成为确保系统弹性、可维护性和可观测性的关键。本文通过深入分析微服务治理的核心要素与挑战,结合前沿技术和工具,提出一套实用的微服务治理策略,旨在帮助开发者和架构师构建更加稳定、高效且易于管理的分布式系统。