Google Compute Engineネットワークのレイテンシ #gcpja

 Cloud, GCE

ども、takiponeです。前回の記事ではGCE(Google Computing Engine)のネットワーク構成について概要を紹介しました。今回は前回の構成をベースに、GCEのインスタンスからいろいろな相手にpingを送出してネットワーク的な近さを測ってみたいと思います。

お断り

ここでの計測結果は実際のネットワーク性能を示唆するものではありません。参考値としてご覧ください。

Networkオブジェクト内のインスタンス

同一リージョン内

まずは、GCEの東アジアリージョンで同一リージョン内のインスタンスにpingを送出しました。

  • asia-east1-a <-> asia-east1-a(同一ゾーン) : avg 0.606 ms
  • asia-east1-a <-> asia-east1-b(異なるゾーン) : avg 0.715 ms

まずは同一ゾーン内で1ms未満の良好なレイテンシーが見れたところで、意外だったのが異なるゾーンの結果です。AWSだとアベイラビリティゾーンが異なると1ms以上のそれなりのレイテンシーがあったのですが、GCEでは異なるゾーンでも1ms未満のレイテンシーを維持しています。これくらいの差であれば、一般的なアプリケーションでゾーンの違いを気にすること無くインスタンスの配置ができそうです。

asia-east1-a <-> asia-east1-a

$ ping -c 10 10.240.202.143
PING 10.240.202.143 (10.240.202.143) 56(84) bytes of data.  
64 bytes from 10.240.202.143: icmp_req=1 ttl=64 time=0.793 ms  
64 bytes from 10.240.202.143: icmp_req=2 ttl=64 time=0.606 ms  
64 bytes from 10.240.202.143: icmp_req=3 ttl=64 time=0.600 ms  
64 bytes from 10.240.202.143: icmp_req=4 ttl=64 time=0.487 ms  
64 bytes from 10.240.202.143: icmp_req=5 ttl=64 time=0.618 ms  
64 bytes from 10.240.202.143: icmp_req=6 ttl=64 time=0.550 ms  
64 bytes from 10.240.202.143: icmp_req=7 ttl=64 time=0.536 ms  
64 bytes from 10.240.202.143: icmp_req=8 ttl=64 time=0.623 ms  
64 bytes from 10.240.202.143: icmp_req=9 ttl=64 time=0.587 ms  
64 bytes from 10.240.202.143: icmp_req=10 ttl=64 time=0.662 ms

--- 10.240.202.143 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 8997ms  
rtt min/avg/max/mdev = 0.487/0.606/0.793/0.079 ms  

asia-east1-a <-> asia-east1-b

$ ping -c 10 10.240.106.88
PING 10.240.106.88 (10.240.106.88) 56(84) bytes of data.  
64 bytes from 10.240.106.88: icmp_req=1 ttl=64 time=0.576 ms  
64 bytes from 10.240.106.88: icmp_req=2 ttl=64 time=0.708 ms  
64 bytes from 10.240.106.88: icmp_req=3 ttl=64 time=0.722 ms  
64 bytes from 10.240.106.88: icmp_req=4 ttl=64 time=0.898 ms  
64 bytes from 10.240.106.88: icmp_req=5 ttl=64 time=0.806 ms  
64 bytes from 10.240.106.88: icmp_req=6 ttl=64 time=0.654 ms  
64 bytes from 10.240.106.88: icmp_req=7 ttl=64 time=0.686 ms  
64 bytes from 10.240.106.88: icmp_req=8 ttl=64 time=0.662 ms  
64 bytes from 10.240.106.88: icmp_req=9 ttl=64 time=0.657 ms  
64 bytes from 10.240.106.88: icmp_req=10 ttl=64 time=0.785 ms

--- 10.240.106.88 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 8997ms  
rtt min/avg/max/mdev = 0.576/0.715/0.898/0.090 ms  

us-central1-a <-> us-central1-b

$ ping -c 10 10.240.12.160
PING 10.240.12.160 (10.240.12.160) 56(84) bytes of data.  
64 bytes from 10.240.12.160: icmp_req=1 ttl=64 time=0.853 ms  
64 bytes from 10.240.12.160: icmp_req=2 ttl=64 time=0.975 ms  
64 bytes from 10.240.12.160: icmp_req=3 ttl=64 time=0.647 ms  
64 bytes from 10.240.12.160: icmp_req=4 ttl=64 time=0.800 ms  
64 bytes from 10.240.12.160: icmp_req=5 ttl=64 time=0.677 ms  
64 bytes from 10.240.12.160: icmp_req=6 ttl=64 time=0.609 ms  
64 bytes from 10.240.12.160: icmp_req=7 ttl=64 time=0.495 ms  
64 bytes from 10.240.12.160: icmp_req=8 ttl=64 time=0.805 ms  
64 bytes from 10.240.12.160: icmp_req=9 ttl=64 time=0.657 ms  
64 bytes from 10.240.12.160: icmp_req=10 ttl=64 time=0.719 ms

