ロードバランサーの背後にある障害のあるサーバーを回避する

ロードバランサーの背後にある障害のあるサーバーを回避する

環境

Twitter API とやり取りするソリューションを実行しています。Twitter API エンドポイントは次のとおりです。

api.twitter.com

エンドポイントへの呼び出しは頻繁に行われますが、Twitter によって定義された API 制限に達することはほとんどありません。

Twitter ではその URL にロード バランサーが設定されており、内部的に別のマシンにリダイレクトされていると推測します。

ソリューションは .Net アプリケーションであり、部分的にはデータのポーリングを実行する実行可能ファイルと、ツイートの返信と公開に使用される Web アプリケーションです。

問題

週に 1 回 (場合によってはそれ以上)、数時間にわたって、実行可能ファイルと 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 ...

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 アドレスが 1 つだけ存在します。

注: 当社の運用サーバーから取得できる IP アドレスはこれら 2 つだけです。他のマシン (異なる国) からは、nslookup199.* の範囲で少なくとも 4 つの IP アドレスが返されます。

>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 が問題を解決するまで待つのではなく、もっと積極的に行動する必要があります。

これはおそらくこの問題を解決する最善の方法ではないかもしれませんが、今のところ私たちはこれらのオペレーションの問題に熟練した人材を採用しましたが、12月まで勤務を開始しません。したがって、この問題の一時的な解決策を得るために、経験の限られた人への親切なアドバイスをいただければ幸いです。

それで、私たち側でこの問題を可能な限り最善の方法で解決するのに役立つ提案や手がかりを持っている人はいますか?

記事をすぐに読むのは構いませんが、正しい方向への導きや後押しがあれば大いに助かります。

お時間をいただきありがとうございました

答え1

短い答え:いいえ。

アップストリームの問題があることをユーザーに通知する以外に、サードパーティ プロバイダーの問題を軽減するためにできることはほとんどありません。

「Twitter との通信中に問題が発生しました。しばらくお待ちください。」などの説明的なエラー メッセージを表示したり、エラーを黙って破棄し、しばらくしてから再試行したりすることができます。

停止期間が長くなる場合は、アプリケーション内でユーザー全体に通知を表示することをお勧めします。

これに加えて、Twitter の API にそれほど多くの問題があるとは到底考えられません。何らかの形でレート制限されている可能性があります。Twitter に連絡してサポート ケースを提出することを強くお勧めします。

関連情報