Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Preforked and threaded blocking IO consumes far more resources than event-driven non-blocking network IO. Process/thread stacks consume a significant amount of memory. This is why nginx ruins Apache at almost anything at scale (especially reverse proxying). Apache falls over while consuming grandiose amounts of memory in the low millions of connections per day while nginx can easily handle 10mm connections per day on a single core machine with 256mb ram. It's ridiculous.

On the other hand, for long-lived connections, you're better off using blocking IO since it's more efficient. Most web traffic is not long-lived, though. See Paul's interesting article on NIO vs IO performance:

http://mailinator.blogspot.com/2008/02/kill-myth-please-nio-...

http://www.mailinator.com/tymaPaulMultithreaded.pdf

And don't forget about Slowloris. If you see your competition using Apache, you really don't need to worry. :)

Disclaimer: I have nothing personal against Apache and used it for six years or so. I've just moved on to better software. If it works for you, that's great.



I still use Apache because I trust it; and because the ease with which I can configure a Python server (i.e. mod_wsgi), a Ruby server (passenger) and a Perl server, while being able to make use of the same modules I've been using for years.

Also, a properly configured Varnish placed in front of Apache ruins Nginx at almost anything at scale. I've seen it.

      Most web traffic is not long-lived, though.
But most web traffic is blocking. Going NIO requires caching - which is a huge penalty and a PITA; and doing it while not having actual users doesn't make sense.


You should look at Unicorn as an alternative to Passenger for your Rails apps. You just send it a USR2 for zero downtime deploys. Pretty nice setup.

https://github.com/blog/517-unicorn http://unicorn.bogomips.org/

Varnish isn't a webserver. You can put Varnish in front of nginx as well. :)

Agreed on the blocking.

On large sites, I've been doing a single HAProxy instance -> nginx instance on each webserver -> Unicorn app server on each webserver with really good results.


Will those two things included in the new apache change this?:

Event MPM: The Event MPM is no longer experimental but is rather fully supported.

Asynchronous support: Better support for asynchronous read/write for supporting MPMs and platforms.


Yes, I believe so. I'm really excited that the event MPM is no longer experimental. I had tried it way back in the day, but mod_php could not be safely used with it as mod_php was (is?) not thread-safe. I wasn't aware of FCGI at the time.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: