ハードウェア基礎 #6 ネットワーク — 帯域幅とレイテンシ、NIC からデータセンターまで
#5 で、NAS と SAN、クラウドの EBS がすべてネットワークを経由すると述べました。これからサーバーの外へ出てそのネットワークを整理します。ネットワークでもっともよく起きる混同は「速い」を一言でまとめてしまうことです。帯域幅が広いのに遅い場合があり、その理由を知らないと見当違いのところにお金を使います。2 つの軸に分けて見ます。
ハードウェア基礎 シリーズでの今回の位置です。
- #1 コンピュータを動かす 4 つのリソース — CPU / メモリ / ストレージ / ネットワーク
- #2 CPU — コア / スレッド / クロック / キャッシュ、そして vCPU の正体
- #3 メモリ — RAM と階層構造、スワップが始まると起きること
- #4 ストレージ ① デバイス — HDD / SSD / NVMe と IOPS / スループット / レイテンシ
- #5 ストレージ ② 構成と接続 — RAID と DAS / NAS / SAN
- #6 ネットワーク — 帯域幅とレイテンシ、NIC からデータセンターまで ← 今回
- #7 仮想化とコンテナ — 物理サーバー 1 台が複数台になる仕組み
- #8 クラウド — 所有から賃借へ、オンプレミスから IaaS / PaaS / SaaS まで
- #9 クラウドインスタンスのスペックの読み方 — ワークロードに合わせて選ぶ
帯域幅とレイテンシは別の軸 #
ネットワーク性能は 2 つに分かれます。2 つを混ぜると診断が外れます。
- 帯域幅 (Bandwidth) — 一度にどれだけ多く送れるか。単位は Gbps です。
- レイテンシ (Latency) — データ 1 つが届くまでどれだけかかるか。単位は ms です。
道路にたとえると、帯域幅は道路の車線数で、レイテンシは出発地から目的地までの距離です。車線がいくら多くても距離が遠ければ、1 台が到着する時間は縮みません。
| 状況 | 帯域幅 | レイテンシ |
|---|---|---|
| 大きなファイル 1 つの転送 | 大きいほど速い | 影響が小さい |
| 小さなリクエストを頻繁にやり取り | 影響が小さい | 低いほど速い |
| ビデオ通話 | ある程度必要 | 低いほど自然 |
Web サービスの応答速度は、おおむね帯域幅よりレイテンシに敏感です。1 ページを描くために小さなリクエストを何度もやり取りするからです。
NIC — サーバーのネットワークの入口 #
サーバーがネットワークに接続される部品が NIC (Network Interface Card) です。NIC の速度がそのサーバーが出せる帯域幅の上限を決めます。1Gbps の NIC は、どれだけ良い回線を付けても 1Gbps を超えません。
ここで単位に注意します。ネットワーク速度は ビット (bit) 単位、ファイルサイズは バイト (byte) 単位です。1 バイトは 8 ビットなので、1Gbps 回線の実際の転送速度は約 125MB/s です。「1 ギガ回線なのにダウンロードが 100MB/s しか出ない」のはほとんどこの単位の違いのためです。
1 Gbps (ギガビット/秒) ÷ 8 ≈ 125 MB/s (メガバイト/秒)レイテンシは距離から来る #
レイテンシのかなりの部分は物理的な距離です。信号は光の速度を超えられず、光ケーブルの中ではそれより遅いです。だからソウルから米国東部までは、どれだけ回線が良くても一定時間以上が必ずかかります。
1 回行って戻る時間を RTT (Round Trip Time) と言います。リクエストを送って応答を受け取るまでの往復時間です。AWS 基礎 #1 のリージョン距離の表が、そのままこのレイテンシの例です。
| 出発 → 到着 | おおよその RTT |
|---|---|
| 同じデータセンターの中 | 1ms 未満 |
| ソウル → 東京 | 約 30~50ms |
| ソウル → シンガポール | 約 70~100ms |
| ソウル → 米国東部 | 約 180~200ms |
ここに、途中を経るルーター・スイッチごとに少しずつ時間が加わります。この中間の拠点を ホップ (hop) と言い、ホップが多いほどレイテンシが積もります。
距離はスループットまで下げる #
レイテンシが大きいと、大きなファイルの転送さえ遅くなり得ます。データを 1 まとまり送ってきちんと受け取ったという応答を待ってから次のまとまりを送る構造なので、往復が長いと回線が空いていても次のまとまりを送れずに待ちます。
帯域幅が広い + レイテンシが大きい
送る ──────▶ (応答待ち ...) ──────▶ (また待ち ...)
└ この待っている間、広い回線が空いているだから遠く離れた場所へ大容量を送るときは、帯域幅だけ増やしても速くなりません。一度により多く送るよう設定を調整するか、そもそも距離を縮める方が効果的です。
データセンターのネットワーク — 同じ AZ、リージョン間、インターネット #
クラウドでは通信がどこを経るかによって速度とコストが違います。AWS 基礎 #1 のリージョンと AZ がここで意味を持ちます。
| 区間 | レイテンシ | コスト |
|---|---|---|
| 同じ AZ の中 | もっとも低い | おおむね無料 |
| 同じリージョン、AZ 間 | 低い | 少額課金 |
| リージョン間 | 距離なりに大きい | GB あたり課金 |
| インターネットへ出る (egress) | 経路によって違う | GB あたり課金、普通もっとも高い |
だから互いに頻繁に通信するサーバーとデータベースは、同じ AZ に置くのがレイテンシとコストの両方に有利です。同時に 1 AZ の障害に耐えるには複数の AZ に分ける必要があるので、レイテンシ・コストと可用性の間の折衷が生じます。
CDN — 距離を縮める方法 #
レイテンシが距離から来るなら、答えの 1 つはコンテンツをユーザーの近くにあらかじめ置くことです。これが CDN (Content Delivery Network) です。世界中のあちこちの拠点に画像・動画・静的ファイルを複製しておき、ユーザーはもっとも近い拠点から受け取ります。
AWS の CloudFront がその例です。韓国のユーザーが米国サーバーの画像を毎回受け取る代わりに、近い拠点から受け取って RTT を大きく縮めます。詳しい動作は AWS 中級 #7 CloudFront で扱います。
よく出会う落とし穴 #
「遅いから帯域幅を増やそう」 #
応答が小さなリクエストを頻繁にやり取りする構造なら、帯域幅を増やしてもほぼ効果がありません。原因がレイテンシなら、距離を縮める (CDN・近いリージョン) か往復の回数を減らす必要があります。
「1 ギガ回線なのに 100MB/s しか出ない」 #
正常です。1Gbps は約 125MB/s で、オーバーヘッドを引くと実際はそれより少し低いです。ビットとバイトの違いです。
「リージョン間通信はとにかく速いだろう」 #
リージョン間は距離なりにレイテンシが大きく、GB あたりのコストが付きます。遠く離れたリージョン同士で大量にデータをやり取りする設計は遅くて高いです。
「egress コストを気にしなかった」 #
クラウドの外へ出るトラフィック (egress) は普通もっとも高い区間です。入ってくるトラフィックはおおむね無料ですが出ていくトラフィックが課金されるので、大容量を外部へ頻繁に送り出すとコストが大きく出ます。
まとめ #
今回つかんだ絵です。
- ネットワーク性能は 帯域幅 (一度にどれだけ) と レイテンシ (到着までどれだけ) という別の 2 つの軸です。
- NIC が帯域幅の上限を決めます。速度は ビット、ファイルは バイト で 8 倍の差があります。
- レイテンシはかなりの部分 距離 から来ます。往復時間が RTT で、レイテンシが大きいとスループットまで下がります。
- クラウドの通信は 同じ AZ → AZ 間 → リージョン間 → インターネット の順にレイテンシとコストが大きくなります。
- CDN はコンテンツをユーザーの近くに置いて距離を縮めます。
次回 — 仮想化とコンテナ #
ここまで 1 台のサーバーを構成するリソースをすべて見ました。ところがクラウドは物理サーバー 1 台を数十台のように分けて売ります。どうやって可能なのでしょうか。#7 仮想化とコンテナ — 物理サーバー 1 台が複数台になる仕組み では、ハイパーバイザーがハードウェアを分ける方式、仮想マシンとコンテナがリソースを共有する方式の違い、そしてそれが Docker と Kubernetes へどうつながるかを整理します。