Nous exécutons une application Web servant des API Web pour un nombre croissant de clients. Pour commencer, les clients étaient généralement à la maison, au bureau ou sur d'autres réseaux sans fil soumettant des téléchargements HTTP par blocs à notre API. Nous nous sommes maintenant diversifiés pour gérer davantage de clients mobiles. Les fichiers allant de quelques k à plusieurs concerts, décomposés en plus petits morceaux et remontés sur notre API.
Notre équilibrage de charge actuel est effectué sur deux couches, nous utilisons d'abord le DNS à tour de rôle pour publier plusieurs enregistrements A pour notre adresse api.company.com. À chaque adresse IP, nous hébergeons un LVS Linux: http://www.linuxvirtualserver.org/ , équilibreur de charge qui examine l'adresse IP source d'une demande pour déterminer à quel serveur d'API la connexion doit être transmise. Ces boîtiers LVS sont configurés avec heartbeatd pour prendre en charge les VIP externes et les IP de passerelle internes les uns des autres.
Dernièrement, nous avons vu deux nouvelles conditions d'erreur.
La première erreur est lorsque les clients oscillent ou migrent d'un LVS à un autre, à mi-téléchargement. Cela entraîne à son tour nos équilibreurs de charge à perdre la trace de la connexion persistante et à envoyer le trafic vers un nouveau serveur API, interrompant ainsi le téléchargement en bloc sur deux ou plusieurs serveurs. Notre intention était que la valeur Round Robin DNS TTL pour notre api.company.com (que nous avons fixée à 1 heure) soit honorée par les serveurs de noms de mise en cache en aval, les couches de mise en cache du système d'exploitation et les couches d'application client. Cette erreur se produit pour environ 15% de nos téléchargements.
La deuxième erreur que nous avons vue beaucoup moins fréquemment. Un client initiera le trafic vers une boîte LVS et sera acheminé vers le serveur réel A derrière. Par la suite, le client entrera via une nouvelle adresse IP source, que la boîte LVS ne reconnaît pas, acheminant ainsi le trafic en cours vers le serveur réel B également derrière ce LVS.
Compte tenu de notre architecture telle que décrite dans la partie ci-dessus, j'aimerais savoir quelles sont les expériences des gens avec une meilleure approche qui nous permettra de traiter chacun des cas d'erreur ci-dessus plus gracieusement?
Modifier le 3/5/2010:
Cela ressemble à ce dont nous avons besoin. Hachage GSLB pondéré sur l'adresse IP source.