What is the difference between "Web farms" and "Web garden"?
The "Web farms" are used to have some redundancy to reduce the failures. It consists of two or more web server of the similar configuration and they stream the similar kind of contents. Whenever any request comes there is a switching / routing logic which decides which web server from the farm handles the request. For instance we have2 servers "Server1"
And "Server2" which have the similar configuration and content. So there is a special switch which stands in between these two servers and the users & routes the request accordingly.
Figure : - Web Farm in action
The Above figure describes in detail how the web farm work. You can see that there is a router in between which takes a request and sees which one of the server is least loaded and forwards the request to the server. So for the request1 it route's server1, for request2 it routes server2, for request3 it routes to server3 and final request4 is routed to server4. So you can see as we have web farm at place server1 and server2 are loaded with two request each rather than one server loading to full. One more merit of using this kind of architecture is if one of the servers goes down we can still run with another server thus having 24x7 uptime.
The routing logic can be a number of various options:-
1)Round-robin: In this Each node gets a request sent to it "in turn". And hence , server1 receives a request, then server2 again, and then server1, then server2 again.
2)Least Active: In this Whichever node show to have the lowest number of current connects receives new connects sent to it. This is very good way to help to keep the load balanced between all the server nodes.
3)Fastest Reply: In this Whichever node replies faster is the one that gets the new requests. This is also a very good option - especially if there are nodes that might not be "equal" in performance. If anyone performs better than the another, then send more requests there rather than which is moving slowly?
Before we try to understand what a web garden is let's try to understand how IIS handles all processes. The requests to the IIS are routed to an "aspnet_wp.exe" for IIS 5.0 and "w3wp.exe" for IIS 6.0. In general without the web garden we have one worker process instance ("aspnet_wp.exe" / "w3wp.exe") across all requests. This one instance of the worker process uses the CPU processor as directed by operating system.
Figure: - With out Web Garden
But whenever we enable the web garden for a web server it creates various instances of the worker process and each of these worker processes runs on various CPU. You can see in the diagram given below we have different worker process instances created which run on varoius CPU's.
Figure : - With Web Garden
In brief we can define a model in which multiple processes run on the multiple CPUs in a single server machine are defined as a Web garden.