Избегайте неисправного сервера за балансировщиком нагрузки

Избегайте неисправного сервера за балансировщиком нагрузки

Среда

У нас есть работающее решение, которое взаимодействует с API Twitter. Конечная точка API Twitter:

api.twitter.com

Мы делаем много вызовов к конечной точке, но очень редко нарушаем какие-либо ограничения API, определенные Twitter.

Я предполагаю, что Twitter настроил балансировщик нагрузки на этом URL-адресе и выполняет внутреннюю переадресацию на разные машины.

Решение представляет собой приложение .Net, частично исполняемый файл, который выполняет опрос данных, и веб-приложение, которое используется для ответа и публикации твитов.

Проблема

Раз в неделю (иногда чаще) в течение нескольких часов в файлах журнала нашего исполняемого файла и веб-приложения регистрируется следующее исключение.

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 ...

Когда я делаю это NSLOOKUPс самого сервера, я получаю следующий результат

>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

Каждый раз, когда я выполняю этот поиск, отображается неисправный 185.45.5.33сервер, и присутствует только один альтернативный IP-адрес.

Примечание: у нас есть только эти два IP-адреса с нашего рабочего сервера, с других машин (в разных странах) возвращается nslookupне менее 4 IP-адресов в диапазоне 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

Решение ?

Я пытался в эти неисправные периоды редактировать C:\Windows\System32\Drivers\etc\hostsфайл с этой строкой

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

Но это, похоже, не работает, проблемы просто продолжаются. Хотя проблема, вероятно, в серверах Twitter, она действительно нарушает нашу функциональность, полностью прекращая работу. Поэтому нам нужно быть более активными, а не ждать, пока Twitter решит проблему.

Это, возможно, не лучший способ решения этой проблемы, но у нас естьНа данный момент. Мы наняли кого-то опытного для решения этих операционных проблем, но он не начнет работу до декабря. Поэтому любой добрый совет для человека с ограниченным опытом был бы очень кстати, чтобы иметь временное решение этой проблемы.

Есть ли у кого-нибудь предложение или наводка, которая могла бы помочь нам устранить эту неполадку наилучшим возможным способом?

Я не против чтения статей, но наводка или толчок в правильном направлении были бы очень полезны.

Спасибо за ваше время

решение1

Короткий ответ: нет.

Вы мало что можете сделать для смягчения проблем со сторонними поставщиками, за исключением уведомления пользователей о наличии проблем на более высоком уровне.

Вы можете отображать описательные сообщения об ошибках, например: «Возникла проблема при соединении с Twitter, подождите», или молча отбрасывать ошибку и повторять попытку через некоторое время.

В случае более длительных периодов простоя я бы рекомендовал отображать уведомление для ваших пользователей по всему миру в приложении.

В дополнение к этому, я очень сомневаюсь, что API Twitter имеет так много проблем - вы, вероятно, ограничены в скорости каким-то образом. Я настоятельно рекомендую вам связаться с Twitter и поднять вопрос поддержки.

Связанный контент