#HTTPS化したらやたらと読み込みが遅い時がある...
HTTPSでサイトにはアクセスできているのに、5回に一回くらい読み込みがされない...なんでだろうか?
##結論から言ってしまうと...
ロードバランサーの役割をしっかり理解していないのが原因でした。
##ロードバランサーとは?
ロード(load、負荷)+バランサー(Balancer、平衡を保つためのもの)で、サーバーやネットワークに関連する用語であり、装置の名称です。
この仕組みにより、Webサイトへのアクセス集中やサーバー故障などの場合でも、アクセス中の利用者に安定したサービス提供を継続可能になります。
まとめるとロードバランサーの役割は大きく2つです。
①パフォーマンスの向上
サーバの追加台数分、クライアントへの対応を処理可能
②可用性が向上
特定のサーバがダウンしても、別のサーバでサービス継続可能
##今回の謎の経緯
HTTPS化の方法はたくさんあるのですが、今回は「AWS Certificate Manager(ACM)」でやりました。
それに伴って、ロードバランサーは「Application Load Balancing(ALB)」を使用しておりました。
最初は「通信環境の不調なのか」、「インスタンス等の設定に不具合があるのか」はたまた「取得したドメインに問題があるのか?」など、今思うと的外れな心配ばかりしていました。色々と記事を辿っていくと「JavaScriptや画像が重いと読み込みが遅くなる」という内容の記事をいくつも見つけ、「なんかこれっぽいな...」と勝手に決めつけ、一つ一つ手当たり次第に原因を潰していく...といった感じで何に原因があるのかも理解できていない状態でした。
そこから検索のワードを少しずつ変えて記事を調べていくと、この記事に辿り着きました。
すぐに自分の直面している状態と似ていると思い、ロードバランサーの設定を見直しました。
##ロードバランサーの設定を見直す
この時に本来であれば「パブリックサブネット(外部からのアクセス可能な空間)」を2つ選択しないとロードバランサーの意味を成さないのですが、今回作成したVPCには「パブリックサブネットが1つ」と「プライベートサブネットが2つ」しかなく、「少なくとも2つのサブネットを指定する必要あります」というメッセージ通りに設定するとなると、必然的に片方を「プライベートサブネット」にしなければ先に進めない状態でした。
原因はこれです。
「サブネットにアタッチされたインターネットゲートウェイが存在しません」という注意勧告を出していてくれたのにも関わらず、無知な僕は先に進めることを良しとし、メッセージの意味を理解していませんでした。
ロードバランサーは最初にも説明した通り「負荷分担装置」です。
その役割は、ユーザーからのアクセスを平等に割り振ることです。
察しの良いみなさんなら勘づいているでしょうが、「プライベートサブネット」に割り振られてもアクセスできないため、結局はもう一方の「パブリックサブネット」へと戻されます。
**「読み込みの遅い」**というのは、つまりそういうことでした。
来た道を戻ってまた別の道に行っていたらそりゃ遅くなりますよね。
##解決方法
解決方法は簡単です。
VPCに「パブリックサブネット」を新たに追加してあげるだけです。
追加したサブネットをロードバランサーの作成時に設定してあげれば、通信がどちらに割り振られてもサーバーへのアクセスが可能となり、読み込み速度が改善されました。
##最後に
今回の「ロードバランサー」同様に、性能の有能さに甘えてしまって、なんとなくで使ってしまっているツールがたくさんあるので、これを機にしっかりとその子が何を得意としているのかを理解してあげることが大事なんだなと痛感しました。
最後までお付き合いいただきありがとうございます。