流量镜像功能测试 #
一、开发环境流量镜像 #
1.1 场景描述 #
ServiceA 调用ServiceB服务,ServiceB服务新增版本v2,v2开发阶段在开发容器测试服务健壮性;此时v2有公网访问地址http://ws-serviceB-gwxxx.oneitfarm.com,此时通过配置host直接把线上流量镜像到开发容器

1.2 配置示例 #
1.2.1 json配置参考 #
{
"to_unique_id":"sal2000189a2f457210330eaeomi002t", # 正式环境serviceB服务uniqueID
"last_update_time": 1600000123123,
"routers": [
{
"match":{
"prefix":"*"
},
"routes": [
{
"weight": 100,
"metadata": {
"version": "0.2.17"
}
}
],
"mirror":[
{
"host":"http://123.56.247.84:39210", # 公网接收流量地址
"percent":100 # 百分百镜像流量
}
]
}
]
}
1.2.2 平台界面配置 #

1.2.3 感应配置日志 #

1.2.4 请求日志 #
- 左侧为目标服务正常接收流量,每次接收到请求后打印请求数据及头部标识
- 右侧为镜像服务地址
http://123.56.247.84:39210,每次接收到请求打印请求数据及头部标识
观察可发现,正常服务请求标识中无x-request-type:shadow标识,镜像流量携带标识,业务侧可根据请求头判断流量属性做相应处理

二、蓝绿发布流量镜像测试 #
2.1 场景描述 #
ServiceA 调用ServiceB服务,ServiceB服务新增版本v2,v2版本上线到正式环境先不接收真实流量;通过镜像配置接收流量查看服务是否正常,有无错误日志,是否符合预期;做正式上线前的最后一步测试。

2.2 配置示例 #
首先在部署v2版本前先配置流量规则全部流量走v1版本,防止v2上线后自动加入负载均衡;并增加镜像配置
2.2.1 json配置参考 #
{
"to_unique_id":"sal2000189a2f457210330eaeomi002t",
"last_update_time": 1600000123123,
"routers": [
{
"match":{
"prefix":"*"
},
"routes": [
{
"weight": 100,
"metadata": {
"version": "0.2.17"
}
}
],
"mirror":[
{
"metadata": {
"version": "3.4.5" # 镜像到同一个uniqueID下的3.4.5版本
},
"percent":70 # 百分70流量镜像
}
]
}
]
}
2.2.2 平台界面配置 #

2.2.3 感应配置日志 #
sidecar接收到配置后,根据metadata属性匹配到目标服务(同一个目标uniqueID下的)的host地址,如果匹配到多个地址则只会选择首次匹配到的host镜像

2.2.4 请求流量展示 #
目标服务流量走势

2.2.5 流量牵引和流量镜像区别 #
- 流量牵引按照权重负载到各个版本,当增大其中一个版本权重时流量曲线上升,其他版本流量比例相对下降曲线成下降趋势,总体比例相加为100%,例:

- 流量镜像
正常版本流量保持不变,每次请求时复制一份流量发送到镜像服务,当镜像流量比例配置为100%时,总发送流量相加为200%,参考上图。
三、流量镜像其他功能说明 #
- 流量镜像除以上两种使用方式外,还可以作为辅助排查线上问题的方式使用:当线上服务出现异常日志无法定位到问题时,可配置流量镜像把特征流量镜像到一个公网的测试地址,通过在测试地址打印请求日志;查看发送到该服务的接口请求数据、header头部等等定位具体问题,定位问题结束后删除镜像配置,期间不会对线上流量有任何影响。
配置方式同开发环境流量镜像配置