Eseguiamo un'applicazione Web che serve API Web per un numero crescente di client. Per iniziare, i clienti erano generalmente a casa, in ufficio o in altre reti wireless che inviano caricamenti HTTP a pezzi alla nostra API. Ora abbiamo deciso di gestire più client mobili. I file vanno da pochi k a diversi concerti, suddivisi in blocchi più piccoli e riassemblati nella nostra API.
Il nostro attuale bilanciamento del carico viene eseguito su due livelli, in primo luogo utilizziamo DNS round robin per pubblicizzare più record A per il nostro indirizzo api.company.com. Ad ogni IP, ospitiamo un LVS Linux: http://www.linuxvirtualserver.org/ , bilanciamento del carico che esamina l'indirizzo IP di origine di una richiesta per determinare a quale server API gestire la connessione. Queste caselle LVS sono configurate con heartbeatd per rilevare l'IP reciproco tra VIP esterni e IP gateway interni.
Ultimamente, abbiamo visto due nuove condizioni di errore.
Il primo errore è quando i client oscillano o migrano da un LVS a un altro, durante il caricamento. Ciò a sua volta fa sì che i nostri sistemi di bilanciamento del carico perdano la traccia della connessione persistente e inviino il traffico a un nuovo server API, interrompendo in tal modo il caricamento in blocco su due o più server. Il nostro intento era che il valore TTL DNS di Round Robin per il nostro api.company.com (che abbiamo impostato a 1 ora) fosse onorato dai nameserver della cache a valle, dai livelli di cache del sistema operativo e dai livelli dell'applicazione client. Questo errore si verifica per circa il 15% dei nostri caricamenti.
Il secondo errore che abbiamo visto molto meno comunemente. Un client avvierà il traffico verso un box LVS e verrà instradato al realserver A dietro di esso. Successivamente, il client arriverà tramite un nuovo indirizzo IP di origine, che la casella LVS non riconosce, indirizzando in tal modo il traffico in corso al realserver B anche dietro tale LVS.
Data la nostra architettura come descritto in parte sopra, mi piacerebbe sapere quali sono le esperienze delle persone con un approccio migliore che ci permetterà di gestire ciascuno dei casi di errore sopra con più grazia?
Modifica il 03/05/2010:
Questo sembra ciò di cui abbiamo bisogno. Hash GSLB ponderato sull'indirizzo IP di origine.