Среда
У нас есть работающее решение, которое взаимодействует с 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 и поднять вопрос поддержки.