Stavo cercando diversi algoritmi di bilanciamento del carico per HTTP e ho appena trovato 3. Robin casuale, Round Robin e Weighted Round Robin. Ci sono altre opzioni?
Grazie Paolo
Stavo cercando diversi algoritmi di bilanciamento del carico per HTTP e ho appena trovato 3. Robin casuale, Round Robin e Weighted Round Robin. Ci sono altre opzioni?
Grazie Paolo
Risposte:
Gli algoritmi di bilanciamento del carico più comuni per i bilanciatori di carico HTTP sono IMHO:
Round Robin (a volte chiamato "Next in Loop").
Round Robin ponderato - come Round Robin, ma alcuni server ottengono una quota maggiore del traffico complessivo.
Casuale .
Hash IP di origine . Le connessioni sono distribuite ai server back-end in base all'indirizzo IP di origine. Se un webnode fallisce e viene messo fuori servizio, la distribuzione cambia. Finché tutti i server eseguono un determinato indirizzo IP client, passerà sempre allo stesso server Web.
Hash URL . Proprio come l'hash IP di origine, tranne l'hashing viene eseguito sull'URL della richiesta. Utile quando si esegue il bilanciamento del carico davanti alle cache del proxy, poiché le richieste per un determinato oggetto passeranno sempre a una sola cache back-end. Ciò evita la duplicazione della cache, con lo stesso oggetto archiviato in più / tutte le cache e aumenta la capacità effettiva delle cache di back-end.
Meno connessioni , meno connessioni ponderate. Il bilanciamento del carico controlla il numero di connessioni aperte per ciascun server e invia al server meno occupato.
Meno traffico , meno traffico ponderato. Il bilanciamento del carico monitora la velocità in bit da ciascun server e invia al server con il traffico in uscita meno.
Latenza minima . Perlbal effettua una rapida richiesta OPTIONS HTTP ai server back-end e invia la richiesta al primo server a cui rispondere.
Probabilmente quanto sopra non sono algoritmi in senso stretto per l'informatica, sono descrizioni più generali di approcci comuni. Ecco un piccolo articolo di Cisco che descrive alcuni degli algoritmi che usano in modo più dettagliato . Le implementazioni di altri fornitori saranno leggermente diverse.
Ci sono casi limite in cui gli algoritmi più esotici sono utili, ad esempio lo streaming video può prestarsi bene al "minor traffico". Ma in generale, per la maggior parte delle applicazioni Web e dei siti Web, la soluzione ottimale è:
Un sistema di sessioni condivise / distribuite , in modo che qualsiasi webnode possa rispondere a qualsiasi richiesta dell'utente (ad es. I dati di sessione dell'utente come i cookie di sessione sono ugualmente disponibili per tutti i server).
Bilanciamento del carico mediante Round Robin (facoltativamente Round Round ponderato) o distribuzione casuale . Round Robin e Random sono algoritmi semplici e resistenti senza problemi di "hot spot", ovvero la distribuzione del carico ai backend rimane corretta in tutte le situazioni.
La domanda è incompleta:
Load Balance COSA?
Le CPU potrebbero richiedere saturazione; la solita prospettiva è all'indietro: spingere verso una risorsa invece di attingere ad essa.
I dischi hanno molti tipi diversi di carichi da bilanciare, come spazio, velocità di lettura, velocità di scrittura, velocità effettiva, ecc.
Le reti possono essere bilanciate in base al carico in base alla latenza o alla velocità totale ...
Le persone possono essere bilanciate in base al carico in base alla capacità individuale; alcuni bene multi-task, altri no e poi c'è qualità vs quantità. È possibile ottimizzare le risorse umane in base a molti fattori e con pesi diversi attribuiti a attributi diversi.
Quanto sopra è lungi dall'essere esaustivo; il punto è che risorse diverse richiedono tipi completamente diversi di bilanciamento del carico. Dei loro attributi e capacità disponibili devi dichiarare QUALI sono di interesse nel bilanciamento.
Quello che stai cercando di bilanciare è il primo criterio per creare un buon algoritmo di bilanciamento. E il suggerimento che ce ne sono solo tre è ... non illuminato. Sarebbe degno di un dottorato di ricerca fare un lavoro adeguato cercando di delineare tutti i modi in cui "i carichi sono bilanciati".
RT
Non una risposta diretta alla tua domanda, ma una soluzione reale che abbiamo trovato utile. Usando LVS e il demone pulse, il nostro bilanciamento del carico HTTP è configurato per chiamare uno script bash personalizzato che determina il carico sui "server reali" tramite una semplice connessione SSH e una chiamata al tempo di attività .
Quindi, in base alla media del carico dei server, viene impostata una ponderazione per server. Non è l'approccio più scientifico, poiché la media del carico non è necessariamente indicativa delle connessioni HTTP o del carico della CPU causati da tali connessioni. Tuttavia, abbiamo avuto risultati sorprendentemente efficaci.
Il mio 2c. YMMV.
PS: dai un'occhiata al progetto LVS : troverai sicuramente informazioni sulle implementazioni di pianificazione del bilanciamento del carico.