微服务性能测试的关键——IP欺骗技术
微服务的负载策略
对微服务进行测试时,我们经常会遇到具备相同功能的服务被部署多点的情况,如下图所示:

上图中黄色功能被部署了五个点,绿色功能被部署了三个点,而一个请求访问哪个点是由负载策略来分配的,以nginx做负载均衡为例,它的主要3种负载策略如下:
1.轮询:按请求时间顺序逐一分配后端服务器,优点:负载均衡,缺点:不支持会话保持;
2.ip hash:能保证每个请求访问ip访问固定的后端服务器,优点:可解决session问题,缺点:可能出现负载不均情况;
3.sticky(推荐方案):是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上。优点:session保持,负载均衡。缺点:客户端请求时必须带有效cookie信息,如果浏览器不支持cookie,那么sticky不生效。
例如选择ip hash这种策略,如果压力机不模拟多ip,nginx会把一台压力机发出的所有请求分配到一个应用上,这显然不是我么期望的!备注:使用IP hash策略要保证第三位和第四位IP段不同,例如192.168.1.2 和192.168.1.3 会被分配到同一台服务器上,设置192.168.2.2 和192.168.1.3,请求会被分配到不同的服务器上(吐血总结)。
实际解决方法如下:
1.需要多台压力机,同时进行压测。
2.利用jmeter 的IP欺骗机制,使用一台负载机,模拟多ip发送,这里重点讨论该方案。
jmeter 的IP欺骗机制
在电脑上配置IP,添加需要模拟的IP

点击上图中的高级,如下图所示:

点击上图中的添加,添加需要配置的ip即可,然后把新配置的IP保存到txt文件中,如下:

在jmeter中进行配置
1.添加csv数据文件,如下图:

2.CSV数据文件设置如下:

3.在HTTP请求默认值中应用参数
http请求默认值可以对所有的请求进行默认配置,进而减少配置工作量。具体配置方式如下图所示:

在Advanced页面的Source address里引入文件设置配置页面中的变量值即可

运行脚本验证
并发运行测试脚本后,在请求树中查看请求的X-LocalAddress值,发现IP 已经发生了变化!
请求1如下图所示:

请求2如下图所示:

到这里我们已经完成了IP的欺骗工作!可以通过一台jmeter压力机模拟多个ip分发请求,进而实现让负载分配请求到不同微服务的目的!原创不易,如果文章帮到了你,欢迎转发和点赞,让更多的朋友受益!