思路是要钱滴~~:D
因为题主没有说明,百万并发是长链接还是短链接,那下面的回答以长链接为例。
(短链接的并发测试基本等价于洪水压力测试,一般不用单独测试。只有长链接需要。)
首先,你要确定,要测的是单台服务器,还是服务器集群?
直播答题那一类的百万链接都是集群抗,而不是单台。
RPC框架只测单台,MapReduce 类框架单台和集群都需要测,业务网关需要测单台,业务整体需要测集群。
先不说集群和单台的测试,先说测试客户端,也就是压力源。
压力源有两个很重要的参数:链接数量,和单连接上的QPS。
压力源在开发的时候,有两个要注意的地方:除非你的服务器/框架性能不高,否则不建议用Python、PHP 等输出压力;如果你的服务器/框架是C/C++开发的,不建议用 C/C++ 之外的语言开发压力源。否则你的压力源服务器不是几十台就能下得来的。
注意是链接数量,不是客户端数量。因为有些RPC框架,会将相同地址和端口的链接在底层合并,比如brpc。在用户代码层面看来可能是有几万个客户端,但实际上只有一个链接出去。这种对链接优化的客户端,不适用于开发并发压力源。
然后是测试部署。
被测试服务器一定要与压力源在不同的机器上!!!
重要的事情说三遍:
被测试服务器一定要与压力源在不同的机器上!!!
被测试服务器一定要与压力源在不同的机器上!!!
被测试服务器一定要与压力源在不同的机器上!!!
除非压力源的资源使用不到被测服务的1/10。但压力测试情况下,同机部署,压力源一般会是被测服务资源耗费的数倍,至数十倍。(部分简单服务除外,比如 redis 的单进程单线程无锁版本)
然后是测试流程:
先做单机的洪水压力测试,确定单机特定硬件配置下的QPS上限;
然后根据这个上限确认百万并发测试的QPS 压力递增分级;
然后确定每个压力递增分级的链接数量。比如2万链接为一个递增单元;
然后先以低等级QPS进行链接递增测试;
然后逐渐提升QPS压力等级,重新进行链接递增测试。
当然,如果压力源开发的比较复杂,在已有连接上逐步增加QPS,对测试流程会更友好。不过这样做有可能会增加压力源开发难度,和降低压力源输出压力(需要更多的机器充当压力源)。
集群测试类似。
最后,记得修改端口限制,比如 Linux 的 /proc/sys/net/ipv4/ip_local_port_range。否则单机无法输出6万长链接。。。。。那将会耗费更多的机器充当压力源。
(假设一台机器6万链接,100万链接的并发,也需要17台机器充当压力源)
最后,如果单次递增的 QPS 或 链接数量较大,注意服务器在压力增加时的负载波动,以及可能的冲击性临时过载。
最后,如果是C++的同学,不妨试用一下 highras/fpnn
该框架服务的项目DAU总数已超千万~。