おれさまラボの実験ノート

実際に手を動かして理解を深めるブログ。

AWS AZ 間の通信速度を測定してみた

はじめに

Twitter を眺めてると AWSでアベイラビリティゾーンをまたいでのアクセスが想像以上に遅かった話 - Qiita という記事が TL に流れていました。AZ をまたぐとアプリの処理時間が3倍程度遅くなったというものです。

AWS の設計について、AWS Certified Advanced Networking Official Study Guide: Specialty Exam (Amazon Web Services, Inc.,2018, p3) を見てみると、AZ 間の通信は基本的に 2ms 以下となるよう作られているとのことです。

実際どんなもんなのか、簡単な実験を行ってみました。

実験

以下のパターンで実測しました。

  1. 同一AZに順次建てたEC2インスタンス間でpingを10回測定
  2. 別AZに順次建てたEC2インスタンス間でpingを10回測定
  3. 同一AZに同時に建てたEC2インスタンス間でpingを10回測定
  4. 同一AZにプレースメントグループ(pg)を使って建てたEC2インスタンス間でpingを10回測定

結果

結果のサマリを以下の表にまとめました。

#fromtobootpgrtt
azipazipminavgmax
11a10.0.0.1461a10.0.0.78順次なし0.3260.4420.520
21a10.0.0.1461c10.0.1.160順次なし2.6382.8454.003
31a10.0.0.1421a10.0.0.51同時なし0.3730.4600.630
41a10.0.0.351a10.0.0.116同時あり0.4170.4650.572

上記表からわかる情報は以下の通り。

  • EC2 インスタンスを1台ずつ順次に建てても、同時に2台建てても、rtt にはほぼ影響がない。
  • 同一 AZ 内ではおおむね 0.5ms 程度の rtt となっている。
  • 異なる AZ 間では 2ms 台となっており、最も遅いときには 4ms を越えた。
  • プレースメントグループを使った場合、同一 AZ 内の測定である #1 や #3 と比較しても大差がなかった

AZ 間の通信は教科書どおりおおむね 2ms 台となりました。AZ 内はだいたい 0.5ms と見て良いみたいです。

プレースメントグループはクラスター/パーティション/スプレッドで結果が変わってくるのかも知れません。

おわりに

おそらく AWSでアベイラビリティゾーンをまたいでのアクセスが想像以上に遅かった話 - Qiita という記事での測定結果は ELB カマしていることから http リクエスト/レスポンスの測定と考えられ、同一 AZ で 100ms ~ 150ms、異なるAZ 間で 300ms ~ 400ms 程度とのことです。

今回の検証結果では、ネットワークレイヤーで3倍~4倍の速度差があり、上記サイトの結果も3倍程度の開きがあることから、ネットワークレイヤーの遅延がアプリレイヤーになってもそのまま影響してそうな印象を受けます。

ミリの世界でシステムを作ってる場合は、同一 AZ 内で処理が終わるようなつくりにすることが求められそうですね。

以上