Nginx与tornado框架的并发评测

背景

分别测试在windows平台和linux平台(SuSE)下,tornado框架的并发效果,以及通过配置nginx对并发效果影响。

  • 操作系统:
    • windows: Windows Server 2008 SP2 (8C8G)
    • linux: SuSE12 SP3 (8C8G)
  • 并发测试工具:tsung
  • 测试访问:仅返回”Hello World”字符

评测过程

1、直接访问tornado,并发设置为500

  • windows
Namehighest 10sec meanlowest 10sec meanHighest RateMean RateMeanCount
connect36.11 msec32.51 msec620.3 / sec138.53 / sec33.18 msec44464
page0.11 sec33.02 msec1221.1 / sec272.69 / sec76.98 msec87507
request0.11 sec33.02 msec1221.1 / sec272.69 / sec76.98 msec87507
session1mn 56sec8.66 sec14.8 / sec1.66 / sec12.64 sec498
CodeHighest RateMean RateTotal number
200616 / sec138.70 / sec44536
NameHighest RateTotal number
error_abort0.333333333333333 / sec1
error_abort_max_conn_retries4.7 / sec104
error_abort_max_send_retries13.9 / sec394
error_connect_econnrefused35.8 / sec581
error_connection_closed35.7 / sec1023
  • liunx
Namehighest 10sec meanlowest 10sec meanHighest RateMean RateMeanCount
connect0.21 sec30.57 msec760 / sec127.01 / sec34.44 msec41788
page0.21 sec30.97 msec1474.9 / sec247.78 / sec39.04 msec81576
request0.21 sec30.97 msec1474.9 / sec247.78 / sec39.04 msec81576
session2mn 43sec3.33 sec11.9 / sec1.66 / sec5.48 sec498
CodeHighest RateMean RateTotal number
200762.6 / sec127.15 / sec41867
NameHighest RateTotal number
error_abort0.333333333333333 / sec1
error_abort_max_send_retries11.9 / sec498
error_connection_closed38.4 / sec1500
  • 说明

    在500的并发量下,无论在windows还是liunx平台,均有较多的连接错误。但框架系统还是比较稳定的,没有出现崩溃等情况。

2 、通过Nginx代理访问,并发设置为500

  • windows
Namehighest 10sec meanlowest 10sec meanHighest RateMean RateMeanCount
connect0.18 sec31.78 msec2287.5 / sec588.11 / sec0.11 sec179083
page0.58 sec0.17 sec2283.4 / sec587.32 / sec0.36 sec178778
request0.58 sec0.17 sec2283.4 / sec587.32 / sec0.36 sec178778
CodeHighest RateMean RateTotal number
2001736.4 / sec307.54 / sec94844
5021122.9 / sec280.16 / sec84048
NameHighest RateTotal number
error_abort0.5 / sec1
  • liunx
Namehighest 10sec meanlowest 10sec meanHighest RateMean RateMeanCount
connect0.17 sec32.16 msec801 / sec710.33 / sec73.15 msec216931
page0.69 sec0.16 sec798 / sec709.48 / sec0.58 sec216633
request0.69 sec0.16 sec798 / sec709.48 / sec0.58 sec216633
CodeHighest RateMean RateTotal number
200794.9 / sec709.79 / sec216726
5040.7 / sec0.04 / sec11
NameHighest RateTotal number
error_abort0.333333333333333 / sec1
  • 说明

    增加Nginx做反向代理之后,有效的提供了一定的缓冲。在windows平台下出现较多的code 502,说明后台没有及时返回,导致Nginx直接返回给压测工具code 502。在linux平台下就比较稳定了。

3、通过Nginx代理访问,后端设置4台服务器,并发设置为1000

  • windows
Namehighest 10sec meanlowest 10sec meanHighest RateMean RateMeanCount
connect0.20 sec35.78 msec4122.2 / sec508.31 / sec0.12 sec156715
page0.48 sec74.59 msec4109.8 / sec506.99 / sec0.28 sec156275
request0.48 sec74.59 msec4109.8 / sec506.99 / sec0.28 sec156275
CodeHighest RateMean RateTotal number
2004115.6 / sec507.68 / sec156481
NameHighest RateTotal number
error_abort0.333333333333333 / sec1
  • liunx
