运维.云技术学习.基于应用服务网格的灰度发布(上:理论基础篇)

运维专题
基于应用服务网格的灰度发布(上:理论基础篇)

- 文章信息 - Author: 李俊才 (jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSitehttp://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article:https://blog.csdn.net/qq_28550263/article/details/139885874
HuaWei:https://bbs.huaweicloud.com/blogs/429596

【介绍】:本文介绍应用服务网格的灰度发布中的基础知识,整理自华为微认证课程的学习总结笔记和相关开源技术GitHab/官网介绍。


下一节:《 基于应用服务网格的灰度发布(下:实践篇-基于华为云)

在这里插入图片描述

目 录


1. 概述

1.1 软件升级对用户的影响

在传统软件升级过程中,新版软件一旦发布,所有用户都会升级到新版本。这种做法存在一定风险:

  1. 新版软件可能存在未被发现的缺陷或兼容性问题,一旦大规模升级可能影响所有用户的使用体验。

  2. 用户可能不习惯新版本的界面设计和功能改动,升级后反而降低了满意度。

  3. 如果新版本出现严重问题需要回退,影响范围会很大。

因此,在软件升级时需要更加谨慎,降低升级风险,避免对用户体验造成骤降。

1.2 灰度发布的概念

灰度发布是一种软件升级方式,可以最大限度降低升级风险,平滑过渡到新版本。其基本思路是将新版本先发布给一小部分用户,称为"灰度用户",收集使用反馈后再逐步扩大范围,最终实现全量升级。

1.2.1 灰度发布的别名:金丝雀发布

灰度发布的别名叫”金丝雀发布Canary Release)“,源自以前矿井工人携带金丝雀下矿井的做法。由于金丝雀对瓦斯等有毒气体很敏感,矿工可以通过观察金丝雀的健康状况来判断瓦斯浓度是否安全。

类似的,在软件灰度发布中,先给一部分”金丝雀“用户升级新版本,根据他们的使用反馈来评估新版本的可用性,避免影响全部用户。

1.2.2 灰度发布的定义

灰度发布可以定义为:
在保证系统整体稳定运行的前提下,控制新版本影响范围和发布节奏,逐步替换旧版本的一种软件上线部署方式。

其特点包括:

  1. 可控影响范围:先发布给少量用户,再逐步扩大范围。

  2. 渐进式发布:版本升级是一个渐进平滑的过程,非一次性事件。

  3. 用户无感知:用户不需要主动选择版本,升级过程是透明的。

  4. 可随时回退:一旦发现问题,可随时终止发布并回退版本。

通过灰度发布,可以在不影响整体系统稳定性的情况下,平稳完成软件新老版本的升级替换。这对于业务连续性要求高、升级风险敏感的系统尤为重要。

1.3 灰度发布的流程

灰度发布是一个循序渐进、可控可回退的软件升级过程。本小节先通过一个具体的案例来展示灰度发布的典型流程,然后总结出灰度发布的关键步骤。

1.3.1 某宝App的灰度发布案例

假设某宝App的一次大版本升级,其灰度发布流程如下:

  1. 挑选灰度用户:先在浙江地区随机挑选1%的用户作为灰度用户,避开大促时段。

  2. 发布灰度版本:为这1%用户推送新版App,同时后台系统也要同步升级,保证前后端匹配。

  3. 监控和分析:密切监控灰度用户的客户端崩溃率、启动耗时、交易转化率等关键指标,并收集用户反馈。

  4. 评估决策:若灰度效果不理想,则终止发布,修复问题后重新灰度;若效果理想,则逐步扩大灰度范围。

  5. 分批扩大范围:先扩大到5%用户,然后是20%,50%,直至覆盖所有用户,过程中持续监控和评估。

  6. 全量发布:待新版本稳定运行一段时间后,即可下线旧版,完成整个灰度发布过程。

从某宝的案例可以看出,灰度发布是一个谨慎、渐进的过程,通过小范围试错来降低新版本的升级风险,并根据实际效果来决定是否继续推进。这种发布模式尤其适合体量大、升级风险高的互联网应用。

1.3.2 灰度发布的7个步骤

灰度发布能够控制变更风险,尽早发现问题,灵活调整策略,是一种成熟可靠的发布方式。一个典型的灰度发布流程通常包括以下7个步骤:

  1. 制定计划:确定发布时间、灰度策略、回滚机制等,做好充分准备。

  2. 部署新版本:在生产环境中部署新版本,但暂不对外提供服务。

  3. 选择灰度用户:根据灰度策略选择初始灰度用户,如按地域、用户属性、流量比例等。

  4. 灰度发布:将部分流量导入新版本,开始小流量验证新版本。

  5. 监控与评估:密切监控灰度指标,包括技术指标和业务指标,并根据监控结果决定后续步骤。

  6. 调整灰度规模:如果灰度效果理想,可逐步扩大灰度流量,直至全量;如果出现问题,则及时回滚。

  7. 全量上线:灰度完成后,将所有流量切到新版本,再下线旧版本,完成本次发布。

不过需要指出的是,传统的灰度发布方式也存在一些局限性,下一节将介绍这些局限性。

1.4 传统灰度发布的缺点

尽管灰度发布是一种成熟的发布方式,但传统的实现方法存在一些缺点。

1.4.1 灰度逻辑侵入代码

在传统的灰度发布中,灰度逻辑通常会侵入到应用代码中。例如:

if (isGrayUser(userId)) {
  // 灰度版本的逻辑
} else {
  // 稳定版本的逻辑
}

这种侵入性的灰度逻辑会增加代码的复杂度,降低可维护性。同时,每次灰度发布都需要修改代码,发布效率低。

1.4.2 需要多套环境,运维成本高

为了支持灰度发布,传统做法通常是搭建多套生产环境,如灰度环境和稳定环境。这种方式存在以下问题:

  1. 硬件和维护成本高,需要更多的服务器和运维投入。

  2. 环境管理复杂,不同环境的配置和代码可能不一致,增加了维护难度。

  3. 资源利用率低,灰度环境在非发布期间可能闲置浪费。

综上,传统的灰度发布虽然能够降低风险,但实施成本较高。为了克服这些局限性,业界提出了基于应用服务网格(ASM)的新型灰度发布方案。ASM通过服务代理实现灰度逻辑和流量控制,无需侵入应用代码,也不需要多套物理环境,从而显著降低了灰度发布的复杂度和成本。下一章将重点介绍ASM的原理和优势。

2. 灰度发布解决方案:应用服务网格(ASM)

2.1 应用服务网格(ASM)概述

应用服务网格(Application Service Mesh,ASM)是一种新兴的微服务架构,它通过将服务治理能力下沉到基础设施层,提供了一种更加高效、可靠、安全的服务通信和管理方式。本节将从定义、功能和优势三个方面对ASM进行概述。

2.1.1 ASM的定义

ASM是一个专用的基础设施层,用于处理服务间的通信、管理服务的行为。它与应用程序代码分离,以额外的进程形式伴随应用部署,接管服务间的网络调用。

从逻辑上看,ASM位于应用程序和底层平台之间:

+-------------------------------------+
|          应用程序服务                |
+-------------------------------------+
|          应用服务网格(ASM)         |
+-------------------------------------+
|       基础设施(如Kubernetes)         |
+-------------------------------------+

