High-Performance Web Server How-To 281
ssassen writes "Aspiring to build a high-performance web server? Hardware Analysis has an article posted that details how to build a high-performance web server from the ground up. They tackle the tough design choices and what hardware to pick and end up with a web server designed to serve daily changing content with lots of images, movies, active forums and millions of page views every month."
High-performance web server (Score:5, Informative)
fnord [www.fefe.de]. It's extremely small, and pretty fast (without any special performance hacks!), see here [www.fefe.de].
my $0.02 (Score:5, Informative)
* RedHat is a pain to strip down to a bare minimum web server, I prefer OpenBSD [openbsd.org]. Sleek and elegant like the early days of Linux distros.
* I've used Dell PowerEdge 2650 [dell.com] rackmount servers and they're VERY well made and easy to use. Redundant power supplies, SCSI removable drives, good physical security (lots of locks).
Re:10'000 RPM (Score:3, Informative)
Okay, well ,you can use ancient MFM drives since they move much slower and would be more reliable by your logic.
Personally, I'd take 10k SCSI drives over 7.2k IDE drives for a server, no question.
-Kevin
Re:So fast and soo goo... (Score:3, Informative)
10,000 slashdotters * 500k pages = 5gigs in about an hour.
these figures are both estimates, but you can see that network congestion is obviously more of a bottleneck than their performance server.
Alternative HowTo (Score:4, Informative)
2. click buy
3. upon delivery open box and plugin
4. turn on Apache with the click of a button [apple.com]
5. happily serve up lots of content
6. (optional) wait for attacks from ppl at suggesting using apple hardware...
Slashdotted again (Score:1, Informative)
Hard Drives Evaluated for Noise, Heat and Performance [slashdot.org]
I'm sure spreading out their content over nine pages is definitely helping their server load.
Why Apache? (Score:5, Informative)
Their article is about building a high performance web server, and they tell people to use Apache.
Apache is featureful, but it has never been designed to be fast.
Zeus [zeus.com] is designed for high performance.
The article supposes that money is not a problem. So go for Zeus. The Apache recommendation is totally out of context.
Server running at near 100% load (Score:5, Informative)
Have a good weekend,
Sander Sassen
Email: ssassen@hardwareanalysis.com
Visit us at: http://www.hardwareanalysis.com
Re:Building a Better Webserver in the 21st Century (Score:3, Informative)
http://www.microsoft.com/backstage/whitepaper.htm
-Kevin
Re:Not-so high performance (Score:2, Informative)
how to build a high performance/reliable webserver (Score:4, Informative)
2) use decent speed hardware but stay away from
'top of the line' stuff (fastest processor,
fastest drives) because they usually are not
more reliable
3) replicate your databases to all machines so
db access is always LOCAL
4) use a front end cache to make sure you use
as little database interaction as you can
get away with (say flush the cache once per
minute)
5) use decent switching hardware and routers, no
point in having a beast of a server hooked up
to a hub now is there...
that's it ! reasonable price and lots of performance
Re:"Three times the power?" (Score:5, Informative)
I got a good laugh out of this... W2K Pro is the desktop version, not the server version. Wow. Great article. Really well informed author.
Re:But any web server is high-performance (Score:3, Informative)
I had this problem for a while... Sloppy coding on my part was querying 65K+ records per page. Server would start to crawl with a few hundred simultaneous users. Since I fixed it, 1000+ simultaneous users is no problem at all.
Re:That "howto" sucks (Score:5, Informative)
They start with a load balancer at the front end, or possibly several layers of load balancer. If they run a distributed operation they'll use smart DNS systems or routers to direct requests to the most local server cluster. The server cluster will be fronted by a request scattering system.
Behind the request scattering system you'll find a cluster of machines whose job it is to serve static content (often the bulk of data served by a site) and route dynamic requests to another cluster of servers, enforcing session affinity for the dynamic requests.
Behind the static content servers are the application servers. They do the heavy lifting, building dynamic pages as appropriate for individual users and caching everything they can to offload the database.
Behind the application servers is the database or database cluster. The latter is really not that useful if you have a highly dynamic site as there are problems with data synchronization in database clusters (no matter what the database vendors tell you). But that's ok, single databases can handle a lot of volume if built correctly and caching is done appropriately at the application level.
And there you have it, the structure of a really large site.
Re:OK so where do I start? (Score:3, Informative)
Have a good weekend,
Sander Sassen
Email: ssassen@hardwareanalysis.com
Visit us at: http://www.hardwareanalysis.com
Re:But any web server is high-performance (Score:2, Informative)
Yeah, my experience is at a relatively large site. We use mostly large and midrange Suns, EMC arrays and so on. There's a lot of interest in the many small server architecture though that is still being investigated.
-Kevin
Re:But any web server is high-performance (Score:5, Informative)
You save money in the long run by buying fewer, more powerful machines.
Re:Apache 1.3x? (Score:2, Informative)
Actually, their disk tests are fundamentally flawed. RAID0 is only good for boosting raw sustained throughput; it has pretty much no effect on access time. If you want a boost in access time, go for RAID1, as you can load-balance reads across two drives.
Furthermore, RAID0+1 is also not really worth it, as it still only gives you the ability to fail one drive, and instead of two logical spindle you only have one to do all of the work. But I suppose of your software is inflexible enough to only be able to operate on one partition, so be it.
I'd like to see some numbers for their boxes loaded up with RAM and high numbers of random I/O operations, which is where the high rotational speed of modern SCSI drives really shine. And this is the access pattern of a dynamic database-driven web site.
And as others have said, it's not the hardware that makes the most difference in these circumstances, it's how the software is set up, and how the site/database is coded.
Hell, I've completely saturated a 100mbps network serving dynamic content via pure Java Servlets, and this was only a dual P3-650. With a RAID5 array of 50G 7200RPM SCSI drives, hardly cutting edge even at the time. Dropping in a RAID1 array of WD120 IDE drives couldn't come anywhere close. But once the working set of data was loaded into RAM, they both performed about the same.
Their IDE raid setup is certianly considerably cheaper though, and that's a tradeoff that most people can easily make.
Re:High-performance web server (Score:4, Informative)
If you need features that a small web server like fnord can't provide and speed is a must, then Zeus [zeus.com] is probably the best choice. Zeus beats the pants off every other UNIX web server. It's "tricks" include non blocking I/O, linear scalability with regard to number of CPU's, platform specific system calls and mechanisms (acceptx(), poll(), sendpath,
Which design is better? Depends on your needs. It is quite interesting that the only way to beat a really small web server is to make one really big that includes everything but the kitchen sink.
Re:how to build a high performance/reliable webser (Score:2, Informative)
I think that your 700mhz machine would work fine for just web pages.
Re:my $0.02 (Score:3, Informative)
OpenBSD doesn't have support for multiple processors, which are a necessity for database servers and dynamic web servers. I'd say FreeBSD is the way to go.
Re:"Three times the power?" (Score:5, Informative)
Win2k pro limits you to 10 concurrent TCP/IP connections, Win2K Server has no (artificial) limit but won't cluster, Advanced Server can cluster but I don't know a thing about it..
Linux has no (artificial) limit... not sure about clustering options there either.
Found out about the TCP/IP limit when I added SP2 and trashed my evening counter-strike server - this makes a HUGE difference.
Re:High-performance web server (Score:2, Informative)
Actually, at least two people are using fnord to host a PHP site.
Don't expect stellar performance, though. PHP is by no means a small interpreter. I guess it would be possible to be fast and PHP compatible with some sort of byte code cache. If there is enough demand, someone will implement it.
Re:But any web server is high-performance (Score:3, Informative)
* 5 load balanced Web servers dedicated to pages
* 3 load balanced Web servers dedicated to images
* 1 SQL server
* 1 NFS Server
Either the "little 4 way intel" you mention has a serious case of shizofrenia or your just full of it. (Guess which theory I'm going for.)
Besides the poster mentioned that those sites
I know I shouldn't feed the trolls, but someone might actually belive this tripe.
Re:Alternative HowTo (Score:2, Informative)
3a) Pull off god awful packaging
3b) Install in rack with mickey mouse install setup thatrequires removing the cover from the machine, exposing all the internal electronics while your at it
3c) Making sure the system sags in the middle while installed in the rack.
and
4a) Wipe OS because you have to before you can set up RAID
4b) Setup RAID, have the disk set utility fail multiple times with cryptic errors, only to find that Apple's own docs say this is 'normal behavior'
4c) When disks fail are are removed, must reboot server to signle user mode to reconstruct failed data. May or may not work...apple says 'normal behavior'
and
5a) Hope that your machine doesn't exhause it TCP connection pool which it will if you make too many SSH connections to it.
Sorry, Im ust so pedantic today.
Really, though, the XServes are a cheap attempt at a server that just doesn't work. Its a mickey mouse hack from the beginning. And yes, I have set them up personally. Only 2, because I wont reccommend the purchase of anymore after THAT experiment.
Re:But any web server is high-performance (Score:3, Informative)
Yes. Linux Virtual Server [linuxvirtualserver.org] is an incredible project. You put your web servers behind it and (in the case of simple NAT balancing) you set the gateway of those computers to be the address of your LVS server. You then tell LVS to direct all IPs of a certain netmask to one server (i.e. if you set for 255.255.255.0, 192.168.1.5 and 192.168.1.133 will connect to the same server).
The only problem I had with it was that it does not detect downtime. However, I wrote a quick script that used the checkhttp program from Nagios [nagios.org] to pull a site out of the loop when it went down (these were Windows 2000 servers: it happened quite frequently, and our MCSE didn't know why
There are higher performance ways to set up clustering using LVS, but since I was lazy, that's what I did.
Re:my $0.02 (Score:3, Informative)
If your server isn't designed with 'security' in mind, including the ability to padlock the chassis, and at least send an SNMP trap when the chassis is opened, then you need to learn that as far as 'computer and data security' is concerned, protecting from external network attacks is actually quite low on the totem pole.
Or, "If Joe Random Idiot can walk in and rip out the hard drive, who cares how 3117 your firewall and other network protections are."
Re:"Three times the power?" (Score:2, Informative)
Win2k AS Load Balancing (aka WLBS: Windows Load Balancing Service) works by detecting other computers on the network with the same service, and they decide who will handle what request. They both have a primary IP, which is unique, in addition to a "virtual" address, which is the same on all of them. They also have a fake MAC address which is identical on both (makes for interesting ping responses.)
An interesting thing we noticed about WLBS is that, unless a computer is off the network, it will still be in the cluster. I.e. if IIS fails on one machine, as long as you can ping it, it will still get traffic.
When we moved from WLBS to LVS [linuxvirtualserver.org], we noticed a 50% drop in average CPU usage. This is probably due to the fact that now the clustering horsepower was moved off the web servers, but still, a free product versus a rather expensive one. And we've had better uptime now than ever before.
Re:"Three times the power?" (Score:4, Informative)
Whao! bullshit meter rising! While Win2K does have a limit on TCP/IP connections, it is in the thousands. A limit of 10 would be totaly ridiculous, it would cripple the OS for MANY people. Also, most of the traffic for a CS server is UDP so the TCP/IP connection limit isn't going to affect that much at all.
Re:"Three times the power?" (Score:5, Informative)
From Microsoft Knowledge Base Article Q122920 [microsoft.com].
(Warning: The page layout is broken in Mozilla)
It's an artificial limitation. The idea is that if you need more simultaneous connections you should buy Win2k Server. In other words, MS wants you to spend more money.
Re:server load (Score:3, Informative)