Namehighest 10sec meanlowest 10sec meanHighest RateMean RateMeanCount
connect0.21 sec36.22 msec4786.7 / sec533.37 / sec0.12 sec163256
page0.50 sec73.71 msec4784.9 / sec532.57 / sec0.29 sec162988
request0.50 sec73.71 msec4784.9 / sec532.57 / sec0.29 sec162988
CodeHighest RateMean RateTotal number
2004792.2 / sec533.28 / sec163199
NameHighest RateTotal number
error_abort0.333333333333333 / sec1
  • 说明

    由于后台扩充到了4台服务器,通过Nginx进行轮询访问,分散了压力。在1000的并发下,windows和suse平台表现不相上下,均无错误。

4、通过Nginx代理访问,后端设置4台服务器,并发设置为1500

  • windows
Namehighest 10sec meanlowest 10sec meanHighest RateMean RateMeanCount
connect0.19 sec32.09 msec2576 / sec1075.47 / sec0.10 sec327195
page0.50 sec71.39 msec2602.4 / sec1073.57 / sec0.31 sec326577
request0.50 sec71.39 msec2602.4 / sec1073.57 / sec0.31 sec326577
CodeHighest RateMean RateTotal number
2002502.1 / sec1001.18 / sec304862
502770.7 / sec84.82 / sec22052
NameHighest RateTotal number
error_abort0.333333333333333 / sec1
  • liunx
Namehighest 10sec meanlowest 10sec meanHighest RateMean RateMeanCount
connect0.20 sec33.41 msec3275.7 / sec990.22 / sec0.11 sec299354
page0.48 sec68.46 msec3270.3 / sec988.43 / sec0.27 sec298777
request0.48 sec68.46 msec3270.3 / sec988.43 / sec0.27 sec298777
CodeHighest RateMean RateTotal number
2003261.5 / sec989.09 / sec298975
NameHighest RateTotal number
error_abort0.333333333333333 / sec1
  • 说明

当并发增加到1500时,windows平台出现code 502,后端服务器出现瓶颈。linux平台表现稳定。

5、通过Nginx代理访问,后端设置4台服务器,并发设置为2000

  • liunx
Namehighest 10sec meanlowest 10sec meanHighest RateMean RateMeanCount
connect19.30 sec36.06 msec2187.66666666667 / sec611.56 / sec0.48 sec166002
page19.36 sec0.14 sec2197 / sec611.42 / sec0.57 sec165828
request19.36 sec0.14 sec2197 / sec611.42 / sec0.57 sec165828
CodeHighest RateMean RateTotal number
2002194.66666666667 / sec611.54 / sec172473
NameHighest RateTotal number
error_abort0.333333333333333 / sec1
error_connect_etimedout17.1 / sec318
error_next_session0.285714285714286 / sec2
  • 说明

    在2000并发先,linux平台后端依旧稳定返回code 200,但是Nginx会直接返回error,瓶颈出现在Nginx,需要调整相关配置了。

结论

这次测试中可以发现,当仅返回字符串Hello World时,无论是windows平台还是liunx平台,在并发500的情况下虽然框架可以稳定输出,但是会出现不同程度的系统处理不过来直接拒绝请求的情况。

通过增加Nginx,可以有效的为后端提供缓冲,同样500的并发下,liunx平台返回给Nginx的错误code 504要明显比windows平台code 502少很多。

通过增加后台服务器,使用Nginx进行轮询,可以增加并发,在后端4台服务器,1000的并发下,linux平台和windows平台表现不相上下。但并发增加到1500之后,windows平台开始出现大量的code 502错误,linux平台依旧稳定。把并发继续增加到2000,Nginx端出现瓶颈,返回连接错误,后端linux保持稳定。可考虑下通过调整Nginx配置或者增加Nginx来继续提升并发效果。

不过,从上述测试情况来看,torando框架还是很稳定的,不至于并高并发弄到崩溃的程度。