ASM实际上是一个分布式代理网络,每个服务实例旁都会部署一个代理(如Envoy),服务间的调用都要经由代理,代理负责服务发现、路由、负载均衡、限流熔断、安全认证、监控追踪等治理功能。同时,所有代理都由一个集中的控制面(Control Plane)来配置和管理。

这种将服务治理下沉到基础设施的sidecar代理模式,使得ASM可以在不侵入业务代码的前提下,实现对服务行为的细粒度控制,极大降低了微服务架构的复杂度。

2.1.2 ASM的功能

ASM作为一个独立的中间层,提供了一系列开箱即用的服务治理功能,主要包括:

  1. 服务发现:自动维护服务注册表,动态感知服务的变化。
  2. 智能路由:支持多种路由规则,如基于版本、权重的流量切分。
  3. 负载均衡:提供多种负载均衡策略,自动剔除不健康节点。
  4. 弹性能力:提供超时、重试、熔断、限流等弹性机制。
  5. 安全加密:提供服务间的身份认证和通信加密。
  6. 可观测性:提供调用指标采集、分布式追踪、日志收集等可观测性手段。
  7. 灰度发布:支持按流量比例、HTTP头等规则将流量导入不同版本服务。

这些功能使得ASM成为微服务架构的重要基础设施,大大简化了服务治理的实现。应用开发者只需关注业务逻辑,而将服务通信、运维、监控等非功能性需求交由ASM处理。

2.1.3 ASM的优势

相比传统的微服务架构,基于ASM的微服务架构具有以下优势:

  1. 解耦业务逻辑和服务治理,降低了微服务的复杂度。
  2. 无侵入、可移植,不需要修改业务代码,对应用透明。
  3. 流量治理更加灵活,支持细粒度的流量控制和灰度发布。
  4. 可观测性更强,提供统一的指标监控、调用链追踪和日志分析。
  5. 故障隔离性更好,避免局部故障扩散,提高系统的整体可用性。
  6. 安全性更高,提供服务认证、鉴权和加密通信等安全措施。
  7. 扩展性更强,可以方便地接入第三方服务,如负载均衡、消息队列等。

ASM通过将服务治理下沉到基础设施层,提供了一种更加高效、灵活、可靠的微服务架构方案。它极大地简化了微服务的开发和运维,使得开发人员可以更加专注于业务逻辑,从而加速微服务应用的落地和迭代。

当前,以Istio为代表的Service Mesh已经成为业界的主流选择。而华为云的应用服务网格(ASM)产品,则是基于Istio强化和优化后的企业级商用版本。它与华为云的容器平台CCE深度集成,提供了更加易用、高效、安全的服务网格能力,成为众多企业微服务转型和云原生升级的利器。

在下一节,我们将进一步介绍Istio和Kubernetes这两个ASM的关键组件,以帮助读者更好地理解ASM的原理和生态。

2.2 Istio 和 Kubernetes简介

要理解应用服务网格(ASM)的原理和优势,首先需要了解其底层依赖的两个关键技术:服务网格Istio和容器编排平台Kubernetes。本节将分别介绍Istio和Kubernetes的基本概念、主要功能和技术特点。

2.2.1 Istio

Istio是一个开源的服务网格(Service Mesh)平台,由GoogleIBMLyft联合开发,于2017年开源。它提供了一种透明且语言无关的方式来实现微服务的可观察性、流量管理、安全性和可移植性。

在这里插入图片描述

Istio为微服务提供了以下关键功能:

  1. 流量管理:

    • 动态路由:根据流量策略动态调整服务间的流量分配,如按版本、按权重分流。
    • 弹性能力:超时、重试、熔断、故障注入等。
    • 流量镜像:将实时流量的副本发送到镜像服务,用于调试和测试。
  2. 可观察性:

    • 调用链追踪(Tracing):跟踪分布式服务间的调用链。
    • 监控指标:如服务的调用量、延迟、成功率等。
    • 日志收集:收集服务的访问日志、错误日志等。
  3. 安全性:

    • 服务间认证:支持JWTmTLS等身份认证方式。
    • 访问控制:细粒度的基于角色(RBAC)的访问控制。
    • 通信加密:服务间通信支持TLS加密。

Istio通过在服务间部署一组轻量级网络代理(Sidecar),实现了上述功能,而无需侵入服务代码。Sidecar代理拦截进出服务的流量,并根据控制平面下发的策略执行相应的流量管理、监控追踪和安全控制逻辑。

2.2.2 Kubernetes(k8s)

Kubernetesk8s)是一个开源的容器编排平台,最初由Google开发,于2014年开源并捐赠给CNCF基金会。它提供了一个可移植、可扩展、高可用的平台,用于自动化部署、伸缩和管理容器化应用。

在这里插入图片描述

Kubernetes的主要功能包括:

  1. 服务发现和负载均衡:可以使用DNS名称或自己的IP地址公开容器,如果到容器的流量很大,Kubernetes可以负载均衡并分配网络流量。

  2. 存储编排:自动挂载所选择的存储系统,例如本地存储、公共云提供商等。

  3. 自动部署和回滚:可以使用Kubernetes描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为期望状态。

  4. 自动完成装箱计算:根据资源需求和其他约束自动放置容器,同时不会牺牲可用性,混合关键和最大努力的工作负载,以提高资源利用率并节省资源。

  5. 自我修复:重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。

  6. 配置管理:允许存储和管理敏感信息,例如密码、OAuth令牌和ssh密钥。可以在不重建容器映像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

Kubernetes提供了一个声明式的API来管理应用,用户通过YAML文件来定义应用的期望状态,如副本数、资源配额、访问策略等,Kubernetes则负责在集群中维持该状态。这种"期望状态"管理模式简化了应用的运维,提高了发布效率。

此外,Kubernetes还有一个重要的概念是PodPodKubernetes中最小的可部署单元,它由一个或多个容器组成,共享存储和网络空间。Pod是短暂的,随时可能被销毁和重建。Kubernetes使用Pod来实现应用的弹性伸缩、故障恢复和滚动升级等功能。

总的来说,Kubernetes通过声明式API、Pod等概念,提供了一个自动化的容器编排平台,极大地简化了应用的部署、伸缩和管理。而Istio则专注于提供服务网格能力,与Kubernetes形成互补。下一节将介绍IstioKubernetes的关系。

2.3 Istio和Kubernetes的关系

IstioKubernetes是两个独立的开源项目,但它们在微服务领域形成了紧密的互补关系。

一方面,Istio依赖Kubernetes来编排和管理其组件。Istio控制平面和数据平面的组件都是以Pod的形式部署在Kubernetes集群中的。Istio需要使用Kubernetes的服务发现、容器编排、故障恢复等能力来维护自身的高可用性。同时,Istio也通过向Pod注入Sidecar代理的方式,将流量管理等功能无缝集成到Kubernetes应用中。

另一方面,Istio为Kubernetes应用提供了重要的服务网格能力,弥补了Kubernetes在微服务治理方面的不足。例如,Kubernetes的服务(Service)只提供了简单的负载均衡,而Istio可以实现细粒度的流量管理,如按版本分流、故障注入等。Kubernetes缺乏分布式追踪和监控指标收集,而Istio可以提供调用链追踪、监控指标等可观察性功能。Kubernetes没有服务间认证和加密的机制,而Istio可以提供mTLS加密和基于角色的访问控制等安全特性。

因此,IstioKubernetes的组合,提供了一个全面的微服务平台:

  • Kubernetes负责应用的生命周期管理、资源调度、弹性伸缩、自愈等。
  • Istio负责服务间的流量管理、可观察性、安全性等。