--- 10.240.12.160 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9000ms  
rtt min/avg/max/mdev = 0.495/0.723/0.975/0.134 ms  

異なるリージョン間

続いて異なるリージョンの場合です。ネットワーク概要で紹介しました通り、GCEはリージョン間で内部ネットワークを構成することが可能でインスタンス間でセキュアに通信することができます。

  • asia-east1-a <-> asia-east1-a(同一ゾーン) : avg 0.606 ms
  • asia-east1-a <-> europe-west1-a(ヨーロッパ) : avg 254.380 ms
  • asia-east1-a <-> us-central1-a(アメリカ) : avg 163.143 ms
  • europe-west1-a <-> us-central1-a : avg 109.993 ms

地理的および一般的なインターネットのネットワーク的な距離と同じような傾向になりました。同じCIDRレンジ内に様々なリージョンのインスタンスが混在するのでついつい同一視しがちですが、同一リージョンのインスタンス同士でクラスタを組み、異なるリージョンのインスタンスとはクラスタ間の連携を組む(Consulの例)など、異なる設計を意識する必要が出てくるかと思います。

asia-east1-a <-> europe-west1-a

$ ping -c 10 10.240.17.245
PING 10.240.17.245 (10.240.17.245) 56(84) bytes of data.  
64 bytes from 10.240.17.245: icmp_req=1 ttl=64 time=257 ms  
64 bytes from 10.240.17.245: icmp_req=2 ttl=64 time=254 ms  
64 bytes from 10.240.17.245: icmp_req=3 ttl=64 time=253 ms  
64 bytes from 10.240.17.245: icmp_req=4 ttl=64 time=254 ms  
64 bytes from 10.240.17.245: icmp_req=5 ttl=64 time=253 ms  
64 bytes from 10.240.17.245: icmp_req=6 ttl=64 time=253 ms  
64 bytes from 10.240.17.245: icmp_req=7 ttl=64 time=254 ms  
64 bytes from 10.240.17.245: icmp_req=8 ttl=64 time=254 ms  
64 bytes from 10.240.17.245: icmp_req=9 ttl=64 time=253 ms  
64 bytes from 10.240.17.245: icmp_req=10 ttl=64 time=254 ms

--- 10.240.17.245 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9002ms  
rtt min/avg/max/mdev = 253.943/254.380/257.641/1.241 ms  

asia-east1-a <-> us-central1-a

$ ping -c 10 10.240.248.223
PING 10.240.248.223 (10.240.248.223) 56(84) bytes of data.  
64 bytes from 10.240.248.223: icmp_req=1 ttl=64 time=163 ms  
64 bytes from 10.240.248.223: icmp_req=2 ttl=64 time=163 ms  
64 bytes from 10.240.248.223: icmp_req=3 ttl=64 time=163 ms  
64 bytes from 10.240.248.223: icmp_req=4 ttl=64 time=163 ms  
64 bytes from 10.240.248.223: icmp_req=5 ttl=64 time=163 ms  
64 bytes from 10.240.248.223: icmp_req=6 ttl=64 time=163 ms  
64 bytes from 10.240.248.223: icmp_req=7 ttl=64 time=163 ms  
64 bytes from 10.240.248.223: icmp_req=8 ttl=64 time=163 ms  
64 bytes from 10.240.248.223: icmp_req=9 ttl=64 time=163 ms  
64 bytes from 10.240.248.223: icmp_req=10 ttl=64 time=163 ms

--- 10.240.248.223 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9012ms  
rtt min/avg/max/mdev = 163.081/163.143/163.242/0.543 ms  

us-central1-a <-> europe-west1-a

$ ping -c 10 10.240.17.245
PING 10.240.17.245 (10.240.17.245) 56(84) bytes of data.  
64 bytes from 10.240.17.245: icmp_req=1 ttl=64 time=110 ms  
64 bytes from 10.240.17.245: icmp_req=2 ttl=64 time=109 ms  
64 bytes from 10.240.17.245: icmp_req=3 ttl=64 time=109 ms  
64 bytes from 10.240.17.245: icmp_req=4 ttl=64 time=110 ms  
64 bytes from 10.240.17.245: icmp_req=5 ttl=64 time=110 ms  
64 bytes from 10.240.17.245: icmp_req=6 ttl=64 time=110 ms  
64 bytes from 10.240.17.245: icmp_req=7 ttl=64 time=109 ms  
64 bytes from 10.240.17.245: icmp_req=8 ttl=64 time=109 ms  
64 bytes from 10.240.17.245: icmp_req=9 ttl=64 time=109 ms  
64 bytes from 10.240.17.245: icmp_req=10 ttl=64 time=109 ms

