Three distinct usages I’d like to cover: optimal performance,Windows web server (IIS) interoperable, and webhosting.
In addition, there are three interesting aspects of optimal performance: throughput, scalability, and stability.
For serving static content, I really like the model of a single-threaded non-blocking web server, of which thttpd was an early example, and for which the C10K question clarified the need. A small/simple web server has a much better chance to being very reliable. With the single-threaded non-blocking model, massive scalability is possible.
For the widest possible usage, in additional to optimal deployments (when there is no restriction on the front-end web server), the engine on which the application runs should be deployable behind IIS (for Windows-only organizations), and at common web-hosting services (like Dreamhost). Microsoft’s recent support of FastCGI with IIS is a big help.
Oh … and I am pretty much fed up with the Java Servlet model. After considerable time with the problem, I am of the opinion that the servlet model chose the wrong abstractions, and this makes for awkward solutions. (Of course, the servlet model appeared very early in the history of web applications, so the mistake is easy to understand.)
But there are as yet items unresolved and/or unclear.
- The node.js project offers a single-threaded non-blocking web server … but can it work behind FastCGI?
- Comet is still a question. Can FastCGI work well with long-outstanding requests from applications?