首页 > 其他分享 >MSE/Istio 全链路灰度的挑战、实现思路与解决方案

MSE/Istio 全链路灰度的挑战、实现思路与解决方案

时间:2024-01-26 15:22:36浏览次数:32  
标签:服务 Istio 流量 发布 灰度 链路 MSE 路由

微服务架构下的灰度发布挑战

在传统的单体应用架构中,灰度发布相对简单。只需要在服务的流量入口处进行分流,通过使用 K8s Service 或各种类型的网关即可实现。然而,微服务架构引入了新的复杂性,服务之间的依赖关系错综复杂。有时候,某个功能的发布可能依赖于多个服务,要求灰度流量在整个调用链中准确路由到灰度版本的服务。传统的单个服务流量入口设置分流的做法无法满足这一需求。为了解决微服务架构下的灰度发布问题,全链路灰度发布引入了泳道(Lane)的概念。泳道将灰度视角从单个服务扩展到整个请求的调用链上,确保流量能够精确地在一组指定规则的服务之间流动,就像在预先设置好的泳道中一样。全链路灰度发布方案专为微服务架构设计,旨在应对微服务架构下的灰度发布挑战。

全链路灰度发布的实现思路

全链路灰度发布的核心在于流量泳道概念的实现,而泳道正如上文所说,是对满足指定规则的流量定下一个活动范围,它有以下两种实现思路:

第一种思路:完整环境隔离

泳道实现的主要难点在于,流量在服务间调用的过程中如何路由到正确的服务版本,但有一个简单的实现思路可以规避这个问题:复制一个包含所有微服务的完整环境,将需要灰度的服务替换为灰度版本。然后只需要在两个环境的流量入口处通过网关对流量进行规则分流,由于两套环境间存在网络隔离,灰度环境天然成为了一个灰度流量泳道。

完整环境隔离

然而,对于服务数量较多的微服务项目来说,这种方法会浪费资源,因为在灰度环境中创建非灰度服务会消耗额外的资源。如果要同时灰度多个版本,就需要创建多套完整环境,进一步增加了资源的浪费。

 

第二种思路:服务流量路由

服务流量路由

 

若能赋予每个服务路由流量的能力,泳道的设置就可以共用正常服务从而充分利用资源,多版本的全链路灰度发布也可以同时在同一个环境中进行。具体而言,需要两个能力:全链路流量路由和全链路数据透传。

全链路流量路由

流量路由指的是服务本身发送流量时,可以根据指定规则将其路由到正确的目的地,例如带有灰度标的流量应该优先发往灰度版本的服务,全链路流量路由则要求每个服务都具备这种能力。

全链路流量路由目前有两种主流实现:

  1. 基于 Istio:采用 Istio 这个开源 Service Mesh 组件,通过在每个服务的容器中部署 Envoy 透明代理,拦截服务之间的网络通信并按指定规则转发,从而实现了全链路流量路由,无需对现有代码进行修改。
  2. 基于服务发现组件:通过支持为服务设置元数据的服务注册中心,如 Nacos,可以标记服务实例的特征,例如灰度版本。每个服务可以通过注册中心获取其他服务实例的版本信息,并通过修改代码逻辑或 Java Agent 实现流量路由。

全链路数据透传

为了实现全链路灰度发布,流量路由规则基于流量染色标记,因此需要将染色标记传递到整个请求链路中,即实现全链路数据透传能力。简单的数据透传可以基于原生的 HTTP Header、Query Parameters 等资源来实现,但在复杂的微服务场景下,应该使用 Tracing Baggage 机制。Tracing Baggage 是分布式链路跟踪工具提供的一种能力,可以携带用户自定义的键值对,主流的跟踪工具如 Skywalking 和 OpenTelemetry 都支持该功能。使用分布式链路追踪框架可以方便地进行日志记录和问题排查,特别适用于灰度发布场景下的需求。

 

企业发布现状的痛点分析

目前企业在选择和实施发布策略时面临以下困境:

1. 从传统部署模式转变为云原生模式后,缺乏相关能力的人才进行技术架构改造,使得企业在发布策略方面难以入手。

2. 已经找到适合产品现状的发布策略,但缺乏自动化平台或工具的支持,仍然依赖手工逐步执行,可能导致流程遗漏或人工操作失误,造成生产事故。

3. 仅实现了服务级别的灰度能力,逐个发布服务耗时长,导致发布过程缓慢,验证效果不佳。

针对以上问题,ZadigX 提供了灰度发布的解决方案,帮助企业应对这些痛点。

全链路灰度发布的实现方案

主要有 Istio、JavaAgent 等主流方案,基于流量路由的能力,ZadigX 提供了两套通用方案:

阿里云 MSE + ZadigX

阿里云 MSE 为 Java 应用提供了便捷实现全链路灰度的能力。MSE 微服务引擎是基于 Java Agent 实现的无侵入式企业生产级服务治理产品,不需要修改任何一行业务代码,即可拥有不限于全链路灰度的治理能力,并且支持近 5 年内所有的 Spring Boot、Spring Cloud 和 Dubbo。

