

Fast polling using C, memached, nginx and libevent - amix
http://amix.dk/blog/viewEntry/19414

======
axod
>> "From what I have seen, all comet solutions are very hacky, quirky and very
hard to scale. The scaling is especially hard since the whole web-platform is
built around the request-response model."

I disagree about this. There's nothing hacky/quirky about comet, and it can
scale really well. Some numbers from a Mibbit backend:

    
    
      Peak connected users: 4,000
      Peak HTTP Req/s: 1,500
    
      HTTP requests per day: 44 million
      Packets sent per day: 42 million
      Packets recv per day: 51 million
    
      (On a single 1.4GB VPS). Using *OMG* java!
    

If you're not using comet, that HTTP req figure would be way higher, as a far
larger number of HTTP requests would be unuseful (no data available). Wasting
time, bandwidth, etc As well as obviously adding latency. With comet, the data
is available in most instances as soon as the server has it ready. With
standard polling, the user has to wait for the next poll.

Comet is pretty easy to scale once you understand exactly what is going on,
and how best to organize things. Mibbit uses a keep-alive long polling XHR
setup which works really well. The keep-alive ensures that most of the time,
you just have a tcp/ip connection open from server to client, with some HTTP
request/response spam every so often, and the actual packets.

Having said that, I wouldn't use any of the open source comet things I've seen
out there.

(I do plan to open source Mibbit at some point, which might be useful for
people).

~~~
amix
I think Java is a pretty good choice, especially for doing comet or any other
problem where performance is required. Today Java's perfomance almost matches
the speed of C or C++... I have some time ago played around with using Jetty's
continuations and it's pretty impressive (and highly scaleable).

In my next iteration I'll probably try to go with the long polling model and
I'll probably explore C and Java.

Thanks for sharing your architectural notes.

~~~
axod
Cool :)

Forgot to also mention CPU usage is negligable. Memory can be a challenge with
Java, but often solved by reducing object churn, tidying up better etc. The
java.nio package really is pretty awesome.

------
liuliu
If it is a poll server, why not write a lite script of lua inside nginx or
just a plugin of nginx? That would take full features of nginx and I guess the
result would be better.

~~~
davidw
It'd also be interesting to see the whole thing done in Erlang, just for fun.

~~~
davidw
... or apparently not, for those with little intellectual curiosity about a
task quite well suited to Erlang.

------
bcx
What is the advantage of polling over comet? I guess the real question is how
often is a user re-polling the same value, without it changing.

-Ben

~~~
lhorie
Polling works out of the box with pretty much all web servers - the downside
is that it's significantly slower and more resource intensive than comet.

~~~
simplegeek
>> the downside is that it's significantly slower and more resource intensive
than comet.

Any data or story to back that argument? Just curious.

~~~
lhorie
I don't have data available right now, but I have done quite a bit of research
on server push technologies for one of my projects. It just comes down to
bandwidth: regular polling consumes bandwidth (and the related client and
server resources) even when there's no actual data being sent.

------
chiffonade
That architecture diagram makes no sense.

