背景
流量回放平台在录制过程中所录制的流量分类后发现重复流量太多,导致每次回放的时候会有上万条流量,某些流量的条数重复超过了30甚至更多,此类流量大多属于查询流量,回放过程中并不需要同样的流量回放这么多所以就需要我们在录制流量的过程中对流量进行采样率的设置。
流量类别分析
回放验证功能接口是否正常,所需的流量不需要太多,对覆盖率的要求更高。所以采样率的设置主要是针对查询类流量。对于涉及数据变更的流量来说。相同流量就比较少;数据的变更影响到功能数据的完整性。所以涉及数据变更的流量不应该设置采样率。
新增和更新操作经过采样后会导致数据不完整,回放时流量可能有数据依赖会导致回放失败。
方案
openresty
在openresty中增加接口采样率,只对需要采样的接口增加流量回放标识Repeat-TraceId-X。openresty增加设置接口采样率的接口,数据存储redis。
优点:对于不采样的数据直接放过不做任何更改
缺点:openresty更新比较麻烦,采样逻辑校验会增加接口响应耗时(此影响极小)
goreplay
在goreplay中增加接口采样率,只对需要采样的流量进行投递,非采样的流量直接抛弃。
优点:此方式比openresty成本略低
缺点:不是在源头控制
admin-service
在消费kafka投递过来的流量时进行流量采样判断,采样的流量正常处理,非采样流量直接丢弃。
优点:此方式研发成本最低,灵活性也比较高,可以对抛弃流量做任何处理。
缺点:不是在源头控制
结论
对以上三种方案进行对比后觉得采用admin-service更改的方案。此方案比较适合当下情况,方案的灵活性高,内容变动上线方便,且变动队线上业务应用无影响。