这种"Kubernetes+Istio"的架构,已经成为业界构建生产级微服务平台的标准配置。华为云的容器服务(CCE)和应用服务网格(ASM),就是基于KubernetesIstio打造的托管服务,使用户可以便捷地构建和管理微服务应用,下一节将对CCE做进一步介绍。

2.4 云容器引擎(CCE)概述

云容器引擎(Cloud Container EngineCCE)是云服务供应商提供的高可靠高性能的企业级容器管理服务,支持KubernetesDocker等主流的容器技术。CCE简化了用户创建和管理容器化应用的过程,集成了华为云的计算、存储、网络等资源,提供了全生命周期的容器服务。

2.4.1 CCE的关键特性

  1. 兼容原生Kubernetes:完全兼容原生Kubernetes API,支持使用kubectl等原生工具管理。

  2. 高可靠高性能:基于华为云可靠的云服务器、云硬盘等基础设施,提供高可靠高性能的容器运行环境。

  3. 安全隔离:支持VPC网络隔离、容器隔离等多层次安全防护,保障容器应用和数据的安全。

  4. 简单易用:提供图形化界面和命令行工具,简化容器集群的创建、管理和监控。

  5. 丰富的应用市场:集成了Docker Hub、华为云容器镜像服务等主流镜像仓库,提供了大量的预置应用模板。

  6. 灵活的计费方式:支持包年包月和按需计费两种模式,可根据实际需求灵活选择。

2.4.2 CCE的使用场景

CCE适用于各种容器化应用的部署和管理场景,例如:

  1. 微服务架构:使用CCE部署和管理微服务应用,利用容器的快速启动和隔离特性,实现服务的敏捷开发和独立部署。

  2. DevOps持续交付:集成JenkinsCI/CD工具,实现代码提交到部署的自动化流程。

  3. 应用弹性伸缩:根据应用负载情况自动调整容器实例数量,提高资源利用率。

  4. 混合云部署:支持多云和本地数据中心的统一纳管,实现应用在不同环境间的无缝迁移。

  5. 大数据应用:运行SparkHadoop等大数据处理框架,利用容器的快速部署和弹性伸缩能力,提高作业的执行效率。

CCE作为核心服务,与其他云服务形成了紧密的生态集成,例如:

  • 与云监控服务集成,提供容器级别的监控告警。
  • 与云日志服务集成,提供容器日志的采集、存储和分析。
  • 与云解析服务集成,为容器应用提供灵活的域名解析能力。
  • 与应用服务网格(ASM)集成,提供服务网格治理能力。

其中,CCEASM的集成尤为重要。ASM补齐了CCE在微服务领域的短板,提供了流量管理、服务监控、安全防护等关键能力。用户可以在CCE上一键部署ASM,实现容器应用的全生命周期管理和服务治理。下一节将重点介绍ASM的架构原理。

2.5 ASM的架构

2.5.1 控制平面和数据平面

ASM 采用了控制平面和数据平面分离的架构设计,以实现灵活的流量管理和策略控制。

控制平面

控制平面负责管理和配置整个服务网格,包括服务注册、服务发现、流量规则下发等。它由一组用于管理代理的组件组成,这些组件通过 API 下发策略和配置,并从代理接收遥测数据。控制平面通常包括以下关键组件:

  1. Pilot:负责服务发现、流量管理和智能路由。Pilot 接收控制面的流量规则,将其转换为 Envoy 可以理解的配置,再下发到数据平面的代理。

  2. Mixer:负责策略控制和遥测收集。Mixer 从代理接收遥测数据,并根据控制面下发的策略对请求进行访问控制、配额管理等。

  3. Citadel:负责服务间身份和证书管理。Citadel 为服务颁发证书,实现服务间的双向 TLS 认证。

  4. Galley:负责配置校验和分发。Galley 对控制面收到的配置进行校验,再将其分发到其他控制平面组件。

控制平面通过 xDS 协议(如 LDSRDSCDSEDS 等)将流量规则、策略、证书等动态下发到数据平面的代理,实现配置的实时更新。同时,控制平面也监听代理上报的服务发现、负载等信息,以调整流量策略。

数据平面

数据平面由一组智能代理(Sidecar Proxy)组成,它们与服务实例一起部署,接管进出服务的流量。数据平面代理的职责包括:

  1. 服务发现:动态感知服务实例的变化。

  2. 健康检查:检测后端服务实例的健康状态。

  3. 负载均衡:根据负载均衡算法选择后端服务实例。

  4. 流量路由:根据控制平面下发的路由规则转发流量。

  5. 安全通信:与其他代理或服务建立加密连接。

  6. 可观测性:收集和上报流量指标、日志、调用链等。

ASM 中最常用的数据平面代理是 Envoy,它是一个高性能、可扩展的 C++ 网络代理。Envoy 提供了动态服务发现、负载均衡、TLS 终止、HTTP/2 & gRPC 代理、熔断、健康检查、基于百分比流量拆分的分阶段发布等功能。

控制平面和数据平面的分离,使得 ASM 可以独立升级控制平面,而不影响数据平面的流量转发。这种解耦提高了 ASM 的灵活性和可维护性。数据平面代理在转发流量的同时,还执行控制平面下发的流量规则和策略,实现了应用层流量管理。

2.5.2 Sidecar模式

Sidecar模式是ASM实现服务治理的核心机制。它将服务治理功能从应用程序中剥离出来,由一个独立的代理程序(即Sidecar容器)来承载。Sidecar与应用容器部署在同一个Pod中,并拦截进出应用的所有流量。

(1)Sidecar的部署方式

Kubernetes中部署ASM时,会在每个Pod中注入一个Sidecar容器,如下图所示:

+-------------------------+
|  Pod                    |
|  +------------------+   |
|  |  应用容器         |   |
|  |                  |   |
|  +------------------+   |
|                         |
|  +------------------+   |
|  |  Sidecar容器      |   |
|  |                  |   |
|  +------------------+   |
+-------------------------+

Sidecar容器通常使用Envoy等高性能的代理组件,它监听特定的端口,如15000端口。而应用容器的流量则被配置为通过localhost的15000端口来发送和接收。这样一来,Sidecar就能拦截应用的所有入口和出口流量。

(2)Sidecar的流量拦截

当流量进入Pod时,它首先被Sidecar拦截。Sidecar根据从控制平面(如Pilot)获取的路由规则和策略,对流量进行处理,如路由、负载均衡、限流等。处理后的流量再转发给应用容器处理。

而当应用容器需要向外发送请求时,它首先将请求发送给Sidecar。Sidecar同样根据控制平面下发的规则对请求进行处理,如负载均衡、断路、重试等。处理后的请求再由Sidecar转发出去。

整个过程如下图所示:

    +----------+           +-----------+
    |  Sidecar |           |   应用容器  |
    |          |           |           |
--->|  Envoy   |---------->|   Tomcat  |
    |          |<----------|           |
    +----------+           +-----------+

这种Sidecar代理模式的优点是:

  1. 无侵入:应用程序无需任何修改,就可以获得服务治理能力。
  2. 语言无关:Sidecar与应用程序的语言和框架无关,可以用于任何应用。
  3. 独立升级:Sidecar与应用分离,可以独立升级,降低升级风险。
  4. 可移植:Sidecar屏蔽了底层平台的差异,提供了统一的服务治理接口。
(3)Sidecar的配置管理

