Evitar um servidor defeituoso por trás do balanceador de carga

3

Ambiente

Temos uma solução em execução que interage com a API do Twitter. O ponto final da API do Twitter é:

api.twitter.com

Fazemos muitas chamadas para o endpoint, mas estamos atingindo muito raramente os limites de API definidos pelo Twitter.

Presumo que o Twitter tenha um balanceador de carga configurado nessa URL e redirecione internamente para máquinas diferentes.

A solução é um aplicativo .Net, parcialmente um executável que faz pesquisa de dados e um aplicativo da Web que é usado para responder e publicar Tweets.

O problema

Uma vez por semana (às vezes mais) por algumas horas, obtemos a seguinte exceção registrada nos arquivos de log de nosso aplicativo executável e da web.

Inner Exception : System.Net.WebException: Unable to connect to the remote    
server ---> System.Net.Sockets.SocketException: A connection attempt failed 
because the connected party did not properly respond after a period of time, 
or established connection failed because connected host has failed to 
respond 185.45.5.33:443
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.GetResponse()
at Hammock.Web.WebQuery.ExecuteGetDeleteHeadOptions(WebRequest request, WebException& exception) in f:\src\hammock\src\net35\Hammock\Web\WebQuery.cs:line 1021

... Ommited rest of exception ...

Quando eu faço um NSLOOKUP do próprio servidor, tenho o seguinte resultado

>nslookup api.twitter.com
Server:  4201082000200000000g00g021.ip.ssc.net
Address:  2001:820:2::9:218

Non-authoritative answer:
Name:    api.twitter.com
Addresses:  185.45.5.33
            185.45.5.44

Toda vez que eu fizer essa pesquisa, o 185.45.5.33 servidor defeituoso é listado e há apenas um endereço IP alternativo presente.

Observação: só temos esses dois endereços IP do nosso servidor de produção, de outras máquinas (em diferentes países), o nslookup retorna pelo menos 4 endereços IP em um intervalo de 199. *.

>nslookup api.twitter.com
Server:  kdns1.task.gda.pl
Address:  213.192.64.1

Non-authoritative answer:
Name:    api.twitter.com
Addresses:  199.16.156.104
          199.16.156.72
          199.16.156.231
          199.16.156.8

A solução?

Eu tentei durante esses períodos com falhas editar o arquivo C:\Windows\System32\Drivers\etc\hosts com essa linha

# localhost name resolution is handled within DNS itself.
#   127.0.0.1       localhost
#   ::1             localhost
    185.45.5.44     api.twitter.com

Mas isso não parece funcionar, os problemas continuam. Embora o problema esteja provavelmente nos servidores do Twitter, ele quebra nossa funcionalidade para deixar totalmente de funcionar. Então, precisamos ser mais ativos em vez de esperar até que o Twitter resolva o problema.

Provavelmente, essa não é a melhor maneira de resolver esse problema, mas temos Por enquanto . Nós recrutamos alguém qualificado para esses problemas operacionais, mas ele não vai começar antes de dezembro. Portanto, qualquer conselho gentil para uma pessoa experiente limitada seria muito apreciado por ter uma solução temporária para esse problema.

Alguém tem uma sugestão ou um lead que possa nos ajudar a resolver isso do nosso lado da melhor maneira possível?

Eu não me importo de começar a ler artigos, mas uma pista ou um empurrão na direção certa seria uma grande ajuda.

Obrigado pelo seu tempo

    
por Ian Segers 25.09.2015 / 10:11

1 resposta

1

Resposta curta: não.

Há muito pouco que você pode fazer para atenuar os problemas de provedores de terceiros, além de notificar seus usuários de que há problemas de envio de dados.

Você pode exibir mensagens de erro descritivas como "Ocorreu um problema ao se comunicar com o Twitter, por favor, aguarde" ou descartar o erro silenciosamente e tentar novamente depois de um tempo.

Para períodos mais longos de indisponibilidade, sugiro que você exiba um aviso para seus usuários globalmente no aplicativo.

Além disso, duvido muito que a API do Twitter tenha muitos problemas - você provavelmente está limitado de alguma forma. Eu sugiro strongmente que você entre em contato com o Twitter e levante um caso de suporte.

    
por 25.09.2015 / 10:45