

Fast polling using C, memcached, nginx and libevent  - bsaunder
http://amix.dk/blog/post/19414

======
amix
It should be noted that this post was written over one year ago and we are not
using polling any longer, but comet solution.

We wanted to do realtime notifications and polling isn't a way to do this. We
tried different options and in the end wrote our own comet solution using
JBoss Netty. Working with JBoss Netty was really great, but we hit perfomance
limits on lots of open connections (100.000+).

At that time node.js was released and I did some experiments with it and found
it it had great perfomance and very low memory footprint. I also had an
university course on the V8 VM (by the actual Google team :)) so I was pretty
interested in V8 and node.js at that time. I experimented more with this and
eventually we rewrote our comet solution to node.js

Fast forward today we are still running node.js and processing many millions
notifications each day. I would recommend digging into node if you are
interested in building a scaleable notification system. Our comet
implementation for node.js is under 1 KLOC.

Other posts you might be interested in:

* <http://amix.dk/blog/post/19484#Comet-with-node-js-and-V8>

* [http://amix.dk/blog/post/19456#Plurk-Comet-Handling-of-100-0...](http://amix.dk/blog/post/19456#Plurk-Comet-Handling-of-100-000-open-connections)

* [http://amix.dk/blog/post/19489#Comet-long-polling-for-all-br...](http://amix.dk/blog/post/19489#Comet-long-polling-for-all-browsers-using-ScriptCommunicator)

~~~
rbranson
How does it compare performance-wise to the Netty solution? Is it better at
100k+ connections?

~~~
amix
Our node.js solution uses around 10x less memory than the Netty solution. It
also serves many more req. pr. sec on a lot of open connections. Of course,
Netty might have improved since we used it and we might have used it wrongly.
Generally my experience was good with Netty and buying a lot of memory is
cheap, so Java developers should definitely check it out.

A quick note is that we have implemented a custom java.nio solution and it had
similar memory usages like Netty. It was much harder to code, so I would not
recommend using java.nio directly, especially since there is little to gain in
terms of perfomance/scalability.

------
xtacy
What is the bottleneck here? I am surprised that the CPU utilisation is just
2%, which means, either the disk or the network is the bottleneck. Both these
aren't discussed. And of course, one shouldn't forget the fact that if CPU is
the bottleneck, we need "true" concurrency and there should be threads on
every single core. :-)

~~~
amix
Hitting a non-blocking C stack is much better than hitting a blocking Python
stack - especially when you have tons of clients hammering with polling
requests. So the optimization was to reduce the load on our Python servers by
handling most of the polling requests in a C based server.

------
aiurtourist
Check the second comment on that post. I'm glad someone else looked at that
guy's C and thought "Whoooaaa, oh no."

How can we take posts like this seriously?

~~~
rgrieselhuber
Zed Shaw's response was more helpful than yours.

He provided recommendations to fix the mistakes instead of just dissing the
whole thing. If you want people to write better code, share what you know.

Makes me wish Zed had a "Learn C the Hard Way" to complement what he's doing
with Python.

~~~
vimalg2
I think thats a really great idea.

I sure would like a 'hard way' courseware for C. (in addition to my trusty
copy of K&R C for reference)

------
jcsalterego
It was nice to see zedshaw reviewing C code in the comments there.

~~~
mahmud
Zed is a code-review maniac. I have seen his work with a friend's startup.
Would highly recommend that man for his insight and eye for quality code.

------
BenSchaechter
I'm interested to hear other peoples' thoughts on comet versus polling. I've
done polling solutions before and am in the process of setting up a comet
based solution.

In my opinion, having fewer requests to the server is better. But if someone
can combat me on this, I'd really be interested in hearing another voice.

