Googleのネットワーク上で各大陸がどのぐらい遠いのか調べてみた

GCPを利用すると、アジア、アメリカ大陸、ヨーロッパなどのリージョンを選ぶことが出来ますが、その各リージョンがネットワーク的にどのぐらい遠いか（RTT）を計測してみます。

リージョンはこのぐらいあります。
<img width="888" alt="スクリーンショット 2019-02-13 17.37.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/28681/e878e5e6-6d09-2db3-738c-3264690ff10a.png">


## リージョン間のRTTを計測する際の注意点

[こちら](https://cloud.google.com/about/locations/?hl=ja#network-tab) にある図を見るとわかりますが、Googleのネットワークは、日本⇔ヨーロッパと言う経路を考えた際、インドから西を通るルートが無いようです。
実測するとわかりますが、日本⇔ヨーロッパ間でアクセスすると、太平洋を経由しアメリカ大陸経由でアクセスされます。

<img width="1225" alt="スクリーンショット 2019-02-13 17.37.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/28681/a260a000-532b-f914-6b82-e0e58305ed12.png">

## 実際に計測してみる

今回は、

アジア : 東京
アメリカ（西) : Los Angeles
アメリカ(東) : N Virginia
ヨーロッパ : Frankfurt

を利用して計測します。

経路的には以下の６つのルートに対して計測をしました。

<img width="1320" alt="スクリーンショット 2019-02-13 17.13.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/28681/c464bfa8-781f-8794-b6de-ef428e8f837d.png">

1. 東京 → ヨーロッパ
2. 東京 → アメリカ(東)
3. 東京 → アメリカ(西)
4. アメリカ(西) → アメリカ(東)
5. アメリカ(東） → ヨーロッパ
6. アメリカ(西) → ヨーロッパ

になります。

## 計測環境

Googleのネットワークは以下の図のPremium Tierのものが標準で選択されます。 [参考](https://cloudplatform-jp.googleblog.com/2017/09/introducing-Network-Service-Tiers-your-cloud-network-your-way.html)

![image2.gif](https://qiita-image-store.s3.amazonaws.com/0/28681/9aa340e4-bb92-ad6a-f231-154149c2f442.gif)

今回の計測では、Google外部のネットワークの遅延の影響を受けたくないため、送信側/受信側ともにGoogleのネットワーク内で完結させます。
今回は、送信側/受信側ともにGAE/goを利用しました。

仕組み的には、送信側のGAEへリクエストを送信し、リクエストを受けた送信側のインスタンスはurlfetchパッケージを利用し、受信側のGAEへリクエストを投げます。
30回リクエストを投げた際の最大値、最小値、平均値を記録し、それを4回計測します。

## 計測結果

### ① 東京 → ヨーロッパ

|試験回数|結果|
|:---:|---|---|---|---|
|1|max: 1179, min: 1149, avg: 1153.741935|
|2|max: 1228, min: 1149, avg: 1156.741935|
|3|max: 1160, min: 1150, avg: 1152.451613|
|4|max: 1235, min: 1149, avg: 1155.677419|

**平均 : 1154.6 msec.**

### ② 東京 → アメリカ(東)

|試験回数|結果|
|:---:|---|---|---|---|
|1|max: 779, min: 750, avg: 753.612903|
|2|max: 835, min: 749, avg: 760.774194|
|3|max: 837, min: 750, avg: 759.612903|
|4|max: 770, min: 749, avg: 753.548387|

**平均 : 756.8 msec.**

### ③ 東京 → アメリカ(西)

|試験回数|結果|
|:---:|---|---|---|---|
|1|max: 514, min: 497, avg: 500.645161|
|2|max: 596, min: 497, avg: 504.322581|
|3|max: 591, min: 497, avg: 502.870968|
|4|max: 576, min: 497, avg: 502.032258|

**平均 : 502.5 msec.**

### ④ アメリカ(西) → アメリカ(東)

|試験回数|結果|
|:---:|---|---|---|---|
|1|max: 448, min: 306, avg: 312.387097|
|2|max: 366, min: 306, avg: 310.483871|
|3|max: 378, min: 305, avg: 313.032258|
|4|max: 361, min: 305, avg: 310.419355|

**平均 : 311.5 msec.**

### ⑤ アメリカ(東） → ヨーロッパ

|試験回数|結果|
|:---:|---|---|---|---|
|1|max: 476, min: 440, avg: 443.967742|
|2|max: 514, min: 440, avg: 447.161290|
|3|max: 499, min: 439, avg: 445.096774|
|4|max: 444, min: 440, avg: 442.451613|

**平均 : 444.6 msec.**

### ⑥ アメリカ(西) → ヨーロッパ

|試験回数|結果|
|:---:|---|---|---|---|
|1|max: 714, min: 706, avg: 708.903226|
|2|max: 768, min: 706, avg: 712.354839|
|3|max: 716, min: 706, avg: 709.032258|
|4|max: 756, min: 706, avg: 710.967742|

**平均 : 710.2 msec.**

## まとめ

以上の結果を見たところ、最大値でもブレが非常に少なく、とてもネットワークの品質は良さそう。
最低値はほぼ揃っていて、ぶれていても2-3msec程度なので、ほぼその付近がネットワーク的な限界値のような気がします。

例えば、全世界向けのアプリケーションをデプロイしたい、というような場合には、アジアリージョンにデプロイした場合にはヨーロッパからの遅延が大きくなるため（テスト結果から1200msec程度）、アメリカのリージョンにデプロイすることで、アメリカ東 → ヨーロッパ、アメリカ西 → 日本のいずれも500msec近辺に収めることができそうです。

静的なコンテンツに関しては、GAEを利用した場合、GFE（Google Front End）のキャッシュや、CloudCDN、または、サードーパーティーのCDNを利用することで遅延を更に少なくすることができます。

YouTubeやGoogle Playが利用している Edge nodes (Google Global Cache, or GGC) は、以下のように世界中に存在するため、遅延をかなり減らせるようです。（追記: GGCは現状はGCPから利用することは出来ないようです）

<img width="576" alt="スクリーンショット 2019-02-13 18.17.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/28681/f5889d77-b774-e6d7-f710-7d27174df96f.png">

## 参考資料

https://peering.google.com/#/infrastructure
https://cloudplatform-jp.googleblog.com/2017/09/introducing-Network-Service-Tiers-your-cloud-network-your-way.html