LoginSignup
58
35

More than 5 years have passed since last update.

AWSでアベイラビリティゾーンをまたいでのアクセスが想像以上に遅かった話

Posted at

事の発端

弊社サービス「あなたのマイスター」ではAWSを利用し、以下のようなアーキテクチャで運用しています。

スクリーンショット 2018-04-02 9.52.50.png

が、速度がCVRに直結するシステムに於いて
どうにも「たまーにレスポンスが遅いときがあるけどサーバの負荷とかは特に上がっていない」という不思議な症状が発生するようになりました。

  • とあるURLに対するControllerの処理時間(ms)
サーバA(ap-northeast-1c) サーバB(ap-northeast-1a)
185 295
114 305
112 297
257 311
125 303
198 296
114 305
119 291
147 325
210 372
149 298
176 305
130 369
143 319
129 437
平均 平均
153.87 321.87

うーん…下手すると処理時間が倍くらい違う...

いろいろ調べてみるとアベイラビリティ―ゾーン(AZ)が問題らしい

EC2インスタンスは両方共 m4.large のため、マシンスペックは同じです。
また、監視グラフを見てみても特定のインスタンスに負荷がかかっている。
いろいろ調べてみると、どうにも
「アベイラビリティゾーン(AZ)をまたいだ通信は結構コストが掛かるよ!」
という記事が見つかりました。(AZ間のレイテンシについて )

Banners_and_Alerts_と_ユアマイスターシステム_20180110_pdf(2___5ページ).png

あなたのマイスターのシステムではELBで負荷分散しているEC2の片側のみが ap-northeast-1a 、それ以外のEC2、RDS、Elasticsearch、Redisが全て ap-northeast-1c で構成されている Multi-AZ 構成になっています。
もしやこれかが原因か?と思ったんですが、ちょっと記事が古い...
しかもAWSの人に相談したときはMulti-AZで問題ないって言って推奨されたしなぁ...

さらに調べてみると「複数AZ間の遅延は1、2ミリ秒であるため、(アプリケーションは)2つのAZに対して同時にコミットができる。」(AWSのデータセンターの中身を、設計総責任者が話した (2/2))とか書いてある。

うーん...どっちが本当なのかよく分からんなぁ...

実際にMulti-AZからSingle-AZに変更してみた

半信半疑のままAMIコピーを作成し、ap-northeast-1cにインスタンスを立ててELBのターゲットに登録しap-northeast-1aのインスタンスを切り離してみました。

サーバA(ap-northeast-1c) サーバB(ap-northeast-1a) サーバC(ap-northeast-1c)
185 295 116
114 305 154
112 297 201
257 311 187
125 303 165
198 296 132
114 305 266
119 291 198
147 325 142
210 372 137
149 298 184
176 305 176
130 369 166
143 319 113
129 437 154
平均 平均 平均
153.87 321.87 166.10

揃った!!!めっちゃ遅延しとるやん!!!数msっていう話はどこ行った!!!

まとめ

  • AZ間の通信は想像以上に遅い(コネクションプールの仕組みがあるDBアクセスでも結構時間がかかるっぽい)
  • 速度を重視するサービスで、インフラの障害を許容できるのであればSingle-AZ環境での運用をおすすめします
58
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
58
35