Sidecar代理的配置由ASM的控制平面(如Pilot)统一管理。控制平面将路由规则、策略等配置,以xDS协议(如LDSRDSCDSEDS)下发给各个Sidecar代理。Sidecar获得配置后,动态更新自己的路由表和策略,以执行相应的流量管理逻辑。

同时,Sidecar也收集应用的流量指标和调用数据,上报给控制平面,实现了集中式的监控和追踪。这种配置下发和数据收集的过程:

+--------------------+              +------------------+
|     控制平面        |              |     数据平面      |
|                    |     xDS      |                  |
|  +-------------+   |  --------->  |  +-----------+   |
|  |   Pilot     |   |              |  |  Sidecar  |   |
|  +-------------+   |  <---------  |  +-----------+   |
|                    |   指标数据    |                  |
+--------------------+              +------------------+

通过这种方式,ASM实现了对服务网格的集中控制和实时监控,而无需修改应用代码。这大大降低了微服务治理的复杂度。

(4)Sidecar的资源开销

引入Sidecar容器会带来一定的资源开销,主要包括:

  1. CPU和内存:每个Sidecar容器需要占用一定的CPU和内存资源。
  2. 网络延迟:流量需要经过Sidecar的转发,会引入微小的网络延迟。
  3. 部署复杂度:需要对每个应用Pod进行Sidecar注入,增加了部署复杂度。

但总的来说,Sidecar带来的开销是可以接受的,尤其是与它提供的服务治理能力相比。而且,可以通过调整Sidecar的资源配额、连接池等参数来优化性能,将开销降到最低。

此外,一些轻量级的Sidecar实现,如GooglePROXYLESS gRPC,可以避免为每个应用部署Sidecar,而是直接将治理逻辑以库的形式链接到应用中,从而降低了资源占用。但这种方式侵入性较强,不如独立的Sidecar容器灵活。

概括一下:Sidecar模式是ASM的核心机制,它以一种无侵入、可移植的方式实现了微服务的流量管理、可观测性和安全性。尽管引入了一定的复杂度和开销,但与传统的SDK集成相比,Sidecar模式是目前最灵活和可扩展的服务治理方案。

2.5.3 ASM的关键组件

ASM作为一个完整的服务网格解决方案,包含了多个关键组件,它们分工协作,共同提供了服务发现、智能路由、流量管理、策略执行和安全防护等一系列功能。下面我们就来看看ASM的4个核心组件:PilotMixerCitadelGalley

2.5.3.1 Istio管理器(Pilot)

PilotIstio的核心组件之一,充当服务网格的控制平面,负责管理和配置部署在网格中的Envoy代理实例。

具体来说,Pilot的功能包括:

  1. 服务发现:Pilot使用平台特定的服务发现机制(如KubernetesAPI Server)来查找服务注册表中的服务实例。

  2. 流量管理:Pilot将高级路由规则转换为Envoy特定的配置,并动态更新Envoy代理的路由规则。这样,Pilot就可以控制服务之间的流量,实现灰度发布、AB测试等功能。

  3. 弹性功能:PilotEnvoy提供了超时、重试、熔断等弹性配置,提高了服务的容错性和稳定性。

  4. 服务健康检查:PilotEnvoy代理收集服务的健康状况,并将不健康的服务实例从负载均衡池中移除。

可以看到,Pilot通过与Envoy代理的交互,实现了服务发现、流量控制等关键功能,是Istio的流量管理器。Pilot让运维人员可以通过简单的配置来控制服务间的流量,而无需修改服务代码。

2.5.3.2 策略执行模块(Mixer)

Mixer是Istio的另一个核心组件,负责在服务网格中执行访问控制和使用策略。Mixer独立于Envoy代理,可提供灵活的插件模型,方便扩展和集成自定义的后端。

Mixer的主要功能包括:

  1. 前置条件检查:Mixer可以对请求执行前置条件检查,如身份验证、授权等,并拒绝不符合条件的请求。

  2. 配额管理:Mixer可以对服务的访问配额进行限制,如限制每秒的请求数、CPU使用量等。

  3. 遥测数据收集:Mixer负责从Envoy代理收集遥测数据,如请求日志、监控指标等,并将其发送到后端的监控系统。

  4. 策略评估:Mixer根据制定的访问控制策略对请求进行评估,并返回是否允许请求继续。

MixerIstio的策略执行和遥测收集变得高度可配置和可扩展。通过Mixer,可以实现灵活的访问控制、限流、计费等功能,并且可以对接各种监控后端,实现对服务网格的可观察性。

2.5.3.3 安全组件(Citadel)

CitadelIstio的安全组件,负责在服务网格中提供身份和凭证管理。

Citadel的核心功能包括:

  1. 身份供给:Citadel为网格中的每个服务实例提供强大的身份,以实现服务到服务以及最终用户到服务的身份验证。

  2. 证书管理:Citadel负责自动化密钥和证书轮换,为每个服务实例生成证书,并将其分发给Envoy代理。这为服务间通信提供了双向TLS认证。

  3. 凭证管理:Citadel将服务认证机制从应用层移动到服务网格基础架构中。应用程序无需管理自己的凭证,Citadel会自动为服务生成身份和凭证。

通过CitadelIstio可以在服务网格内提供全面的安全防护,包括服务身份验证、加密通信、基于角色的访问控制等。Citadel使得服务间的通信更加安全可靠,而无需修改服务代码。

2.5.3.4 配置校验组件(Galley)

GalleyIstio的配置校验和分发组件,它在Istio1.1版本中引入,负责对Istio的配置文件进行校验、处理和分发。

Galley的主要功能包括:

  1. 配置校验:GalleyIstio的各种资源配置(如虚拟服务、目标规则等)进行语法和语义校验,确保配置的正确性。

  2. 配置处理:Galley将通过校验的配置转换为适合下游组件(如Pilot)使用的格式。

  3. 配置分发:Galley将处理后的配置分发给相应的下游组件,如将路由配置分发给Pilot。

  4. 配置存储:GalleyIstio的配置存储在一个统一的配置存储中,供其他组件订阅和使用。

通过GalleyIstio实现了配置的集中式管理和分发。Galley对配置进行了校验和处理,降低了配置错误的风险。同时,Galley作为配置的统一分发点,简化了其他组件的配置管理。

总的来说,PilotMixerCitadelGalley这4个组件分别负责流量管理、策略控制、安全防护和配置管理,构成了Istio服务网格的核心,为微服务应用提供了全方位的服务治理能力。在实际的应用服务网格(ASM)产品中,华为云在Istio的基础上进行了增强和优化,使其更加易用和高效。

3. 基于 ASM 的灰度发布

应用服务网格(ASM)提供了强大的流量管理能力,可以支持多种灰度发布策略。本节将重点介绍ASM支持的3种主要灰度发布类型:金丝雀发布、蓝绿发布和AB测试。

3.1 ASM 支持的灰度发布类型

3.1.1 金丝雀发布(Canary Release)

金丝雀发布,也称灰度发布,是一种增量式发布策略,是当前应用灰度发布的主流方式。其基本思路是先将一小部分实际流量引入新版本进行测试,待验证没问题后再逐步扩大范围,最终把所有流量都迁移到新版本。

ASM中实现金丝雀发布非常简单,只需要通过定义流量规则,将一定比例的流量路由到新版本服务即可。例如,可以先让10%的流量访问新版本,其余90%流量访问旧版本,观察一段时间后,如果新版本运行平稳,再把新版本流量比例逐步调高到20%、50%、80%,直到100%。

