ネットワーク遅延がアプリケーションを台無しにする理由
遅延は、分散システムやAPIにとっての「サイレントキラー(静かなる殺し屋)」です。トランスポート層でのわずかな遅延が、アプリケーション層で甚大な問題を引き起こします。これは、リアルタイムのWebツールやAIストリーミングの体験を損なわせます。
インターネットの物理法則を無視することはできません。
光速の制約
データは海底の光ファイバーケーブルを通って移動します。光は真空中のガラスよりも遅く進みます。光ファイバー内を伝わる光の速度は約204,500 km/sです。
東京からサンフランシスコへデータを送信する場合、距離は約9,000 kmです。物理法則により、最小往復時間(RTT)は約88msとなります。この限界を超えることはできません。ルーティングのエラーや混雑が発生すれば、さらに遅延が加算されます。
Anycast vs. Unicast ルーティング
Unicastネットワークでは、各サーバーは1つの固有のIPアドレスを持ちます。ロンドンのユーザーがニューヨークのサーバーにアクセスする場合、データは予測不可能な多くのホップを経由して移動します。これがレイテンシのスパイク(急増)を引き起こします。
Anycastはこれを変えます。世界中の複数のエッジデータセンターに同じIPアドレスを割り当てます。
• ルーターはBGPを介して最短経路を見つけます。 • パケットは物理的に最も近いエッジノードに送られます。 • 接続のセットアップは、海を越えるのではなく、エッジで行われます。
これにより、ネットワークの境界をユーザーのより近くに移動させることができます。
パケットロスの危険性
多くのエンジニアは、1%のパケットロスなら問題ないと考えています。しかし、そうではありません。
Cubicのような標準的なTCPアルゴリズムは、たった1つのパケットの紛失を検知すると、パニックを起こします。彼らは混雑ウィンドウ(congestion window)を30%も削減してしまいます。損失が続けば、1 Gbpsの光ファイバーリンクであっても、古いダイヤルアップ接続のようなパフォーマンスになってしまいます。
パケットのドロップが頻繁に起こると、システムは再送タイムアウト(Retransmission Timeout)に陥ります。タイムアウトが発生するたびに、待ち時間は倍増します。わずかなネットワークの不具合が、アプリケーションを数秒間フリーズさせることもあるのです。
これを解決する2つの方法
現代のチームは、速度を維持するために以下の2つの手法を用いています。
- Google BBR: このアルゴリズムは、パケットの紛失に反応するのではなく、実際の帯域幅を測定します。これにより、軽微な混雑が発生している間でもスループットを安定させることができます。
- QUICプロトコル: これはUDP上で動作し、ヘッドオブラインブロッキング(head-of-line blocking)を防ぎます。1つのパケットがドロップしても、他のデータストリームは動き続けます。これにより、単一の損失がセッション全体を停止させるのを防ぎます。
インターネットを魔法のクラウドのように扱うのはやめましょう。データの物理的な現実を理解してください。
学習コミュニティ(任意参加): https://t.me/GyaanSetuAi