If there is more than one backend server available for the service then it is often wanted to load balance the requests on these servers. However, due to dynamic applications or whatever it is at the same time wanted that a user is always sent to the same backend server for the duration of his/her session.
There are two options for implementing the load balancing. Either a sticky method where it is remembered for each user which backend server was selected at the start of the session, or a "static" distribution is used similar to CARP (but based on user IP/name instead of the URL).
Currently Squid has no notion of backend servers (except for the single httpd_accel_host, which is not really suitable). To address this cache_peer needs to be extended with a "originserver" class. This class is similar to "parent", but sends origin server queries rather than proxy queries.
In accelerator farms it is desireable to do a more throughtfull health check of the backend servers. Proposed method is to have a query URL, and only consider the backend server (peer) if it returns a response for that URL with a correct HTTP status code and a reasonable size (within specified min,max limit). HTTP status code is quite obvious, and the size check to trap malfunction due to out of memory and other strange situations where the server might return a proper HTTP status code but no/bad content.