ASM支持根据多种规则来划分流量,如按照百分比、请求内容、客户端版本等,可以灵活地控制金丝雀发布的范围和节奏,并在过程中随时调整流量规则。

金丝雀发布的优点是风险可控,用户影响小。一旦发现问题,可以快速切回旧版本,同时放量速度也比较敏捷。但其缺点是发布周期较长,而且新旧版本会长时间同时运行,资源消耗大。

3.1.2 蓝绿发布(Blue-Green Release)

蓝绿发布是一种非增量式的发布策略,又称红黑发布(Red-Black Release)。其实现方式是在生产环境中同时部署两个版本:旧版本(称为蓝色版)和新版本(称为绿色版),两个版本都有自己的服务和数据库等资源。在切换流量时,先将旧版本的流量逐步切到新版本,直到新版本承载100%流量,再下线旧版本。

蓝绿发布的切换过程非常快,对用户是透明的。新版本一旦就绪,所有用户都可以快速升级,因此适合对系统可用性要求高的场景。

ASM中实现蓝绿发布,需要先把新版本的服务部署到与旧版本并行的生产环境中,再通过ASMVirtualService定义流量规则,将指向旧版本的流量逐步切换到新版本。一旦切换完成,就可以下线旧版本,回收资源。

蓝绿发布的优点是用户切换快,系统停机时间短,回滚也比较方便。但其缺点是需要两倍以上的资源,而且数据库切换比较复杂,通常需要单独处理。此外,蓝绿发布不能分批验证,一旦新版本有问题,影响范围会比较大。

3.1.3 AB测试

AB测试是一种对比实验式的发布策略,主要用于评估两个版本的效果差异。与金丝雀发布和蓝绿发布不同,AB测试的重点不是安全地发布新版本,而是通过科学的实验设计和统计分析,来比较两个版本在关键指标上的表现,从而指导产品优化和决策。

AB测试中,需要将用户流量分成两个或多个对等分组,每组用户访问不同的版本,收集一段时间的数据后,通过统计检验等方法分析各版本的效果差异,验证优化假设。

ASM可以方便地实现AB测试。首先,同时部署多个版本的服务;然后,通过定义流量规则,按照某种策略(如随机、权重、用户特征等)将流量分配到不同版本;最后,对各版本的关键指标进行采集和分析,得出优化结论。

例如,一个电商网站优化了推荐算法,想评估新算法的效果。可以使用ASM按 90%:10% 的比例将流量随机分配到新旧两个算法,观察一周后,分析比较两组用户的转化率、客单价等指标,若新算法效果显著更优,则可以全量上线新版本。

AB测试的优点是可以在线上环境进行受控实验,获得真实用户反馈,降低决策风险。但其缺点是实验周期较长,而且需要较大流量才能得到统计显著的结论,因此更适合大流量应用。

综上,金丝雀发布、蓝绿发布和AB测试是ASM支持的三种主要灰度策略,各有特点和适用场景。在实际的系统升级和优化中,可以根据需求灵活选择,也可以将它们组合使用,以达到安全、高效、可控地发布和验证新版本的目的。

下一节,我们将进一步介绍ASM灰度发布的流量规则,即如何根据不同的请求属性来划分和路由流量。

3.2 ASM灰度发布的流量规则

ASM的一大优势是支持多种灵活的流量划分规则,可以根据不同的请求属性将流量路由到不同版本的服务。常见的灰度规则包括基于HTTP Header、Cookie、操作系统和浏览器、源IP等。下面我们来分别介绍这几类规则。

3.2.1 基于HTTP Header的灰度规则

HTTP HeaderHTTP请求中的头部字段,包含了关于请求的元数据,如User-AgentAcceptCookie等。ASM可以根据请求的HTTP Header来划分流量。

例如,我们可以在请求头中自定义一个X-Canary字段,当X-Canary的值为true时,将请求路由到新版本服务,否则路由到旧版本。这个规则可以用Istio的VirtualService来表示:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-service
spec:
  hosts:
  - my-service
  http:
  - name: canary-release
    match:
    - headers:
        X-Canary:
          exact: "true"
    route:
    - destination:
        host: my-service-v2
  - route:
    - destination:
        host: my-service-v1

这个VirtualService定义了两条路由规则:

  1. 如果请求头中X-Canary的值等于"true",则将请求路由到my-service-v2,即新版本服务。
  2. 其他请求默认路由到my-service-v1,即旧版本服务。

通过在请求头中设置X-Canary字段,就可以灵活地控制哪些请求访问新版本。这种方式适合内部测试或者Beta用户试用等场景。

3.2.2 基于Cookie的灰度规则

Cookie是一种在浏览器中存储的用户身份信息,常用于记录用户登录态、偏好设置等。ASM支持根据请求的Cookie来划分流量。

例如,我们可以在Cookie中设置一个user_group字段,当user_group的值为beta时,将请求路由到新版本,否则路由到旧版本。相应的VirtualService定义如下:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-service
spec:
  hosts:
  - my-service
  http:
  - name: canary-release
    match:
    - headers:
        Cookie:
          regex: "^(.*?; )?user_group=beta(;.*)?$"
    route:
    - destination:
        host: my-service-v2
  - route:
    - destination:
        host: my-service-v1

这里的匹配规则使用了正则表达式,当Cookie中包含user_group=beta时,就将请求路由到新版本my-service-v2

基于Cookie的灰度发布适合根据用户属性(如会员等级、地域等)来划分流量,可以将某些特定用户群体引入到新版本服务。但要注意Cookie的安全性,防止被恶意篡改。

3.2.3 基于操作系统和浏览器的灰度规则

ASM还可以根据请求的User-Agent头来识别操作系统和浏览器,进而划分流量。这在移动端应用或者浏览器兼容性测试时非常有用。

例如,我们想将Android用户的请求导入新版本服务,而iOS用户仍然访问旧版本。可以定义如下规则:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-service
spec:
  hosts:
  - my-service
  http:
  - name: canary-release
    match:
    - headers:
        User-Agent:
          regex: ".*Android.*"
    route:
    - destination:
        host: my-service-v2
  - route:
    - destination:
        host: my-service-v1

User-Agent头匹配".*Android.*"正则表达式时,请求会被路由到my-service-v2。类似地,我们可以根据浏览器类型(如ChromeFirefoxSafari等)来划分流量。

3.2.4 基于源IP的灰度规则

在某些场景下,我们可能想根据请求的来源IP来划分流量,如只对公司内网IP开放新版本服务。ASM支持根据源IP或IP段来制定路由规则。

例如,只将来自10.0.0.0/8网段的请求导入新版本:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-service
spec:
  hosts:
  - my-service
  http:
  - name: canary-release 
    match:
    - sourceLabels:
        app: 10.0.0.0/8
    route:
    - destination:
        host: my-service-v2
  - route:
    - destination:
        host: my-service-v1

这里使用了sourceLabels字段来匹配源IP。当请求IP属于10.0.0.0/8网段时,请求被路由到新版本服务。

基于源IP的灰度规则适用于内部系统的升级测试,通过将新版本服务只暴露给特定IP范围,可以降低升级风险。但在公有云或者经过NAT网关的环境中,这种方式的可靠性可能会下降。

以上就是ASM支持的几种典型的灰度发布流量规则。这些规则可以单独使用,也可以组合使用,以匹配不同的业务场景需求。ASM提供了声明式的DSL(如Istio的VirtualService)来定义这些规则,使得灰度发布策略的配置和管理变得简单灵活。

同时,这些规则都是在服务网格的数据平面(如Envoy代理)实施的,无需修改应用程序代码,因此适用于各种异构的微服务环境。通过细粒度的流量控制,ASM让灰度发布变得更加可控和安全,大大降低了服务升级的风险。

3.3 灰度发布的优势

ASM为灰度发布提供了一套完整的解决方案,相比传统的灰度发布方式,具有以下几个显著优势:

3.3.1 无侵入

传统的灰度发布通常需要在应用程序中嵌入SDK或者代理,与业务逻辑耦合,侵入性强。而ASM采用Sidecar模式,将灰度逻辑移入独立的网络代理中,与应用容器解耦,实现了无侵入的灰度发布。

应用程序不需要感知灰度发布的存在,也不需要为适配灰度规则而修改代码。这极大地降低了灰度发布的实施成本,使开发人员可以专注于业务逻辑的开发。

3.3.2 灰度版本独立部署

ASM支持为新老版本的服务独立部署和扩缩容,新版本服务可以与旧版本服务部署在不同的资源池或者集群中,实现物理隔离。这避免了新老版本服务相互影响,提高了灰度发布的稳定性。

例如,我们可以先在一个小规模的集群中部署新版本服务,对其进行充分的测试和验证。等新版本服务稳定后,再逐步扩大集群规模,并将流量切换过去。这种方式可以降低变更风险,即使新版本出现问题,也不会影响旧版本服务的可用性。

3.3.3 灰度流量切换便捷

ASM提供了细粒度的流量控制能力,可以通过简单的配置(如VirtualService)来动态调整新老版本服务的流量比例。这使得灰度流量的切换变得非常便捷。

例如,我们可以先将5%的流量导入新版本服务,观察一段时间后,如果新版本运行稳定,再逐步提高流量比例到10%、20%、50%,直到完全切换到新版本。整个过程不需要重新部署服务,只需要修改流量规则即可。

而且,ASM还支持根据灰度效果自动调整流量。例如,我们可以设置一个策略,当新版本服务的错误率超过某个阈值时,自动将流量切回旧版本,避免影响用户体验。这种自动化的流量控制方式,进一步降低了灰度发布的运维成本。

3.3.4 灰度效果实时监控

ASM提供了丰富的监控指标和可视化工具,可以实时观测灰度发布的效果。通过收集新老版本服务的请求量、响应时间、错误率等指标,我们可以全面评估灰度发布的进展和风险。

例如,在Istio中,我们可以使用Prometheus和Grafana来监控服务的关键指标,当发现新版本服务的响应时间显著增加时,可以及时中断灰度,避免问题扩大。

同时,ASM还提供了分布式追踪和日志收集的能力,可以在请求层面分析新版本服务的异常行为,快速定位和解决问题。

综上,ASM为灰度发布提供了一套安全、高效、可靠的技术方案。它通过将灰度逻辑下沉到基础设施层,实现了业务代码与灰度机制的解耦,并提供了灵活的流量控制和实时监控能力,使得灰度发布变得更加简单和可控。这极大地降低了服务升级的风险,提高了发布效率,为持续交付和微服务演进提供了有力的支撑。

4. 华为云ASM服务

华为云应用服务网格(ASM)是一款全托管的服务网格产品,提供了一整套灰度发布、流量管理、服务治理、安全防护的解决方案。它基于Istio开源项目,并针对华为云环境做了增强和优化,使得用户可以便捷地在华为云上构建和管理现代化微服务应用。

接下来,我们将重点介绍华为云ASM的几大核心功能。

4.1 连接

华为云ASM在服务连接方面提供了以下关键能力:

  1. 服务注册与发现:ASM集成了华为云服务注册中心(CSE),可以自动将部署在华为云容器引擎(CCE)中的微服务实例注册到ASM,并提供DNS、Kubernetes原生等多种服务发现机制,方便服务之间的相互调用。

  2. 负载均衡:ASM提供了灵活的负载均衡策略,包括轮询、最少连接、一致性哈希等,可以根据服务的特点选择合适的负载均衡算法。同时,ASM还支持locality load balancing,可以优先将请求转发到同一个可用区或者地域的服务实例,减少网络时延。

  3. 熔断与重试:为了提高服务的容错性,ASM内置了熔断和重试机制。当某个服务实例出现故障时,ASM会自动将其隔离,避免故障扩散;同时,ASM会自动重试失败的请求,减少业务失败率。用户还可以通过配置来自定义熔断和重试的策略,如熔断触发条件、重试次数等。

4.2 安全

华为云ASM提供了全方位的安全防护能力,包括:

  1. 认证与鉴权:ASM支持多种身份认证方式,如JWTOIDC、mTLS等,可以对服务的访问进行身份验证。同时,ASM还支持细粒度的授权和权限控制(RBAC),可以限制服务的访问范围,提高系统安全性。

  2. 加密通信:ASM默认为服务之间的通信提供mTLS加密,可以防止通信内容被窃听或篡改。用户还可以灵活地配置TLS策略,如加密算法、密钥强度等。

  3. 安全策略:ASM允许用户定义各种安全策略,如白名单、黑名单、限流、API管控等,对服务的访问进行精细化控制。通过这些策略,可以有效防范各种恶意攻击,如DDoSSQL注入、XSS等。

4.3 控制

华为云ASM提供了强大的流量控制和管理能力,主要体现在以下几个方面:

  1. 灰度发布:ASM支持多种灰度发布策略,可以按照流量比例、HTTP头、Cookie等规则将请求流量逐步导入新版本服务。通过灰度发布,可以控制新版本对用户的影响范围,及时发现和解决问题,平滑完成业务升级。

  2. 流量镜像:ASM可以将实时流量拷贝一份到镜像服务,用于在线调试和测试。这种机制可以在不影响线上业务的情况下,对新版本服务进行真实流量验证,从而降低发布风险。

  3. 故障注入:ASM支持故障注入机制,可以人为模拟服务故障,如延迟、异常、abort等,以验证系统的容错和恢复能力。通过故障注入,可以在生产环境下进行混沌工程实践,提高系统的稳定性和可靠性。

  4. 流量管控:ASM可以对服务间的流量进行精细化管控,如按照调用关系拓扑、服务API、消费者标签等多维度定义流量策略。通过这些策略,可以实现租户隔离、分级授权、计费限流等业务场景,满足企业级用户的管控需求。

  5. 弹性伸缩:ASM与华为云弹性伸缩服务(AOS)深度集成,可以根据服务的流量状况自动调整后端实例数量。当流量增大时,ASM会触发AOS扩容服务实例;当流量减小时,ASM会触发AOS缩容实例,实现服务的自动弹性。

以上控制能力使得ASM成为一个全方位的服务流量管控平台,可以有效提升云原生应用的交付质量和效率。

4.4 遥测

