Microsoft Internet Security and Acceleration (ISA) Server uses the Cache Array Routing Protocol (CARP) to provide seamless scaling and efficiency when using multiple ISA Server computers that are arrayed as a single logical cache. CARP uses hash-based routing to determine the best path through an array to resolve a request. The request resolution path, which is based upon a hash of array member identities and Uniform Resource Locators (URLs), means that, for any given URL request, the browser or downstream proxy server will know exactly where in the array the information will be stored, whether it is already cached from a previous request or finding it on the Internet for delivery and caching for the first time.
CARP provides powerful benefits:
| • | Because CARP determines the best request resolution path, there is no query messaging between proxy servers, as is found with conventional Internet Cache Protocol (ICP) networks. By doing this, CARP avoids the heavier query congestion that normally occurs with a greater number of servers. |
| • | CARP eliminates the duplication of contents that otherwise occurs on an array of proxy servers. With an ICP network, an array of five proxy servers can rapidly evolve into duplicate caches of the most frequently-requested URLs. The hash-based routing of CARP keeps this from happening by allowing all five ISA Server computers to exist as a single logical cache. The result is a faster response to queries and a far more efficient use of server resources. |
| • | CARP has positive scalability. Due to its hash-based routing and—as a result—its independence from peer-to-peer pinging, CARP becomes faster and more efficient as more proxy servers are added. ICP arrays, which must conduct queries to determine the location of cached information, an inefficient process that generates extraneous network traffic. ICP arrays have negative scalability: the more servers added to the array, the more querying required between servers to determine location. |
| • | CARP automatically adjusts to additions or deletions of servers in the array. The hash-based routing means that, when a server is either taken offline or added, only minimal reassignment of URL caches is required. |
| • | CARP ensures that the cache objects are either distributed evenly between all servers in the array or by the load factor that you configure for each server. |
The CARP process provides efficient routing for requests.
1. | All servers are tracked through an array membership list, which is maintained in Active Directory. Array members are notified when servers are added or removed from the array. | ||||
2. | Periodically, the Web Proxy client or a downstream server polls and, if necessary, updates the array membership list.
| ||||
3. | When requesting an object, the client or downstream server uses the membership list, together with a hash function it computes for the name of each requested URL, to determine which server should service the request. | ||||
4. | The hash value of the URL is combined with the hash value for each ISA Server. The URL+ISA Server hash that comes up with the highest value becomes "owner" of the information cache. | ||||
5. | The server checks if it should handle the request. If not, then it sends the request to another member server, specifying its intra-array IP address. |
The result is a location for all cached information, meaning that the Web browser or downstream server can know exactly where a requested URL is either already stored locally or will be located after caching. Because the hash functions used to assign values are so numerous, the load is statistically distributed and balanced across the array.
The request resolution path that CARP provides means that there is no need to maintain massive location tables for cached information. The browser simply runs the same math function across an object to determine where it is.
Because ISA Server computers in an array may have different hardware and may be more powerful than others, you may want to divide the cache load differently. For this reason, you can configure the CARP functions, specifying the load factor for any given server in the array.
Furthermore, you can configure CARP differently for incoming and outgoing Web requests. For example, CARP can be enabled for all outgoing Web requests, and disabled for all incoming Web requests.
For more information on enabling CARP, and configuring a server's intra-array IP address and load factor, see Configuring Cache Array Routing Protocol.