使用 MSE 进行灰度发布的过程中,ZadigX 可以便捷得创建灰度环境和灰度 K8S 资源、结合发布工作流编排能力,自动为 K8S 资源设置 MSE 所需的资源标记,集成了 MSE API 降低重复工作量。

Istio + Distributed Tracing + ZadigX

Istio 可以无侵入得实现全链路流量路由能力,同时还可以设置基于比例、权重、HTTP Header 等条件的流量路由,但全链路数据透传需要服务本身实现,为此需要服务接入支持 Baggage 的分布式链路追踪框架,若还没接入则会涉及到一定的改造成本。

ZadigX 可以根据指定的灰度任务与灰度标记规则,结合发布工作流编排能力与环境的监测管理能力,自动创建 Istio VirtualService 与 DistinationRule 资源以实现相应的泳道,达到了让开发者轻松进行全链路灰度发布的效果。

标签:服务,Istio,流量,发布,灰度,链路,MSE,路由
From: https://www.cnblogs.com/gaoyanbing/p/17989483

相关文章

  • Kruise Rollout 全链路灰度实践
    作者:旦酱、十眠什么是全链路灰度?在发布应用的过程中,我们通常希望用少量特定流量来验证新版本的发布是否正常,以保障整体稳定性。这个过程被称为灰度发布。关于灰度发布,我们通过逐步增加发布的范围,来验证新版本的稳定性。如果新版本出现问题,我们也能及时发现,控制影响范围,保障整体的稳......
  • k8s~istio的安装与核心组件
    安装istio在线安装:https://istio.io/latest/docs/setup/getting-started/#download或者直接在这里下载:https://github.com/istio/istio/releases/tag/1.20.2$curl-Lhttps://istio.io/downloadIstio|ISTIO_VERSION=1.20.2TARGET_ARCH=x86_64sh-$cdistio-1.20.2$e......
  • 【图像处理基础】灰度图raw8格式转NV12格式
    前言 转换原理*RGB转YUV-NV12:Y=0.299R+0.587G+0.114BU=-0.1687R-0.3313G+0.5B+128V=0.5R-0.4187G-0.0813B+128*YUV-NV12转RGBR=Y+1.402(V-128)#1.4075G=Y-0.34414(U-128)-0.71414(V-128)B=Y+1.772(U-......
  • 【服务网格】Istio
    Istio是一个完全开源的服务网格,作为透明的一层接入到现有的分布式应用程序里。它也是一个平台,拥有可以集成任何日志、遥测和策略系统的API接口。Istio多样化的特性使您能够成功且高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。服务网格是什么?#服务网格......
  • istio-虚拟服务(VirtualService)
     在istion中,虚拟服务(Virtualservice)和目标规则(destinationrule)是流量路由功能的关键组成部分。在Istio所提供的基本连接和发现基础上,通过虚拟服务,能够将请求路由到Istio网格中的特定服务。每个虚拟服务由一组路由规则组成,这些路由规则使Istio能够将虚拟服务的每个给定请求匹配......
  • Istio从入门到精通—— 安装 —— Kubernetes 删除 istio-system namesapce 时候,出现
    Kubernetes删除istio-systemnamesapce时候,出现Terminating解决办法当你在Kubernetes中遇到无法删除处于Terminating状态的命名空间时,可能是由于该命名空间中仍有活跃的资源或服务。要解决这个问题,你可以尝试以下几个步骤:一、常规方法检查命名空间中的活跃资源:......
  • 蓝绿发布、滚动发布、灰度发布,有什么区别 ?
    蓝绿发布   蓝绿部署中,一共有两套系统:一套是正在提供服务系统(也就是上面说的旧版),标记为“绿色”;另一套是准备发布的系统,标记为“蓝色”。两套系统都是功能完善的,并且正在运行的系统,只是系统版本和对外服务情况不同。正在对外提供服务的老系统是绿色系统,新部署的系统是蓝色......
  • Istio从入门到精通—— 安装 —— 使用 Istio Operator 安装
    使用IstioOperator安装https://istio.io/latest/zh/docs/setup/install/operator/全新安装Istio时不鼓励使用Operator,请优先使用Istioctl和Helm安装方法。Operator仍然会得到维护,但新的功能请求可能不会优先考虑。除了手动在生产环境中安装、升级、和卸载Istio,......
  • day34 基于ServiceEntry,Sidecar,Envoy Filter实战场--深入剖析Istio的安全策略(10.8-10.
    10.8-1-基于ServiceEntry,Sidecar,EnvoyFilter实战场一、ServiceEntry实战场景1.1部署Istio提供的sleep示例istioctlkube-inject-fsamples/sleep/sleep.yaml|kubectlapply-f-1.2部署busybox#busybox-dp.yamlapiVersion:v1kind:Servicemetadata:name:busybo......
  • Redis - Use case of GETRANGE, SETRANGE, MGET, MSET
            ......