[Chicago] Facebook open sources FriendFeed's real-time Python web framework, Tornado
Garrett Smith
g at rre.tt
Tue Sep 15 03:11:50 CEST 2009
I'm maintaining an informal list of benchmark results of a simple "Hello
World" style app for various web servers. I just updated the list to include
Tornado.
These benchmarks are part of a web framework I'm working on in Erlang called
Landshark. The app must print the test "You're that clever shark, aren't
you" in either HTML or plain text. The numbers are from Apache Benchmark
running for 10 seconds under different concurrency levels.
The numbers below are not rigorous by any stretch. In fact, please consider
them, officially, damned lies.
Based on these lies, however, here's my personal takeaway, at least as far
as the Python servers are concerned:
- CherryPy is very, very fast and has the upside of being threaded, which
means you don't need to deal with weird async/event based models (see
Kumar's post to this thread, which is spot on)
- Fapws, which spells "Fast Asynchronous Python Web Server" is very, very
fast indeed, as it's mostly written in C -- however it's event based (used
libev) so beware of blocking operations (e.g. network or file access) and
slow Python code, which will bring your numbers down to numbers to mortal
levels
- Tornado is an impressive contender here -- solid throughput even at
high levels of concurrent requests; however, it's only slightly faster than
CherryPy within "reasonable" levels of concurrent requests (10,000 or less)
and, if you're a speed freak, you should consider Fapws, which blew the
field away
Obviously there's a lot behind the numbers, such as configuration, system
under test, etc. Like I said, they're lies. If you have questions or, in
particular, can help me make these go faster with smarter configuration,
I'll happily rerun and publish. If you can make WEBrick (a Ruby server) go
faster than my friend's golden retriever, which is trained to serve dynamic
HTML, I'll buy you a beer.
As a final note, the tests themselves will be available with the Landshark
download, once that's posted, so people can re-run the tests for themselves.
Of course, it's not that hard to run ab against a hello world app.
RPS = requests per second
Time = average time in milliseconds to server each request
Benchmark = `ab -t 10 -c <number of concurrent requests>-r http://localhost`
100 Concurrent Requests
-----------------------
=============== ====== ===========
App Server RPS Time (ms)
=============== ====== ===========
Fapws 7174 14
Landshark 4479 22
PHP-5 4191 24
Tomcat 6 3554 28
Tornado 2641 38
CherryPy WSGI 2102 48
Jetty 6 937 107
Django WSGI 785 129
WEBrick 43 2350
=============== ====== ===========
1,000 Concurrent Requests
-------------------------
=============== ====== ===========
App Server RPS Time (ms)
=============== ====== ===========
Fapws 5359 187
Landshark 4477 224
PHP 5 3062 345
Tomcat 6 3014 345
Tornado 2452 409
CherryPy WSGI 2126 470
Jetty 6 1095 949
Django WSGI 953 1057
WEBrick 50 20607
=============== ====== ===========
10,000 Concurrent Requests
--------------------------
=============== ====== ===========
App Server RPS Time (ms)
=============== ====== ===========
Fapws 5213 1920
Landshark 4239 2361
Tomcat 6 2369 4752
Tornado 2265 4439
PHP 5 2239 4282
CherryPy WSGI 1731 5786
Jetty 6 794 13210
Django WSGI 890 12330
WEBrick 84 163425
=============== ====== ===========
20,000 Concurrent Requests
--------------------------
=============== ====== ===========
App Server RPS Time (ms)
=============== ====== ===========
Fapws 4788 4178
Landshark 2936 6823
Tornado 2153 9315
PHP 5 1728 11578
Tomcat 6 1362 15102
CherryPy WSGI 1294 15477
Django WSGI 790 27633
Jetty 6 616 32492
WEBrick 63 462464
=============== ====== ===========
On Thu, Sep 10, 2009 at 12:52 PM, Kumar McMillan <kumar.mcmillan at gmail.com>
wrote:
> This may be of interest to fellow Chipynauts:
> http://developers.facebook.com/news.php?blog=1&story=301
>
> "FriendFeed's web server is a relatively simple, non-blocking web
> server written in Python. The FriendFeed application is written using
> a web framework that looks a bit like web.py or Google's webapp, but
> with additional tools and optimizations to take advantage of the
> non-blocking web server and tools."
>
> Docs: http://www.tornadoweb.org/documentation
>
> It uses epoll (from Linux kernel), interesting.
> _______________________________________________
> Chicago mailing list
> Chicago at python.org
> http://mail.python.org/mailman/listinfo/chicago
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/chicago/attachments/20090914/934542c7/attachment.htm>
More information about the Chicago
mailing list