首页 > 其他分享 >ServiceMesh 4:实现流量染色和分级发布

ServiceMesh 4:实现流量染色和分级发布

时间:2024-11-13 19:29:46浏览次数:1  
标签:服务 染色 流量 Mesh 版本 分级 ServiceMesh 路由

1 什么是流量染色

在复杂的生产场景中,经常会有同一个服务中,存在多个版本长期共存的需求。为了让不同的用户在不一样的版本中使用,就需要对用户的请求进行采样和染色,打上不同的标识。
这样的目的有几个:

  1. 支撑分级发布,避免全量发布时可能遇到的大规模风险,如系统崩溃、用户流失。
  2. 支持染色实验,让部分人优先体验新版本或者实验功能
  3. QA的线上问题分析、验证、调试,甚至压测都可以放在染色部署区域去做,因为是强隔离模式,可以避免对线上其他用户的影响

使用Service Mesh的流量染色能力,可以在单个服务中根据特征值进行多元版本流量分发。特别是链路繁琐的巨型网格中,能够管理长达10个以上的链路分流调度,这个能力显得非常重要。常见的 Canary Release(金丝雀)、ABTesting、Diversified Version(多版本分流),都是基于此类算法实现。这边介绍在无侵入业务的情况下,Mesh如何实现流量染色。

1. Canary Release
image

2. Diversified Version
image

3. Diversified Version
image

2 Mesh使用标签特性进行染色

Mesh如果想要实现流量染色,需要具备以下几个条件:

  • 请求的流量中,需要附带某些特征,如流量的请求的Header、Cookies、queryParams等,它们带有某些信息。
  • 部署多版本服务
    • 部署在kubernetes上的服务(svc)的实例(pod)需要接入Mesh,并打上版本标签
    • 或者创建不同的服务(svc),后面把流量引入到这个新的服务上去
  • 在Mesh平台上对应的服务中配上策略:当请求的流量带有某些特征(如header中带有UserID=12345678)时,流量路由到对应标签(如 version = v1.7 )的服务实例上。
  • 不符合条件的路由则默认走到默认版本中(如 version = default)。

所以,Mesh的染色本质上是通过在流量中携带一些特征(如流量的请求的Header、Cookies、queryParams等),而Mesh会根据这些请求的特征进行路由匹配,转发到对应的带有某些特征的服务实例上。
未匹配成功的流量则走到默认版本中,从而实现多个版本和跟默认版本的业务隔离的目标。

image

2.1 Mesh 染色流转原理

2.1.1 Istio支持的策略模型

即Istio支持的流量特征包括uri、scheme、method、headers、queryParams等条件,可以根据这些特征进行路由转发:
image

image

完整参考官方文档:https://istio.io/latest/docs/reference/config/networking/virtual-service/

2.1.2 流量转发实现

基于上述的策略模型,如果你想配置如下:请求的header 带有 username=brand 或者 dep=A1025 的时候,将流量转发到服务的v1版本,否着转发到default版本。
则策略代码如下:

# 说明:VirtualService 流量染色,根据不同的条件将流量发往不同特征的版本中,假设这边有default、v1、v2 版本
apiVersion: networking.istio.io/beta
kind: VirtualService
metadata:
  name: router-test-vs
spec:
  hosts:
  - router-test-vs  # 调度router-test服务的流量
exportTo:
- "."
http:  # 加各种路由条件,比如匹配人员、所属部门进行路由
- match  # 用户匹配 brand,部门匹配 A1025 时
  - headers:
    username:
      exact: brand
  - headers:
    department:
      exact: A1025
  route:
    destination:
    # todo 匹配条件的流量路由到对应的服务上,比如ServiceA-V1
route: 
  destination:
  # todo 不匹配条件的流量路由到其他服务上,比如ServiceA-V2

3 总结

本文介绍了在Mesh场景下如何使用流量染色,来对不同特征的流量进行分发的实现过程。流量染色在我们实际的生产环境中可以有很多收益和价值:

  1. 支撑分级发布,避免全量发布时出现问题
  2. 支持染色实验,让部分人进入实验环境
  3. QA的线上问题分析、验证、调试,甚至压测
架构与思维公众号 架构与思维·公众号:撰稿者为bat、字节、美团的几位高阶研发/架构,努力分享优质技术 ★ 加公众号获取学习资料和面试集锦 码字不易,欢迎关注,欢迎转载 作者:Brand 出处:https://www.cnblogs.com/wzh2010/ 本文采用「CC BY 4.0」知识共享协议进行许可,转载请注明作者及出处。

