I.はじめに
オンラインではサービス間の呼び出しに遅延が発生しており、リンクトラッキングからXサービスがリクエストを送信し、Yサービスがリクエストを約1秒で受信していることがわかりますが、最終的にはTCPパケットであることが判明しましたロスリトライ、その過程にはまだ多くの問題があり、段階的に方向性を確認し、最終的に結論を決めるパケットキャプチャ実験も非常に興味深いです。
二、調査
1、ヒストリックス
疑わしい最初の方向は、Hystrix スレッド プールがいっぱいで、実行時間が比較的長く、キューが待機しているため、遅延が発生していることです。
この現象をよく考えてみると、x を送信してから y を受信するまでの直接の間隔は 1 秒なので、キューで待機することはありません。また、スレッド プールが実際にいっぱいで、キューが長時間待機する場合、この高い確率により後続のリクエストが融合され、警告が発せられます。
ハイストリックスは除外。
2、エウレカ
Eurkea による対象 IP の取得も疑われており、x-cache レジストリの有効期限が切れており、eurkea から IP を取得するのは遅いですが、Hystrix と同様に可能性は否定できません。
3. サービスグリッド
現時点では、パケットをキャプチャすることしかできず、これには運用と保守の操作が必要ですが、パケットのキャプチャはまだローリングによってカバーされているため、開発者はリンクの追跡に常に注目し、運用と保守が適切なタイミングでファイルをコピーできるようにする必要があります。それが起こったとき。
コードとミドルウェアの次元で理由が特定できる場合は、基本的に面倒なパケットのキャプチャを選択することはなくなります。
サービス メッシュは、サービス間の通信のコントローラーです。Istio は、Google、IBM、Lyft によって作成されたサービス メッシュのオープンソース実装です。
Istio でできること: トラフィック管理。サービス間の依存関係とサービス呼び出しのフロー方向を取得します。サービスの ID を認証し、サービスへのトラフィックを保護する機能を提供します。
x から 127.0.0.1 ローカルまでは、実際には通信サービス グリッドのプロセスです。
つまり、サービス リクエスト x->y は実際には x-> x. Istio-> y. Istio->y なので、サービス グリッド間の通信、またはサービスとローカル グリッド間の通信に問題がある可能性はありますか。しかし、tcpパッケージからはそうではないように見えます。次のステップでは、TCP メッセージを注意深くチェックして理由を見つけます。
4. パケットロス
X 送信リクエストの図から、上位 2 つのメッセージの間隔は 44 秒と 45 秒で、間隔は 1 秒であり、TCP 検出タイムアウト再送信の標準を満たしていることがわかります。
tcp の 3 ウェイ ハンドシェイクでは、seq=0 が最初のハンドシェイクであり、2 つのメッセージが最初のハンドシェイク パケットであり、2 番目のメッセージはパケット損失と再送信を意味する Retransmission を示していることがわかります。
特定のメッセージの内容を開くと、2 つのシーケンス番号は同じであり、同じ TCP リンクによって開始されたハンドシェイクをよりよく表しています。
明らかに、受信者が最初の TCP ハンドシェイク パケットを受信するのに 45 秒かかり、パケットのシーケンス番号は x によって送信されたものと同じでした。
3. まとめ
最終的には、TCP パケットの損失と再試行が原因であることが判明し、次の問題はネットワーク リンク層の問題であり、研究開発は関与せず、IT ネットワークに引き継がれる可能性がありました。デパートメント。