Назад | Перейти на главную страницу

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

Окружающая среда

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

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, пожалуйста, подождите.», Или молча отклоняя ошибку и повторите попытку через некоторое время.

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

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