华为云ASM提供了开箱即用的遥测和可观测性能力,支持多种维度的监控指标采集、分布式追踪、日志收集等,帮助用户实时洞察服务运行状态,快速定位和诊断问题。

  1. 监控指标:ASM自动收集服务网格的流量指标(如QPS、成功率、延迟等)、资源指标(如CPU、内存、网络等)和服务指标(如熔断状态、限流触发次数等),并与云监控服务无缝集成,提供实时监控大盘和告警通知。用户可以通过灵活的PromQL查询语句,对指标数据进行多维分析和聚合。
  2. 分布式追踪:ASM与华为云分布式追踪服务(CTS)集成,可以自动为每个请求生成一个全局唯一的TraceID,记录请求经过的每个服务节点,并将链路信息异步发送到CTS。用户可以通过CTS UI直观地查看请求的端到端调用链,快速定位性能瓶颈和异常服务。
  3. 调用拓扑:ASM可以自动生成服务间的依赖拓扑图,实时展示服务的调用关系和流量状况。通过拓扑图,用户可以直观地了解服务架构,发现异常调用和潜在风险,并进行有针对性的优化。
  4. 日志收集:ASM支持采集服务的业务日志和Sidecar代理日志,并将其发送到云日志服务(LTS)进行存储和分析。用户可以通过LTS的检索和告警功能,快速查询关键日志,发现错误堆栈,并设置异常日志告警,实现问题的快速响应和处理。
  5. 服务依赖分析:ASM可以分析服务之间的依赖关系,生成服务依赖矩阵。通过这个矩阵,用户可以了解服务之间的调用频率、延迟、错误率等关键指标,评估服务的重要性和影响范围,合理规划容量和优化服务。
  6. 多维度排查:ASM提供了tags机制,可以对请求进行多维度标记,如应用、版本、环境、租户等。在排查问题时,用户可以根据这些tags快速过滤和定位异常请求,缩小排查范围,提高诊断效率。
  7. 总之,华为云ASM的遥测和可观测性能力,可以帮助用户全方位地监控服务网格,实时掌握业务和系统的健康状态,并在出现问题时快速定位和诊断,最大限度地提高服务可用性和稳定性,减少运维成本。

4.5 ASM在容器化服务流量治理中的应用

随着微服务架构和容器化技术的普及,越来越多的应用采用了基于Kubernetes等容器编排平台的部署方式。然而,原生的Kubernetes只提供了基本的服务发现和负载均衡能力,在复杂的企业级生产环境中,仍然面临服务管理、流量治理、安全认证等挑战。

ASM作为一种先进的服务网格解决方案,可以与容器编排平台无缝集成,提供强大的流量治理和管控能力,帮助用户应对大规模容器集群的服务治理难题。下面我们就来看看ASM在容器化服务流量治理中的几个典型应用场景。

4.5.1 集群内部服务间流量管控

Kubernetes集群内部,Pod之间的流量是直接互通的,缺乏有效的流量管控手段。ASM通过在每个Pod中注入一个Sidecar代理,接管Pod的入口和出口流量,从而实现对服务间流量的细粒度管控。

例如,ASM可以根据服务的身份(Service Account)和命名空间(Namespace)来制定流量策略,限制服务之间的访问权限。只允许特定服务访问另一些服务,禁止其他未授权的访问。这种基于身份的准入控制,可以有效提高集群的安全隔离性。

此外,ASM还可以对服务间的流量进行负载均衡、限流熔断、故障注入等治理操作。通过在Sidecar代理上执行这些流量治理规则,可以在不修改服务代码的情况下,实现对服务行为的动态控制和优化。

4.5.2 集群入口流量管控

除了集群内部的服务间流量,ASM还可以对进入集群的外部流量进行管控。通过在集群入口部署一个Ingress Gateway(如Istio Gateway),ASM可以拦截所有进入集群的流量,并根据预设的路由规则将请求转发到内部服务。

ASM支持丰富的入口流量治理特性,包括:

  1. 多协议支持:支持HTTPHTTPSHTTP/2gRPC等多种应用层协议。
  2. 灵活的路由规则:支持基于URIHeader、权重等多种条件的流量路由。
  3. 安全防护:支持HTTPS加密通信,并可对请求进行身份认证、授权。
  4. 监控指标:提供丰富的流量指标,如QPS、成功率、延迟等,可与Prometheus等监控系统集成。

通过在入口处统一管控流量,ASM可以简化集群的对外暴露和服务访问,提高服务的安全性和可观测性。

4.5.3 多集群服务间流量管控

在实际生产环境中,企业通常会部署多个Kubernetes集群,跨集群的服务调用十分常见。但Kubernetes原生并不支持跨集群服务发现和通信,给运维带来了挑战。

ASM提供了一套跨集群服务网格解决方案,可以将多个Kubernetes集群连接成一个统一的服务网格,实现跨集群的服务注册、发现和流量管控。

具体来说,ASM通过在每个集群中部署一个控制平面(如Istio控制平面),并让这些控制平面相互连通,形成一个统一的跨集群控制平面。这个控制平面维护了所有集群的服务注册表,可以实现跨集群的服务发现。

同时,ASM在每个集群的出口处部署一个Egress Gateway,用于拦截出口流量。当一个服务要访问另一个集群的服务时,流量会先到达本集群的Egress Gateway,然后由控制平面查询到目标服务的实际地址,再由EgressGateway将请求转发到目标集群的Ingress Gateway,最后到达目标服务。

这种跨集群流量转发机制,将服务间的通信从 N*N 的复杂度降低到了N的复杂度,大大简化了跨集群服务调用的实现。同时,由于流量都要经过Gateway,ASM可以在Gateway上实施全局的流量治理策略,如负载均衡、访问控制、流量镜像等,实现跨集群的一致化管理。

4.5.4 容器化服务的灰度发布

当容器化服务需要升级时,如何平滑地发布新版本,并尽可能减少对用户的影响,是一个关键的挑战。ASM提供了强大的灰度发布能力,可以帮助用户安全、可控地完成服务升级。

ASM支持多种灰度发布策略,包括:

  1. 基于权重的流量切分:可以为新老版本配置流量权重,如10%的流量到新版本,90%到老版本。
  2. 基于请求内容的流量切分:可以根据请求的Header、URI等内容,将流量导向不同版本。
  3. 基于用户属性的流量切分:可以根据用户的身份、所在地域等属性,将流量导向不同版本。

通过这些灰度策略,可以将一部分用户流量逐步导入到新版本服务,进行小规模验证。同时,ASM提供了详细的监控指标和分布式追踪能力,可以实时观察新版本的运行状况,及时发现和解决问题。当新版本稳定后,再逐步扩大流量比例,最终完全替换老版本。

ASM还提供了一键回滚机制,当新版本出现重大问题时,可以快速将全部流量切回老版本,最大限度地降低服务中断的影响。

4.5.5 小结

ASM为容器化服务的流量治理提供了一套完整的解决方案,覆盖了集群内部、集群入口、多集群、灰度发布等多个关键场景。通过将流量管控能力下沉到基础设施层,ASM可以在不侵入应用程序的前提下,实现对服务流量的细粒度管控、监测和优化,大大简化了服务网格的运维难度。

随着ASM的不断发展和成熟,其必将成为容器化环境下流量治理的关键基础设施,帮助企业构建起高可用、高性能、安全可控的现代化服务网格,加速微服务架构的落地和推广。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

S-Clustr(影子集群)V3 高并发,去中心化,多节点控制

S-Clustr 项目地址:https://github.com/MartinxMax/S-Clustr/releases/tag/S-Clustr-V3.0 Maptnh Не ограничивайте свои действия виртуальным миром. GitHub: Maptnh Jay Steinberg Man kann die Menschen, die man hasst, in d…

Arduino平台软硬件原理及使用——开源库的使用

