Executamos um aplicativo da web que atende APIs da web para um número crescente de clientes. Para começar, os clientes geralmente estavam em casa, no escritório ou em outras redes sem fio enviando carregamentos http em pedaços para a nossa API. Agora, começamos a lidar com mais clientes móveis. Os arquivos variam de alguns k a vários shows, divididos em pedaços menores e remontados em nossa API.
Nosso balanceamento de carga atual é realizado em duas camadas; primeiro, usamos o DNS de rodízio para anunciar vários registros A para o nosso endereço api.company.com. Em cada IP, hospedamos um Linux LVS: http://www.linuxvirtualserver.org/ , balanceador de carga que analisa o endereço IP de origem de uma solicitação para determinar em qual servidor API entregar a conexão. Essas caixas LVS são configuradas com pulsação para assumir VIPs externos e IPs de gateway interno um do outro.
Ultimamente, vimos duas novas condições de erro.
O primeiro erro é onde os clientes estão oscilando ou migrando de um LVS para outro, no meio do upload. Isso, por sua vez, faz com que nossos balanceadores de carga percam o controle da conexão persistente e enviem o tráfego para um novo servidor de API, interrompendo o upload em pedaços em dois ou mais servidores. Nossa intenção era que o valor TTL Round Robin DNS da nossa api.company.com (que definimos em 1 hora) fosse respeitado pelos servidores de nomes de cache downstream, camadas de cache do SO e camadas de aplicativos clientes. Este erro ocorre em aproximadamente 15% dos nossos envios.
O segundo erro que vimos com muito menos frequência. Um cliente iniciará o tráfego para uma caixa LVS e será roteado para o servidor real A atrás dela. Posteriormente, o cliente entrará através de um novo endereço IP de origem, que a caixa LVS não reconhece, direcionando o tráfego em andamento para o servidor real B também atrás desse LVS.
Dada a nossa arquitetura, conforme descrito na parte acima, eu gostaria de saber quais são as experiências das pessoas com uma abordagem melhor que nos permitirá lidar com cada um dos casos de erro acima mais graciosamente?
Editar 03/05/2010:
Parece o que precisamos. Hash GSLB ponderado no endereço IP de origem.