`
iyuan
  • 浏览: 463908 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于web.py + gevent + nginx的那些事儿

阅读更多
一直都是用的web.py,因为简单。
也用gevent,因为效率。

最近要布置一个api,直接web.py,写的是快,速度似乎有些跟不上了

C:\Users\iyuan>ab -n 10000 -c 3 http://172.16.0.98:8080/?t=32424&x=982/
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.16.0.98 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Finished 10000 requests


Server Software:        CherryPy/3.1.2
Server Hostname:        172.16.0.98
Server Port:            8080

Document Path:          /?t=32424
Document Length:        4 bytes

Concurrency Level:      3
Time taken for tests:   26.884000 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      960000 bytes
HTML transferred:       40000 bytes
Requests per second:    371.97 [#/sec] (mean)
Time per request:       8.065 [ms] (mean)
Time per request:       2.688 [ms] (mean, across all concurrent requests)
Transfer rate:          34.85 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    2   1.9      2      38
Processing:     2    5   3.7      4      42
Waiting:        1    4   3.3      3      42
Total:          3    7   4.9      5      49

Percentage of the requests served within a certain time (ms)
  50%      5
  66%      7
  75%     10
  80%     11
  90%     14
  95%     18
  98%     22
  99%     24
 100%     49 (longest request)


加上了gevent,对一些可能出现等待的东东封装一下,速度看似有好转:
C:\Users\iyuan>ab -n 10000 -c 3 http://172.16.0.98:8080/
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.16.0.98 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Finished 10000 requests


Server Software:        gevent/0.13
Server Hostname:        172.16.0.98
Server Port:            8080

Document Path:          /
Document Length:        4 bytes

Concurrency Level:      3
Time taken for tests:   23.223000 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      1380000 bytes
HTML transferred:       40000 bytes
Requests per second:    430.61 [#/sec] (mean)
Time per request:       6.967 [ms] (mean)
Time per request:       2.322 [ms] (mean, across all concurrent requests)
Transfer rate:          58.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.8      1      15
Processing:     2    5   1.6      6      22
Waiting:        2    5   1.5      5      22
Total:          3    6   1.8      7      26

Percentage of the requests served within a certain time (ms)
  50%      7
  66%      7
  75%      7
  80%      7
  90%      8
  95%      9
  98%     12
  99%     14
 100%     26 (longest request)


记得看过一个神帖,关于各种python HttpServer的测评,干脆也简单来个,下面的是纯gevent的:

C:\Users\iyuan>ab -n 10000 -c 3 http://172.16.0.98:8080/?t=32424&x=982/
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.16.0.98 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Finished 10000 requests


Server Software:        gevent/0.13
Server Hostname:        172.16.0.98
Server Port:            8080

Document Path:          /?t=32424
Document Length:        0 bytes

Concurrency Level:      3
Time taken for tests:   14.688000 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      1140000 bytes
HTML transferred:       0 bytes
Requests per second:    680.83 [#/sec] (mean)
Time per request:       4.406 [ms] (mean)
Time per request:       1.469 [ms] (mean, across all concurrent requests)
Transfer rate:          75.78 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.5      1      15
Processing:     1    3   0.8      3      17
Waiting:        1    2   1.0      2      17
Total:          2    4   0.9      4      21

Percentage of the requests served within a certain time (ms)
  50%      4
  66%      4
  75%      5
  80%      5
  90%      5
  95%      5
  98%      6
  99%      7
 100%     21 (longest request)


当然,结果比较着看还不错,不过一如既往的与测评贴差的很远

好吧,上通常用的配置,fast-cgi起5个web.py版的,由nginx接上,结果与单gevent差不多:
C:\Users\iyuan>ab -n 10000 -c 3 http://webrpc-test.ex-sandbox.com/?t=32424&x=982

This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking webrpc-test.ex-sandbox.com (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Finished 10000 requests


Server Software:        nginx/0.6.37
Server Hostname:        webrpc-test.ex-sandbox.com
Server Port:            80

Document Path:          /?t=32424
Document Length:        4 bytes

Concurrency Level:      3
Time taken for tests:   15.892000 seconds
Complete requests:      10000
Failed requests:        361
   (Connect: 0, Length: 361, Exceptions: 0)
Write errors:           0
Non-2xx responses:      361
Total transferred:      1032021 bytes
HTML transferred:       46137 bytes
Requests per second:    629.25 [#/sec] (mean)
Time per request:       4.768 [ms] (mean)
Time per request:       1.589 [ms] (mean, across all concurrent requests)
Transfer rate:          63.37 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.7      1      11
Processing:     1    3   1.8      3     137
Waiting:        1    2   1.9      3     137
Total:          2    4   2.0      4     139

Percentage of the requests served within a certain time (ms)
  50%      4
  66%      5
  75%      5
  80%      5
  90%      5
  95%      7
  98%     10
  99%     11
 100%    139 (longest request)


对照着gevent似乎也比较可以接受,如果没有丢包的话。好吧,如此严重的丢包有些不太让人接受。

考虑到url,访问权限之类的问题,nginx是必须的。
突然有点厌烦这一堆测试数据,特别是没有成就感的状态下。不过本着有始有终的原则,最后一组也做了吧,nginx proxy gevent,起来两个独立gevent,由nginx 飘着,
速度时快时慢,不过倒是没丢数据,rps也在400+。


综合考虑,采用 nginx 代理 gevent模式,速度可以接受,稳定也是关键啊。
不过 web.py + gevent.queue + fcgi + nginx也是不错的选择,不过这个适用于非及时性的server

有点凌乱了,就这么着吧
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics