3. 流量切分基础
在金融系统的灰度发布中,流量切分是决定“哪些用户、哪些请求、以多大比例进入新版本”的核心控制手段。它既是灰度发布的执行入口,也是风险控制的第一道闸门。理解流量切分的定义、维度与策略,是构建可控灰度体系的前提。
一、什么是流量切分
流量切分(Traffic Splitting)是指在请求进入系统后,按照预设规则将流量分配到不同版本、不同集群或不同服务实例上的过程。在金融场景中,它通常发生在网关、服务网格或RPC框架层,目标是在不中断整体服务的前提下,让一部分流量先经过新版本验证。
流量切分与负载均衡有本质区别:负载均衡追求的是均匀与稳定,而流量切分追求的是可控的选择性。它需要回答三个问题:切给谁、切多少、切多久。这三个问题分别对应切分维度、切分权重和切分生命周期。
二、常见切分维度
金融业务对用户身份和资金安全高度敏感,因此切分维度的选择往往比互联网场景更谨慎。常见维度包括:
- 按用户切分:基于用户ID、客户号、会员等级、机构代码等。适合需要同一用户始终看到同一版本的场景,如账户页面、交易流程。
- 按请求切分:基于请求头、参数、接口路径、设备指纹等。适合按业务功能逐步放量,如先切查询接口,再切支付接口。
- 按权重切分:按百分比随机分配,如5%流量进入新版本。适合无状态服务或对一致性要求不高的场景。
- 按地域/机房切分:基于IP、区域、数据中心。适合多活架构下的区域性验证。
- 按时间切分:在特定时间窗口内放量,如交易低峰期。适合对时段敏感的业务。
| 切分维度 | 典型依据 | 适用场景 | 风险点 |
|---|---|---|---|
| 用户维度 | 客户号、会员等级 | 账户、交易流程 | 用户数据一致性 |
| 请求维度 | 接口路径、请求头 | 功能级灰度 | 接口依赖遗漏 |
| 权重维度 | 百分比随机 | 无状态服务 | 样本偏差 |
| 地域维度 | IP、机房 | 多活验证 | 区域差异 |
| 时间维度 | 时间窗口 | 低峰期放量 | 窗口过短 |
三、常见切分策略与执行流程
在实际落地中,单一维度往往不够,金融系统更常采用组合策略。典型策略包括:
- 白名单策略:指定内部员工或种子用户先行验证,风险最低,但样本有限。
- 百分比策略:按权重逐步放量,如1%→5%→20%→50%→100%,适合快速迭代。
- 规则组合策略:用户维度与请求维度组合,如“VIP客户+查询接口”先切。
- 一致性哈希策略:保证同一用户始终命中同一版本,避免体验割裂。
执行流程通常为:定义切分规则 → 配置到网关/服务网格 → 请求进入时匹配规则 → 路由到目标版本 → 采集指标 → 根据指标调整权重或回滚。以下是一个典型的网关切分配置示例:
route:
- match:
headers:
x-gray-tag: "v2"
weight: 10
- match:
user_group: "vip"
weight: 30
default:
weight: 60
target: "v1"
日志中应记录每次路由决策,便于复盘:
2024-06-01 10:23:11 INFO [gray-router] user=U88321 rule=vip weight=30 target=finance-v2 trace=abc123
2024-06-01 10:23:12 INFO [gray-router] user=U90211 rule=default weight=60 target=finance-v1 trace=abc124
四、流量切分与灰度发布的关系
流量切分是灰度发布的执行机制,灰度发布是流量切分的业务目标。没有流量切分,灰度发布只能靠停机或全量切换;没有灰度发布,流量切分只是负载均衡的变体。两者结合后,形成“规则定义—流量分配—指标观测—决策调整”的闭环。
五、误区与复盘
常见误区包括:只按权重切分而忽略用户一致性,导致同一用户在不同请求中看到不同版本;切分规则过于复杂,难以排查;未记录路由日志,出问题后无法定位影响范围;以及把灰度当测试,未设置回滚阈值。
复盘时应重点关注:切分规则是否覆盖全部入口、是否存在规则冲突、指标采集是否完整、回滚是否在分钟级完成。只有把流量切分当作可观测、可控制的工程能力,灰度发布才能真正降低金融系统的变更风险。