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

本文涉及的产品
服务治理 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.分布式链路追踪


相关文章
|
2月前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
123 0
|
5天前
|
负载均衡 算法 NoSQL
探索微服务架构下的服务发现与治理
【5月更文挑战第9天】 在当今的软件开发领域,微服务架构已成为构建可伸缩、灵活且容错的系统的首选模式。随着服务的增多,如何有效地进行服务发现与治理成为了关键的挑战。本文将深入探讨微服务环境中服务发现的机制和治理策略,分析不同服务发现工具的优缺点,并提出一种基于一致性哈希和健康检查相结合的服务治理方案,旨在提高系统的可用性和性能。
|
14天前
|
运维 Kubernetes Cloud Native
构建未来:云原生架构下的微服务治理
【4月更文挑战第30天】 在数字化转型的浪潮中,云原生技术以其灵活性、可扩展性和容错性成为企业IT战略的核心。本文深入探讨了如何通过云原生架构实现微服务的高效治理,包括服务发现、配置管理、流量控制和故障处理等关键方面。我们将展示一系列最佳实践和工具选择,以帮助企业构建一个既可靠又灵活的服务网格,确保业务连续性并加速创新步伐。
|
27天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
1月前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
23 4
|
1月前
|
存储 运维 负载均衡
构建未来:云原生架构下的微服务治理
【4月更文挑战第7天】 随着数字化转型的深入,企业纷纷将应用迁移至云端。云原生技术以其独特的灵活性、可扩展性和敏捷性成为支撑现代应用的首选方案。本文探讨了在云原生环境中实现微服务治理的策略和实践,重点关注如何优化服务发现、配置管理、负载均衡和故障处理机制。通过分析具体案例,揭示了有效治理微服务对于提高系统稳定性、促进快速迭代及降低运维成本的重要性。
|
2月前
|
监控 Cloud Native 云计算
构建未来:云原生架构下的微服务治理
【2月更文挑战第30天】随着云计算的不断演进,云原生技术逐渐占据了软件开发与运维的核心地位。本文深入探讨了在云原生生态系统中,如何有效管理和治理微服务,确保系统的高可用性、可扩展性和安全性。通过对容器化技术、服务网格、以及微服务框架的剖析,我们展示了在云平台上构建和管理微服务的先进策略和实践。
|
2月前
|
SpringCloudAlibaba 负载均衡 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
72 1
|
2月前
|
Java Nacos Sentinel
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
239 0
|
2月前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
791 0