> William A. Rowe, Jr. wrote: >> At 03:17 PM 2/28/2005, Paul A. Houle wrote: >> >>>On Mon, 28 Feb 2005 21:09:55 +0000, Wayne S. Frazee <[EMAIL PROTECTED]> >>>wrote: > >> Oh boy - you don't know *what* you are missing :) Threads on >> Linux barely differ from distinct processes, while on Solaris >> they are truly lightweight. > > Well.. thats true for LinuxThreads.. but NPTL is a different and better > story. (Requires newer glibc and a 2.6 kernel) >
Yeah, but that's because Solaris has embarassingly bad performance running Apache/prefork; I've seen Apache run an order of magnitude faster on Pentium II machines that I've fished out of the dumpster than on Sun servers that we spent $30,000 for. (Not to bash Sun by any means... Solaris will embarass Linux about as badly running most MTA's; it's not so much that threads are bad on Linux, but that processes are incredibly fast on Linux -- NTPL doesn't so much speed up threads on Linux as make it possible for them to scale.) I think there is a reason why it matters that there is uptake on Apache 2, and that's so development can really move forward. Don't take it personally, but I'm quite depressed that Apache is still the dominant web server after all these years; the chief competition, Microsoft IIS, isn't all that different functionally from Apache. I think of all the features that web site authors and developers need that still don't exist in mainstream web servers; part of this is in the area of "content management" and another major are is authentication -- pretty much any serious interactive web site needs a cookie-based authentication system with the features seen on big sites like amazon.com and yahoo! and one of the reasons there is so little code reuse on the web is that every application winds up impementing it's own authentication system; if there was something really good built into a market-leading web server, this picture would change completely. A lot of the problem is that the market for advanced web servers is tiny. Looking at Alexa and applying a little guesswork, I get the sense that there are probably 10,000 or so sites that get more than one million hits per day; and if you're doing static pages, you could probably multiply that by 30x before Apache starts becoming performance limited on reasonable hardware. The remaining sites that need to push the limits of Apache all have different circumstances, and they'll find different answers; if you're running a dynamic site with PHP and you're hitting the CPU wall, really the only good answer is to build a load-balancing cluster. People who are running mod_perl often really do have memory problems (but there's enough instability in mod_perl, using processes instead of threads makes all the difference between a server that gives a 500 from time to time and a server that goes down regularly at 2 AM.) Java's got it's own bunch of problems. In that sense, the market for higher-end web systems is going to be fragmented enough that getting enough sites running the same software to really standardize and make progress will be difficult. The one 'generic' area where I think Apache/prefork isn't so satisfactory is in serving large numbers of large files... On some platforms you might get a factor of 2 or 3 better with worker, but you'll do that again (and maybe more) with something along the lines of mod_event. Another area that fascinates me is the 'perchild' MPM. Having the ability to segregate different parts of the server to different users could be useful for some systems I run. (One of my projects is a web server with 25 virtual hosts, one of which has about 100 subdirectories managed by I don't know how many different people; some of these sites are running PHP apps, some are using the accounts to archive old files.) Needless to say, between the limited UNIX permissions model and running Apache under one UID, we've had to make some compromises between security and having to answer support calls continuously from people because "it doesn't work". If perchild could be made smart enough to have different classes of server: little lean ones that can handle static pages, other bigger ones that can do mod_perl, that could be useful. Perhaps we could have some hybrid between worker and prefork that make it possible to run threadsafe and nonthreadsafe apps in the same server... The critical thing is that Apache shouldn't forget that "prefork" has it's strengths. I think the main reason that Apache is so reliable is that a hand grenade can go off in one process and it doesn't hurt the server at all. It took Microsoft IIS many iterations to find a reasonable balance between performance and stability, and the evolution of Apache MPM's is likely to face similar pitfalls.