Linjie +

春晚 Locust 分布式压测---20W 并发

cat face

前言

最近在做辽宁春晚抽奖的系统,而辽宁春晚是仅次于央视春晚的晚会,用户观看量大,对并发性能要求较高。

计划设计实现 20W 并发规模,如何实现此种规模的压测,经过不断讨论验证,计划使用 Locust 集群模式。

Locust完全基于事件驱动,摒弃了进程和线程,使用gevent提供的非阻塞IO和coroutine来实现网络层的并发请求,能在使用较少压力机的前提下支持极高并发数的测试。

分布式场景

Locust分布式场景有两种:

单台机器设置 Master 和 Slave

多台机器时,一台调度机(Master),其他机器设置执行机(Slave)

前期准备

压测主机资源

Intel Xeon Gold 5118(12核)1台,locust 集群Master Intel Xeon Gold 5118(12核)4台,locust 集群worker

修改各主机文件句柄限制

安装Locust(python、pip、locust版本对应)

压测Python脚本

编写Python脚本模仿用户抽奖行为,对后台接口进行请求。

压测(三次)

第一轮压测

压测目的:20w并发验证; 预期结果:能达到20w并发,各项系统性能指标正常; 前期准备:使用脚本调整限流为20w; 持续时间:5分钟

监控内容:

  1. 应用主机cpu、内存、网络变化情况
  2. 压测机器cpu、内存变化情况,locust集群运行状态
  3. 中间件 redis(链接数,内存等,慢日志等)
  4. F5运行监控

压测过程:

  1. 启动locust集群,节点数与cpu总核数一致
  2. 执行压测任务,运行压测脚本,模拟用户请求抽奖接口
  3. 监控各项指标
  4. 输出压测系统性能指标

可能出现问题及解决方案:

  1. 压测locust集群达不到20w并发 Locust集群扩展,增加压测机器性能或拓展节点
  2. 应用主机资源达到极限,资源耗尽,业务堵塞 应用主机资源扩展,增加主机性能或拓展节点
  3. Redis集群各项指标达到极限 Redis集群扩展

第二轮压测

压测目的:最高并发压力测试; 预期结果:有较大并发冗余,各项指标到达最大值,输出当前系统最高性能指标; 前期准备:关闭所有限流、漏斗; 持续时间:5分钟

监控内容:

  1. 应用主机cpu、内存、网络变化情况
  2. 压测机器cpu、内存、网络变化情况,locust集群运行状态
  3. 中间件 redis(链接数,内存等,慢日志等)
  4. F5运行监控

压测过程: 1、 启动locust集群,节点数与cpu总核数一致 2、 执行压测任务,运行压测脚本,模拟用户请求抽奖接口 3、 监控各项指标 4、 输出压测系统性能指标

可能出现问题及解决方案:

  1. Locust集群并发达到极限,但并发冗余较小 增加locust集群节点
  2. 应用主机资源使用达到极限,但并发冗余较小 增加应用运行节点

第三轮压测

压测目的:20w并发下业务流程流程及结果检验,模拟真实操作; 预期结果:系统性能及业务中奖各项数据指标正常,奖品发放过程及结果符合要求; 前期准备:调整限流为20w,多级漏斗开启; 持续时间:5分钟 监控内容:

  1. 主机cpu、内存、网络变化情况
  2. 中间件 redis(链接数,内存等,慢日志等)
  3. F5运行情况
  4. 中奖相关数据

压测过程: 1、 启动locust集群,节点数与cpu总核数一致,发挥全部性能 2、 执行压测任务,运行压测脚本,模拟用户请求抽奖接口 3、 监控各项指标,中间模拟现场操作,运行脚本修改库存、限流 4、 输出压测系统性能指标,检查中奖数据及库存扣减情况

可能出现问题及解决方案:

  1. 中奖流程、库存扣减与预期不一致 检查相关扣减逻辑、脚本

Blog

Music

Travel