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

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

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 raramente atingimos qualquer limite de API definido 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 pesquisas de dados e um aplicativo Web que é usado para responder e publicar Tweets.

O problema

Uma vez por semana (às vezes mais), durante algumas horas, obtemos a seguinte exceção registrada nos arquivos de log de nosso executável e aplicativo 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 faço um NSLOOKUPdo 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

Cada vez que faço essa pesquisa, o 185.45.5.33servidor com defeito é listado e há apenas um endereço IP alternativo presente.

Nota: Temos apenas esses dois endereços IP do nosso servidor de produção, de outras máquinas (em países diferentes) que nslookupretornam 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 de falha editar o C:\Windows\System32\Drivers\etc\hostsarquivo com esta 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 simplesmente continuam. Embora o problema provavelmente esteja nos servidores do Twitter, isso prejudica nossa funcionalidade ao parar totalmente de funcionar. Portanto, precisamos ser mais pró-ativos, em vez de esperar até que o Twitter resolva o problema.

Esta provavelmente nem é a melhor maneira de resolver este problema, mas temosPor agora. Recrutamos alguém qualificado para essas questões operacionais, mas ele não começará antes de dezembro. Portanto, qualquer conselho gentil para uma pessoa com experiência limitada seria muito apreciado para ter uma solução temporária para esse problema.

Alguém tem uma sugestão ou pista que possa nos ajudar a solucionar isso da melhor maneira possível?

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

Obrigado pelo seu tempo

Responder1

Resposta curta: não.

Há muito pouco que você pode fazer para mitigar problemas de provedores terceirizados, além de notificar seus usuários de que há problemas upstream.

Você pode exibir mensagens de erro descritivas, como "Ocorreu um problema na comunicação com o Twitter, aguarde." ou descartar o erro silenciosamente e tentar novamente após algum tempo.

Para períodos mais longos de interrupção, sugiro exibir um aviso aos seus usuários globalmente dentro do aplicativo.

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

informação relacionada