本文选自“字节跳动基础架构实践”系列文章 。1. 背景AB Test (diff 测试) 是在互联网行业中比较常用的验证方法,例如 google 通过 AB 实验针对广告和推荐的效果做验证,Twitter 研发了 Diffy ,把 Diff 验证能力应用到了 API 接口的质量保障上 。通常 AB Test 有两种形式,一种是线上多个服务版本,通过接入侧分流 AB 来做实验,但对于广告这类场景,一旦某个模型有问题,就会造成资损 。另外一个模式是通过线上的流量复制回放到内部环境,这种方式对于生产是绝对安全的,例如 Twitter 的 AB 验证服务 diffy 就是走的这个模式 。今天字节内部推荐,广告,等很多业务线都是通过线上流量实时回放的模式做 AB 实验 。为了满足业务的需求,我们自研了一套线上流量录制回放系统 ByteCopy 来支撑业务的海量流量吞吐和不断产生的对于流量录制回放的新需求 。
“字节跳动基础架构实践”系列文章是由字节跳动基础架构部门各技术团队及专家倾力打造的技术干货内容,和大家分享团队在基础架构发展和演进过程中的实践经验与教训,与各位技术同学一起交流成长 。
线上流量引流线下环境是一个通用需求,广泛应用于功能测试、压测等场景 。本文介绍了引流系统在字节跳动的发展过程和系统设计,希望能给大家带来一点新的思考和收获 。
这篇文章会从业务场景、系统架构、问题分析等几个方面来介绍 ByteCopy 这套系统的演进过程 。
2. 基于 TCPCopy 构建第一代引流系统2.1 业务需求刚开始业务的需求还是比较简单的,就是希望在业务方部署好了目标服务 (HTTP 和 RPC) 后,引流系统可以把对应线上生产的流量复制一份并转发过去,并且整个引流过程可以灵活管控,只在需要流量的时候开启 。
2.2 系统选型从引流自身来看,主要分为 2 种类型,主路复制和旁路复制,我们分别来分析一下这两种模式的优劣 。
2.2.1 主路复制主路复制是指在调用链中进行流量复制:一种是在业务逻辑中进行流量复制,如在调用 API/RPC 过程中,由业务方编写代码逻辑,记录 request / response 信息内容;另外一种是在框架(如使用 Dubbo、Service Mesh 等网络框架)处理逻辑中进行复制 。
优点
- 可以高度结合业务逻辑,实现细粒度定制化流量复制,比如可以只针对某个用户的流量进行复制,可以最大程度上提升引流源上的有效流量采集比 。
- 业务逻辑与引流逻辑耦合度较高,功能上相互影响 。
- 每个请求都需要进行额外引流处理,对业务流程存在性能影响 。
- 对于流量有细粒度筛选要求的,或与业务逻辑有关,可以选择主路复制;如 Service Mesh 中根据染色标记,进行流量复制 。
优点
- 与业务解耦,可以独立部署升级引流模块,业务方无需关注引流功能实现;通过在协议栈底层进行流量复制,性能较好 。
- 4 层网卡层面的网络包抓取后,仍需要进行数据包的重组和解析,需要额外的消耗计算资源 。
- 往往需要全量抓包解析再进行筛选,无法结合业务逻辑进行定制化的采样 。
文章插图
TCPCopy 的主要优势:
- 协议无感知,可以透明转发,能够支持基于 TCP 的任意应用层协议,如 MySQL,Kafka,redis 等
- 实时转发,延时较低
- 可以保留原始请求 IP 端口信息,测试服务器可用于统计
- 无法动态添加多个下游服务器
- 由于透明转发,不做协议解析,无法发现数据异常,如部分 TCP 包丢失,测试服务器将收到不完整的数据;此外,也无法对应用层数据进行筛选和修改进行修改
- 核心组件设计时未进行多线程设计,处理能力存在瓶颈
- 需要修改 iptables 来丢弃下游服务的回包,用在生产或公共的测试环境存在较大风险
- vivo|vivo X80系列全球首发!vivo自研芯片V1+官宣
- 算法血拼:Google+百度+Alibaba+字节+Tencent+网易+360+拼夕夕
- Steam|Steam掌机将支持自研版“VRR”:锁40帧 丝滑流畅
- kb是什么意思啊?
- 字节跳动面试必会:快速选择算法,TopK问题最优解
- 肚子在跳动是什么呢
- 刷透近200道数据结构与算法,成功加冕“题王”,挤进梦中的字节
- 厉害了华为!开源自研算法Disout
- vivo|天玑9000加持!vivo X80 Pro样张首曝:用上自研影像芯片
- 黑客教程——Padding Oracle Attack&CBC字节翻转攻击详解