流量平台如何选型

构造流量

常见方式 线上流量回放 线上流量引流 流量模拟
主要原理 将线上集群的流量复制多份发送到指定的仓库, 然后使用指定压力机器进行放大回放,以达到压力测试的目的 将线上集群环境中多台机器的请求转发到一台机器上,以达到压力测试的目的 使用常见压测工具发起模拟流量调用来达到压力测试的目的
常用手段 TCPProxy、GoReplay、JVM-Sandbox-Repeater 1.使用nginx插件,nginx_http_mirror_module、Traefik Ingress 将线上环境的流量复制转发到一台机器上;
2.修改负载均衡中某台机器的权重,将更多的流量直接打到某台机器上,让待压测的机器分配更多的流量
Jmeter、Locust、nGrinder、Gatling工具模拟
优点 直接利用线上流量模型,使得压测的流量跟真实的业务流量很接近 1.直接使用最真实的线上流量;
2.操作方便;
3.压测结果较为准确
4.不会产生脏数据
1.上手简单;
2.开源;3.改造成本地;
4.性能开销少
缺点 1.需要借助一些自动化工具来提效;
2.需要解决各种session问题;
3.需要处理写请求脏数据的问题;
4.压力机器需要单独提供
只需要满足单机的需求,无法满足整体集群的压测需求 1.模拟先生真是流量模型成本较高;
2.大部分情况都在内网使用;
3.海量数据容易出现瓶颈;
4.需要处理写请求脏数据问题
适应场景 1.业务链路比较长的系统;
2.访问量大的系统需要改造
1.单机压测;
2.基准场景
1.新系统上线;
2.访问量不大的系统

流量回放工具方式

基于应用层的流量回放工具 基于网络栈的流量回放工具,直接从链路层抓取数据 基于web服务器的请求复制
优点 实现简单,扩展性好,可定制化高 安装部署方便,对应用影响较小 请求多样化、成本低
缺点 挤占线上应用的资源,有可能会影响正常业务,要求高 实现复杂,只适合无状态的业务,无法轻易处理session 不具备通用性、丢失网络延迟、占用资源比较严重

流量回放工具比较

常见工具 TCPProxy GoReplay JVM-Sandbox-Repeater RDebug
实现方式 底层依赖pcap库,复制基于TCP的packages包,修改TCP/IP头部信息,发给测试服务器 底层依赖pcap库,复制基于TCP的packages包,启动一个Gor进程,它负责所有的工作包括监听、过滤和转发 基于JVM Sandbox框架,通过字节码增强注入对目标应用进行AOP拦截 启动一个录制进程,它负责所有的工作包括监听、过滤和转发
开发语言 C Golang Java Golang、C、C++、Php
作者 王斌 Leonid Bugak 阿里巴巴 滴滴
支持协议 基于TCP的任意应用层协议 https HTTP/Java/Dubbo Http/Thrift等
支持的应用 所有应用 所有应用 仅Java应用 仅PHP应用
优点 1.支持的协议比较丰富;
2.业务透明,代码完全解耦;
3.支持保留原数据
1.轻量,安全部署简单;
2.上手简单且易用;
3.功能丰富:支持流量过滤、倍数回放、参数改写;
4.业务透明、与业务代码完全解耦;
5.提供插件机制、可扩展;
6.知名度高,社区活跃
1.字节码增强方式,直接对Java类操作,功能较为强大;
2.业务透明,与业务完全解耦;
3.可插拔、较灵活、可自由组合
1.支持下游流量录制、回放不依赖下游环境;
2.业务透明、与业务代码完全解耦
缺点 1.部署结构稍复杂;
2.部分丢包;
3.有一定的学习成本;
4.存在性能瓶颈;
5.存在安全风险;
6.无法轻易处理session
1.不规范的HTTP请求可能丢失;
2.仅支持HTTP协议;
3.无法轻易处理session;
4.个人项目,社区相应速度一般
1.底层较复杂,有一定的学习成本;
2.会挤压线上应用的资源;
3.定位偏回归测试、无回放倍数功能;
4.有一定的开发工作量,维护成本高;
5.社区活跃性低
1.有一定的学习成本;
2.会挤占线上应用的资源;
3.需要一定的开发量,维护成本高;
4.还不成熟

你可能感兴趣的:(流量平台如何选型)