Wir führen eine Webanwendung aus, die Web-APIs für eine zunehmende Anzahl von Clients bereitstellt. Zu Beginn waren die Clients in der Regel zu Hause, im Büro oder in anderen drahtlosen Netzwerken, die blockierte http-Uploads an unsere API sendeten. Wir haben uns jetzt darauf konzentriert, mehr mobile Clients zu verwalten. Die Dateien reichen von einigen k bis zu mehreren Gigs, werden in kleinere Teile zerlegt und auf unserer API wieder zusammengesetzt.
Unser aktueller Lastausgleich wird auf zwei Ebenen durchgeführt. Zuerst verwenden wir Round-Robin-DNS, um mehrere A-Einträge für unsere Adresse api.company.com anzukündigen. An jeder IP- Adresse hosten wir ein Linux-LVS: http://www.linuxvirtualserver.org/ , einen Load-Balancer, der anhand der Quell-IP-Adresse einer Anforderung ermittelt, an welchen API-Server die Verbindung übergeben werden soll. Diese LVS-Boxen sind mit heartbeatd konfiguriert, um externe VIPs und interne Gateway-IPs voneinander zu übernehmen.
In letzter Zeit haben wir zwei neue Fehlerbedingungen gesehen.
Der erste Fehler besteht darin, dass Clients während des Uploads von einem LVS zu einem anderen oszillieren oder migrieren. Dies wiederum führt dazu, dass unsere Load Balancer den Überblick über die dauerhafte Verbindung verlieren und den Datenverkehr an einen neuen API-Server senden, wodurch der Chunk-Upload auf zwei oder mehr Servern unterbrochen wird. Unsere Absicht war es, den Round Robin DNS TTL-Wert für api.company.com (den wir auf 1 Stunde festgelegt haben) von den nachgeschalteten Caching-Nameservern, OS-Caching-Layern und Client-Anwendungs-Layern zu berücksichtigen. Dieser Fehler tritt bei ungefähr 15% unserer Uploads auf.
Der zweite Fehler, den wir viel seltener gesehen haben. Ein Client initiiert Datenverkehr zu einer LVS-Box und wird an den dahinter liegenden Realserver A weitergeleitet. Danach kommt der Client über eine neue Quell-IP-Adresse herein, die die LVS-Box nicht erkennt, wodurch der laufende Verkehr auch hinter diesem LVS an den Realserver B weitergeleitet wird.
Angesichts unserer Architektur, wie oben beschrieben, möchte ich wissen, welche Erfahrungen die Menschen mit einem besseren Ansatz gemacht haben, der es uns ermöglicht, jeden der oben genannten Fehlerfälle eleganter zu behandeln.
Bearbeiten 03.05.2010:
Das sieht so aus, wie wir es brauchen. Gewichtetes GSLB-Hashing für die Quell-IP-Adresse.