はじめに
先日、私が通っているプログラミングスクールで5分間の自己紹介をする機会がありました。
自分の経歴だけで5分間話すのは難しいと思い、私がが過去の経験から学んだ 「速度」、特にネットワークの 「レイテンシー」 について発表しました。
しかし、5分は想像以上に短く、うまく伝えられなかった感覚があります。
そこでこの記事では、発表で十分に語れなかった部分も含めて、「Webサービスのパフォーマンスにおける物理的な距離の重要性」 について、改めて解説したいと思います。
※もし技術的に認識を間違えている点があれば、指摘いただけると嬉しいです。
この記事の対象読者
- 自作のWebアプリを公開(デプロイ)しようとしている方
- アプリの表示速度について、なんとなく気になっている方
- PaaS(Heroku, Render, fly.ioなど)をこれから使う方
「なんかアプリが遅い…」の正体 - レイテンシーとは
私たちが「Webサイトの表示が速い/遅い」と感じるとき、その正体の1つとてし考えられるものにレイテンシーがあります。
簡単に言うと、リクエストを端末から送信し、サーバーで処理され、レスポンスが端末に返ってくるまでの一連の往復時間を指します。
そして、このレイテンシーを決定づける無視できない要因が、先ほど話した物理的な距離になります。
どんなにすごい技術を使っても、光の速さ(秒速約30万km)を超えることはできません。距離が遠ければ遠いほど、通信の往復にかかる時間は必然的に長くなります。
実験①:距離はどれほど影響するのか?
では、実際にサーバーの場所が変わると、どれくらいレイテンシーに差が出るのでしょうか。
これは、手元のPCから海外と国内のサーバーにping
コマンド(サーバーとの応答時間を確認するコマンド)を実行してみることで、簡易的に体感できます。
# アメリカのサーバーにpingを打つ例
$ ping アメリカにあるサーバーのIPアドレス
...
round-trip min/avg/max/stddev = 145.138/145.923/146.592/0.533 ms
# 国内のサーバーにpingを打つ例
$ ping 8.8.8.8 #googleのサーバー(東京にもサーバーがある)
...
round-trip min/avg/max/stddev = 8.314/9.021/9.895/0.583 ms
※数値は環境により大きく変動します。
一般的に、東京からアメリカ(NY)サーバーとの通信には約150ミリ秒ほどかかります。
一方、国内サーバー(東京~大阪間)では約10ミリ秒で通信できます。実に約15倍の差です。
実験②:世界各地からのアクセスでどれくらい速度が変わる?
他にも、ご自身のWebサイトや好きなサイトを使って、物理的な距離が速度に与える影響をリアルタイムで体験する方法があります。
KeyCDN 「Performance Test」
これは、世界8ヶ所のサーバーから指定したURLにアクセスし、接続にかかった時間などを一覧で表示してくれるツールです。
こちらは日本のとある大学のHPへの接続テストの結果です。
結果を見ると、日本から一番近いシンガポールのCONNECT時間が1番速く、ロンドンやニューヨークなど、遠くの都市が遅くなっています。
なぜ僅かな遅延が問題になるのか
「でも、0.1秒ちょっとでしょ?大したことないのでは?」
そう思うかもしれません。
しかし、Webページは表示されるまでに、サーバーと何回も通信を繰り返すことがあります。
これらの通信一つ一つに150msの遅延が上乗せされると、合計ではユーザーが体感できる数秒の遅延にまで膨れ上がってしまいます。
解決策:ユーザーの近くにサーバーを置こう
では、どうすればいいのか?
コードの改善やインフラの増強ももちろん重要ですが、私たちが今すぐ意識できる、最もシンプルで効果的な解決策があります。
それは、「ターゲットユーザーの居住地の近くに、サーバーを置く」 ことです。
日本語で作られたアプリのユーザーは、ほとんどが日本に住んでいる人のはずです。
ならば、サーバーも日本のデータセンターに置くのが最も合理的で、速いのです。
実践編:PaaSのリージョン選択で差をつける
皆さんがアプリをデプロイする際によく利用するPaaS(Platform as a Service)には、このサーバーの設置場所、すなわち 「リージョン」 を選択する機能があります。
何も考えずにデフォルト設定のまま進めると、米国(US)リージョンになってしまうこともあるので注意が必要です。
PaaSごとのリージョン選択
fly.io
fly launchコマンドの際に--region nrt(成田)を指定することで、東京リージョンにデプロイできます。
Koyeb
UI上で「Tokyo, Japan」を簡単に選択できます。ただし、無料プランのデータベースはシンガポールリージョンになるなど、サービスごとに癖があるので注意が必要です。
なお、多くの人に人気があるRenderは日本リージョンを選択できません。
速度面での恩恵は少ないCDN
「世界中にサーバーがあって高速!」と謳っているサービスもあります。
これはCDN(コンテンツデリバリーネットワーク)という技術で、主に画像などの静的コンテンツを高速に配信するためのものであり、世界各地にサーバーを配置し、最適なサーバーからコンテンツが配信されるというものです。
しかし、ターゲットが日本国内のユーザーだけの場合、速度の面で見るとその恩恵は限定的です。
世界中にサーバーがあっても、ユーザーが日本居住者のみである場合、結局日本サーバーから配信されるのが1番速くなります。
まとめ
長くなりましたが、伝えたかったことはシンプルです。
Webサービスの体感速度はレイテンシーに大きく左右される。
レイテンシーの大きな原因は物理的な距離。これは光の速さという物理法則なので覆せない。
だから、ターゲットユーザーの近く(=日本)にサーバー(PaaSのリージョン)を置くことを意識しよう。
これからデプロイする際に、この記事を少しでも思い出して、リージョン選択の項目を気にしていただけたら、とても嬉しいです。
最後まで読んでいただき、ありがとうございました!