标签:服务,染色,流量,Mesh,版本,分级,ServiceMesh,路由
From: https://www.cnblogs.com/sexintercourse/p/18544639

相关文章

  • [题解]P11233 [CSP-S 2024] 染色
    P11233[CSP-S2024]染色设\(f[i][j=0/1]\)表示涂到第\(i\)位,且第\(i\)为颜色为\(j\),则考虑用\(i\)之前能和\(i\)匹配的位置\(p\)进行转移。\(p\)需要满足下面的条件:\(a[p]=a[i]\)。\(p\)的颜色为\(j\)。\([p+1,i-1]\)之间的颜色全不为\(j\)。显然,我们只需要找满足条件的......
  • 题解:[BZOJ2958] 序列染色
    ProblemLinkBZOJ2958序列染色题意给出一个长度为\(n\),由\(\ttB,W,X\)三种字符组成的字符串\(S\),你需要把每一个\(\ttX\)染成\(\ttB\)或\(\ttW\)中的一个。Solution字符串,染色,方案数,一眼\(dp\)。要求前半段是B,后半段是W。考虑容斥。\(f_{i,0/1},g_{i,......
  • Python 日志分级记录到不同文件的实现
    Python日志分级记录到不同文件的实现介绍如何使用Python的logging模块,按INFO、WARNING和ERROR级别将日志记录到不同的文件中。通过封装CustomLogger类,方便在项目中直接调用,简化日志管理。1.实现目标分级日志记录:将INFO、WARNING、ERROR级别的日志分别记录到不......
  • 题解 P11233【[CSP-S 2024] 染色】
    题目描述给定一个长度为\(n\)的正整数数组\(A\),其中所有数从左至右排成一排。你需要将\(A\)中的每个数染成红色或蓝色之一,然后按如下方式计算最终得分:设\(C\)为长度为\(n\)的整数数组,对于\(A\)中的每个数\(A_i\)(\(1\leqi\leqn\)):如果\(A_i\)左侧没有与其同......
  • Data+AI━━数据安全的警钟:智能化分类分级治理
    Data+AI━━数据安全的警钟:智能化分类分级治理前言数据的分类体系数据分级与智能化实践深度案例解析与未来展望前言OpenAI数据泄露事件让数据安全再次成为科技圈的热门话题。2024年3月,一名研究员发现OpenAI的API存在安全漏洞,导致部分用户的对话记录泄露。这一事......
  • 【染色时间】
    题目代码#include<bits/stdc++.h>usingnamespacestd;#definexfirst#defineysecondtypedefpair<int,int>PII;constintN=510;intdx[]={0,0,-1,1},dy[]={-1,1,0,0};intd[N][N],w[N][N];intn,m;voidbfs(){memset(d,0x3f,sizeof......
  • 易基因:Aging Cell/IF8:卵巢发育和衰老的m6A 甲基化揭示RNA稳定性和染色质状态调控
    大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。卵巢是女性重要的生殖器官,也是最早表现出衰老迹象的器官之一,通常在35岁左右开始,卵巢衰老(ovarianaging,OA)是导致与年龄相关的不孕问题的重要因素,包括卵泡数量和卵子质量的逐渐下降,对女性生育能力构成威胁。m6A是一种普......
  • P11233 CSP-S 2024 染色
    P11233CSP-S2024染色考试最后码方程忘记\(a[i-1]\)了,调不出来,只好\(50pts\)收尾。思路\(dp\)的难点在于确定一段的颜色后,无法快速找到上一段相同颜色的结尾。从这里入手,设\(dp[i][0/1][0/1]\)表示第\(i\)位颜色为\(1/0\),第三维表示是一段颜色的\(0\)开头或\(1......
  • 利用彩色相机给激光点云染色
    文章目录概述核心代码效果概述在激光SLAM(SimultaneousLocalizationandMapping)中,使用彩色相机为激光点云染色是一个常见的做法。这种技术结合了激光雷达的高精度距离测量和相机的丰富色彩信息,使得生成的点云不仅包含空间位置信息,还包含颜色信息,从而更直观和细......
  • 二分图的判别(染色法、匈牙利算法)
    二分图的判别:首先二分图是指一个图如果没有奇数环,则该图是二分图。其实这两种算法都是基于dfs来做的,要深刻理解每个算法的dfs指代的是什么。1、染色法:所谓的染色是指所有边的每一条边的两个端点颜色不同,算法思路就是让每个顶点都做一次dfs,判断其中有无同一条边的端点颜色相同。......