文章目录&#xff1a; 一、库文件的下载及导入 二、库文件源代码说明 三、库文件应用举例 一、库文件的下载及导入 有关arduino开源库的导入有两种方案&#xff1a; 1.第一种方案需要借助arduino.cc网站来进行查询下载&#xff0c;然后在Arduino软件中进行导入。 2.第二种方案则…

【学习计划】文献阅读:癌症生物标志物文献综述

Cancer biomarkers: Emerging trends and clinical implications for personalized treatment 标题英文&#xff1a;Cancer biomarkers: Emerging trends and clinical implications for personalized treatment 标题中文&#xff1a;癌症生物标志物 &#xff1a; 个性化治疗的…

Axure RP 9 安装详细笔记

一、下载 1.官网下载地址 Axure RP 9 MAC正式版&#xff1a;https://axure.cachefly.net/versions/9-0/AxureRP-Setup-3740.dmgAxure RP 9 WINDOWS正式版&#xff1a;https://axure.cachefly.net/versions/9-0/AxureRP-Setup-3740.exe2.网盘下载 链接&#xff1a;https://pa…

计算机SCI期刊,中科院3区,1个月录用,易过审

一、期刊名称 Visual Computer 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;计算机科学 影响因子&#xff1a;3.5 中科院分区&#xff1a;3区 三、期刊简介 视觉计算机发表有关捕获、识别、建模、分析和生成形状和图像的所有研究领域的文章。 计算机…

【ai】tx2 nx: yolov4-triton-tensorrt 成功部署server

isarsoft / yolov4-triton-tensorrt运行发现插件未注册? 【ai】tx2 nx: jetson Triton Inference Server 部署YOLOv4 【ai】tx2 nx: jetson Triton Inference Server 运行YOLOv4 对main 进行了重新构建 【ai】tx2 nx :ubuntu查找NvInfer.h 路径及哪个包、查找符号【ai】tx2…

基于SpringBoot+Vue电商平台系统(带 1w+字文档)

基于SpringBootVue电商平台系统(带 1w字文档) 本课题研究和开发电商平台&#xff0c;让安装在计算机上的该系统变成管理人员的小帮手&#xff0c;提高商品交易信息处理速度&#xff0c;规范商品交易信息处理流程&#xff0c;让管理人员的产出效益更高。 项目简介 基于SpringBo…

go语言day06 数组 切片

数组 : 定长且元素类型一致,在索引逻辑上连续存储,数组的内存地址是存储的第一个元素的内存地址 几种创建方式: 仅声明 var nums [ 3 ] int 声明并赋值 var nums [ 2 ] string {"武沛齐","alex"} 声明并按下标赋值 var nums [ 3 ] int {0:88,2:1 } 省略…

如何一步一步将Python中的应用打包成安卓的APK安装包文件

一、首先&#xff0c;按照如下链接操作 Python 应用打包成 APK【全流程】_python打包成apk-CSDN博客 二、运行 buildozer init会报错buildozer命令找不到&#xff0c;明明已经安装 解决方法&#xff1a; 这里重新创建一个conda环境 Installation — Buildozer 0.11 docum…

西门子840dsl机床仿真软件配置opcua说明

需要的安装包如下&#xff0c;可在百度网盘中下载 主软件包&#xff1a;sinutrain-v4.7-ed4&#xff08;也可在官网中下载最新版本&#xff09; 用户文件&#xff1a;UserDataBase 授权sinutrain&#xff1a;Sim_EKB_Install_2021_06_22 链接&#xff1a;https://pan.baidu.c…

13款最佳“IP地址管理”软件,哪个是你的最爱?

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 中午好&#xff0c;我的网工朋友。 随着网络规模的不断扩展和复杂化&#xff0c;IP地址的管理变得越来越复杂。一个不小心&#xff0c;就可能出现…

仓库管理系统09--修改用户密码

1、添加窗体 2、窗体布局控件 UI设计这块还是传统的表格布局&#xff0c;采用5行2列 3、创建viewmodel 4、前台UI绑定viewmodel 这里要注意属性绑定和命令绑定及命令绑定时传递的参数 <Window x:Class"West.StoreMgr.Windows.EditPasswordWindow"xmlns"http…

vxe-表尾单元格进行合并后更改其表尾背景颜色

1.场景 在vxe-table的官网API中可以使用footer-cell-class-name给单元格添加背景颜色或者其他样式&#xff0c;但是本人场景进行了表尾合并的操作&#xff1b;参考API进行更改背景颜色失败&#xff1b; 2.解决 利用表尾css类名的区别&#xff0c;用子类选择器进行对应的选择设…

生产环境出现问题,测试人如何做工作复盘?

很多时候我们能把大部分的Bug或一些部署等问题在业务上线之前就解决了&#xff0c;但由于某些因素&#xff0c;线上问题还是时而出现&#xff0c;影响业务生产甚至是公司效益。 避免线上问题的发生以及线上问题及时处理是测试人员的一项重要职责&#xff0c;如何快速地处理&am…

Pycharm 启动 Django项目 —— python篇

1、打开你的工程&#xff0c;在菜单栏里找到Run-->Edit Configurations 2、在打开的对话框里边选择Python&#xff0c;点击号 3.选择Python 4.出现了一个新的项Unnamed&#xff0c;你可以把它改名叫debug&#xff0c;好听一点 5.脚本选择你网站的manage.py&#xff0c;脚本参…

UDP-Hunter:针对各种UDP服务的网络安全评估工具

关于UDP-Hunter UDP-Hunter是一款功能强大的UDP服务安全评估工具&#xff0c;该工具可以覆盖IPv4和IPv6协议。 UDP扫描一直是一项缓慢而痛苦的工作&#xff0c;如果你打算在UDP的基础上添加IPv6支持&#xff0c;那么可选的工具就会非常有限。UDP-Hunter是一个基于Python的开源…

车辆数据的提取、定位和融合 精确车辆定位(其三.一 共十二篇)随机复合

第一篇&#xff1a; System Introduction 第二篇&#xff1a;State of the Art 第三篇&#xff1a;localization 第四篇&#xff1a;Submapping and temporal weighting 第五篇&#xff1a;Mapping of Point-shaped landmark data 第六篇&#xff1a;Clustering of landma…

2024.6.25力扣刷题记录-周赛403

目录 一、3194. 最小元素和最大元素的最小平均值 二、3195. 包含所有 1 的最小矩形面积 I 三、3196. 最大化子数组的总成本 四、3197. 包含所有 1 的最小矩形面积 II 博主在比赛时只过了前两题。剩下跟着灵神做&#xff0c;来自视频&#xff1a; 【状态机 DP【力扣周赛 403…

策略模式-通过枚举newInstance替代工厂

策略模式-使用枚举newInstance 前言一、枚举类&#xff1a;MarkCheckDataTypeEnum二、抽象类&#xff1a;AbstractMarkChecker三、检查类&#xff1a;MarkPeopleChecker四、demo演示总结 前言 很久没写文章了~~ 吐槽下&#xff1a;入职新公司后&#xff0c;基本在搬砖&#xf…

CppInsights: 学习C++模版的神器

CppInsights&#xff1a;深入理解C代码的利器 C是一门强大而复杂的编程语言&#xff0c;其复杂性主要体现在语言的多层次抽象和丰富的语法特性上。尽管这些特性使得C能够高效地处理复杂的任务&#xff0c;但也给开发者带来了理解和调试代码的巨大挑战。CppInsights正是在这一背…