--- 10.240.17.245 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9010ms  
rtt min/avg/max/mdev = 109.925/109.993/110.143/0.423 ms  

Amazon EC2の近隣リージョン

番外編として、Amazon EC2の東京リージョン、シンガポールリージョンのインスタンスにpingを実行した結果を貼っておきます。GCEの東アジアリージョンは所在国が公開されていませんが、ネットワーク的には東京の方がシンガポールよりも近い東アジアとして認識できそうです。

邪推するための材料ではなく、GCEのインスタンスからAmazon S3やAmazon DynamoDBにアクセスしたいなど、AWSのサービスに効率良くアクセスするために近いリージョンを選択するケースと言うのは実際にあるかもしれません。

asia-east1-a <-> ap-northeast-1 (AWS)

$ ping -c 10 54.92.XX.XX
PING 54.92.XX.XX (54.92.XX.XX) 56(84) bytes of data.  
64 bytes from 54.92.XX.XX: icmp_req=1 ttl=55 time=40.1 ms  
64 bytes from 54.92.XX.XX: icmp_req=2 ttl=55 time=37.9 ms  
64 bytes from 54.92.XX.XX: icmp_req=3 ttl=55 time=37.7 ms  
64 bytes from 54.92.XX.XX: icmp_req=4 ttl=55 time=37.9 ms  
64 bytes from 54.92.XX.XX: icmp_req=5 ttl=55 time=37.6 ms  
64 bytes from 54.92.XX.XX: icmp_req=6 ttl=55 time=38.0 ms  
64 bytes from 54.92.XX.XX: icmp_req=7 ttl=55 time=37.8 ms  
64 bytes from 54.92.XX.XX: icmp_req=8 ttl=55 time=37.9 ms  
64 bytes from 54.92.XX.XX: icmp_req=9 ttl=55 time=37.9 ms  
64 bytes from 54.92.XX.XX: icmp_req=10 ttl=55 time=37.7 ms

--- 54.92.XX.XX ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9013ms  
rtt min/avg/max/mdev = 37.613/38.095/40.193/0.735 ms  

asia-east1-a <-> ap-southeast-1 (AWS)

$ ping -c 10 54.179.XX.XX
PING 54.179.XX.XX (54.179.XX.XX) 56(84) bytes of data.  
64 bytes from 54.179.XX.XX: icmp_req=1 ttl=58 time=54.4 ms  
64 bytes from 54.179.XX.XX: icmp_req=2 ttl=58 time=54.2 ms  
64 bytes from 54.179.XX.XX: icmp_req=3 ttl=58 time=54.2 ms  
64 bytes from 54.179.XX.XX: icmp_req=4 ttl=58 time=54.2 ms  
64 bytes from 54.179.XX.XX: icmp_req=5 ttl=58 time=56.1 ms  
64 bytes from 54.179.XX.XX: icmp_req=6 ttl=58 time=54.0 ms  
64 bytes from 54.179.XX.XX: icmp_req=7 ttl=58 time=54.4 ms  
64 bytes from 54.179.XX.XX: icmp_req=8 ttl=58 time=54.2 ms  
64 bytes from 54.179.XX.XX: icmp_req=9 ttl=58 time=77.0 ms  
64 bytes from 54.179.XX.XX: icmp_req=10 ttl=58 time=54.3 ms

--- 54.179.XX.XX ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9005ms  
rtt min/avg/max/mdev = 54.038/56.751/77.080/6.805 ms  
$

まとめ

簡単にまとめます。

  • 同一リージョン内はゾーンをまたいでも1ms以下の良好なレイテンシを維持
  • 異なるリージョンは一般的なネットワークの距離と同様の傾向があり、内部ネットワーク経由で通信できるのが便利

それぞれ10回ずつの少ないサンプリング数でしたが、その中でもブレが少ない安定した結果だったことも特徴として見れると思います。

また、今回はレイテンシだったので、性能が求められる要件であればスループットなど別のパフォーマンス指標も合わせて計測し、判断するのが良いでしょう。



次の記事 :

[GCE] VMインスタンスからイメージを作成する


前の記事 :

Google Compute Engineネットワーク入門 #gcpja