L'ultima release del famoso WebServer porta con se alcune nuove features, tra le quali alcune modifiche al sottosistema mod_proxy che introducono funzionalita' di bilanciamento del carico.



Il nuovo mod_proxy_balancer permette infatti la definizione di gruppo di server all'interno di una istanza di Apache di frontend che si occupera' di bilanciare il carico 'spalmandolo' su tutto il pool e indirizzando le richieste dei client in base a due possibili criteri:

Request Counting: viene preso in considerazione il numero di connessioni effettuate da ogni nodo e la richiesta viene indirizzata a quello con il numero di connessioni piu' basso.

Weighted Traffic: ad esser preso in esame non e' il numero di connessioni ma il traffico effettuato su ogni nodo. Ovviamente la richiesta viene indirizzata sul nodo con meno traffico all'attivo.

La passibilita' di creare pool bilanciati permette di assorbire grosse richieste di traffico o di tempo macchina, ma anche di creare architetture ad alta affidabilita' senza pero' doversi affidare a software di clustering.

La definizione dei pool e' abbastanza semplice:

ProxyPass / balancer://balanced_area/
<Proxy balancer://balanced_area/>
   BalancerMember http://server_1/
   BalancerMember http://server_2/
   [...]
</Proxy>

Con la direttiva ProxyPass e' stato definito il frontend: alla richiesta di / rispondera' il pool di server bilanciati: ogni nuovo server di backend puo' essere aggiunto inserendo una direttiva BalancedMember.

E' possibile inoltre definire una distribuzione del carico asimmetrica, utile in particolare quando le dotazioni hardware dei server in pool sono differenti:

ProxyPass / balancer://balanced_area/
<Proxy balancer://balanced_area/>
   BalancerMember http://server_1/ max=60 smax=30 loadfactor=10
   BalancerMember http://server_2/ max=40 smax=15 loadfactor=5
   [...]
</Proxy>

Il valore max identifica il numero di connessioni massime inviate al backend, smax e' utilizzato per definire un soft limit al numero di connessioni stabilite, mentre loadfactor assegna un 'peso' ad ogni nodo del backend.

In questo caso, server_2 ha una potenza di calcolo inferiore rispetto a server_1, e con questa configurazione sara' possibile bilanciare correttamente il carico tra le 2 macchine.