Ambiente
Tenemos una solución en ejecución que interactúa con la API de Twitter. El punto final de la API de Twitter es:
api.twitter.com
Realizamos muchas llamadas al punto final, pero muy raramente alcanzamos los límites de API definidos por Twitter.
Supongo que Twitter tiene un equilibrador de carga configurado en esa URL y redirige internamente a diferentes máquinas.
La solución es una aplicación .Net, en parte un ejecutable que realiza sondeos de datos y una aplicación web que se utiliza para responder y publicar tweets.
La cuestión
Una vez a la semana (a veces más) durante algunas horas, obtenemos la siguiente excepción registrada en los archivos de registro de nuestra aplicación web y ejecutable.
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 ...
Cuando hago un NSLOOKUP
desde el propio Servidor tengo el siguiente 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 hago esta búsqueda, 185.45.5.33
aparece el servidor defectuoso y solo hay una dirección IP alternativa presente.
Nota: Solo tenemos estas dos direcciones IP de nuestro servidor de producción; de otras máquinas (en diferentes países), nslookup
devuelve al menos 4 direcciones IP en un rango 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
La solución ?
He intentado durante estos períodos defectuosos editar el C:\Windows\System32\Drivers\etc\hosts
archivo con esta línea
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
185.45.5.44 api.twitter.com
Pero esto no parece funcionar, los problemas simplemente continúan. Aunque el problema probablemente esté en los servidores de Twitter, interrumpe nuestra funcionalidad y deja de funcionar por completo. Por eso debemos ser más proactivos en lugar de esperar hasta que Twitter resuelva el problema.
Probablemente esta ni siquiera sea la mejor manera de resolver este problema, pero tenemosPor ahora. Contratamos a alguien capacitado para estos temas de operaciones, pero no comenzará antes de diciembre. Por lo tanto, cualquier tipo de consejo para una persona con experiencia limitada sería muy apreciado para tener una solución temporal para este problema.
Entonces, ¿alguien tiene alguna sugerencia o pista que pueda ayudarnos a solucionar este problema de nuestra parte de la mejor manera posible?
No me importa lanzarme a leer artículos, pero una pista o un empujón en la dirección correcta sería de gran ayuda.
Gracias por tu tiempo
Respuesta1
Respuesta corta: no.
Es muy poco lo que puede hacer para mitigar los problemas de los proveedores externos, aparte de notificar a sus usuarios que existen problemas ascendentes.
Puede mostrar mensajes de error descriptivos como "Hubo un problema al comunicarse con Twitter, espere", o descartar silenciosamente el error y volver a intentarlo después de un tiempo.
Para períodos de interrupción más prolongados, sugeriría mostrar un aviso a sus usuarios globalmente dentro de la aplicación.
Además de esto, dudo mucho que la API de Twitter tenga tantos problemas; es probable que tenga una velocidad limitada de alguna manera. Le sugiero encarecidamente que se comunique con Twitter y presente un caso de soporte.