In the 10 years I’ve been working with Windows as a web hosting platform (and the 15 or so I’ve been working with web servers period), I can confidently say that IIS7 is without question the best web server platform to date. Microsoft has been working on a plug-in for IIS called Application Request Routing (or ARR). The first version of ARR provided a suite of tools that allowed it to function as a Application Layer Load Balancer! The recently updated beta version extends that functionality and now makes it easy to turn a Windows Server running IIS7 into not only a Load Balancer but also a Reverse Proxy / Cache Server. Meaning you could potentially power a CDN using a bunch of Windows Servers.
What’s an Application Layer Load Balancer?
First I should define a load balancer. When you have a very popular website (think yahoo, Amazon, etc) you need a bunch of web servers to accept all those web requests. One server just won’t cut it. In order to keep things all tidy and in order you use a machine that controls those requests and which web server it goes to. You extend that machine and have it start monitoring your web servers and your web visitors and it can start managing those requests and directing it based on things like:
- The visitor’s browser type
- The visitor’s IP address
- The type of content being called (JPEG, MOV, HTML, ASPX, etc)
Then you get a step fancier and not only direct those requests based on the request but also on the state of the server, who’s had the most bandwidth, which server do you prefer requests to go to, which server is working hardest? etc.
Now the Layer 7 Load Balancer or Application Level Load Balancer can distribute requests based on the various application specific information. This could be a cookie for instance or information within your app itself.
NOTE: I’m not going to go into this any further you have the basic understanding of a load balancer and I’m not going to deal with NLB and layer 4 and all that fun stuff. Go Bing! it (yeah I said Bing!).
Wait aren’t load balancers expensive, complicated and require a whole other level of geek?
You bet! But they’ve gotten better and there’s a fair number of open source ones out there (in fact, I was reading earlier that wordpress.com was running on an open source one).
Well didn’t Windows Always have this?
Not really. Windows had Network Load Balancing which would allow you to run a couple servers with the same application on it. It would monitor ping on the machines and if one machine died all requests went to the other. So that was really load balancing at the machine level. This was good enough for most but what if the machine was fine but your service (perhaps IIS itself crashed?) . Then they had Clustering services. Now clustering services was service aware. Meaning if your service (perhaps IIS ) crashed on one of the machines it would failover to the other machines but it didn’t really know anything about your website’s application (perhaps an ecommerce store) so you could have a server online and the web service online but the actual application on that server failed and still be sending requests to it. So in comes those clever folks in the IIS team at Microsoft with Application Request Routing (ARR … Matey!).
Video Introduction to Application Request Routing and more info
Microsoft has a great video on ARR and it’s geared towards webhosts but does a fantastic job of showing the functionality of ARR and just how easy it is to configure and make use of. You can see that video on the IIS.net site at:
In addition to the video they really spell out all of the features and benefits to ARR in detail. Some of those features include:
- HTTP based routing decisions.
- The ability to offload SSL requests
- The ability to offload compression
- Health monitoring of live traffic and specific URLs to monitor and adjust routing of requests.
- Support for extensive debugging through Failed Request Tracing Rules.