测试20万qps的web接口(三)

测试20万qps的web接口(二)

本篇文章主要用于描述:在如何应对支撑大量短连接请求时,遇到的问题。

设想

设定:client只绑定一个ip,并且压测时只指定一个目标ip(这样就不需要针对不同的压测程序做特殊处理),web只绑定一个ip。

目标:如果想在client和web之间发起大量的短连接请求(每秒20W),是否可以在两者之间插入一个负载均衡组件来处理?

结论:做了很多尝试,发现即使使用lvs,也没法突破连接四元组限定。

正确方式一

很早之前,做过类似的实验。

在client上绑定了多个ip,通过jmeter发起压测请求时,设置不同源ip,这样可以支撑大量的短连接。

正确方式二

很早之前,做过类似的实验。

在client和web之间加入nginx,client访问nginx,nginx访问web。

错误方式一

使用前两种正确方式时,都需要在client做一些特殊处理(要么绑定多个源ip,要么指定多个目标ip,对压测程序的使用造成不便)。

有没有一种更加通用的方案,比如直接在client和web之间插入一个负载均衡组件,就可以在压测端和目标端之间创建非常多的短连接?

本次引入了lvs来作为负载均衡组件,使用了DR和NAT模式,通过实验,发现这种方式不行(之前对lvs连接建立方式的理解有偏差)。

client只绑定1个ip,并且压测时只指定一个目标ip,这样是不能创建大量的短连接(比如每秒1万)。

因为client会与lvs的vip创建tcp连接,也就是只有1个四元组。

刚开始使用浪潮5212M5和PVE搭建测试环境,改了很多种参数(绑定多个ip、nginx的split_clients设置),没有成功。

这是使用PVE创建的虚拟机。

觉得可能是自己对lvs的理解有偏差,开始使用轻量级的vmware搭建DR模式的测试环境。

通过分析网络连接,发现client与vip之间建立的tcp连接是一个固定的四元组。

既然DR模式不行,就测试nat模式。

通过分析网络连接,发现client与vip之间建立的tcp连接是一个固定的四元组。

结论:client会与lvs的vip建立tcp连接,这个vip在哪个服务器上不重要,标识这个连接的就是一个固定的四元组。

之前错误以为client会与lvs的dip建立tcp连接,这样就可以扩展多个四元组。

后续规划

这次实验失败,受到了很大的挫折。

搭建lvs和pve环境遇到了各种问题(比如网关、转发、nat、pve的虚拟网桥)。

搭建大量短连接测试环境的意义时什么,真有那么大作用吗?

是否要研究或定制wrk?

有没有大佬可以指点一下。

相关推荐
Johnstons2 个月前
如何精确模拟网络丢包进行测试?实测指南
开发语言·网络·php·网络测试·网络损伤·弱网模拟
请为小H留灯6 个月前
网络连通性测试:3 种常用方法(Telnet、Ping、Curl)详解
网络·curl·telnet·网络测试
_OP_CHEN8 个月前
【测试理论与实践】(四)测试用例篇(上):从概念到万能思路,解锁测试设计核心密码
运维·测试开发·测试用例·bug·压力测试·测试·网络测试
阿巴~阿巴~9 个月前
简易回声服务器实现与网络测试指南
linux·服务器·网络·udp协议·网络测试·udp套接字编程
阿巴~阿巴~9 个月前
UDP服务端绑定INADDR_ANY后,客户端该用什么IP访问?
服务器·网络·udp协议·网络测试·udp套接字编程·inaddr_any
Code_Shawn2 年前
UDP_USER_INTERFACE_07:用户界面 - 源IP地址(待发送)
网络·网络协议·tcp/ip·udp·网络测试·tc8 测试
Code_Shawn2 年前
UDP_INTRODUCTION_03:介绍 - 挂起的监听调用
网络·网络协议·tcp/ip·udp·网络测试·tc8 测试
Code_Shawn2 年前
UDP_INVALID_ADDRESSES_01:无效地址 - 多播源地址
网络·网络协议·tcp/ip·udp·网络测试·tc8 测试