Cloud Run東京リージョンにカスタムドメインをマッピングするとどのくらいのレイテンシが発生するのか
調査結果まとめ
日本の真ん中あたりから東京リージョンのCloudRunにアクセスしたときのTTFB(Time To First Byte)のざっくり計測結果。詳細は後述。
- Cloud Runのデフォルトドメインに直接アクセスした場合: 28msくらい
-
Cloud Runにカスタムドメインをマッピングした場合: 99msくらい
- さらにCloudflareからCNAMEで指した場合: 114msくらい
- Cloudflare WorkersでCloud Runのデフォルトドメインをプロキシした場合: 44msくらい
- Cloud Run + Cloud Load Balancing(CDNなし): 31msくらい
Cloud Runの東京リージョンで「カスタムドメインのマッピング」を利用するとレイテンシが発生する
2023年1月現在、Cloud Runのドキュメントの既知の問題には以下の記載があります。
一部のリージョンからの呼び出し時にカスタム ドメインでリクエストレイテンシが増加する
カスタム ドメインを使用する Cloud Run サービスに対するリクエストでは、一部のロケーションでレイテンシが非常に大きくなる場合があります。この問題は、asia-northeast1
とus-east4
の Cloud Run サービスで顕著です。
この問題が発生した場合は、サーバーレス NEG を使用して、Cloud Load Balancing でパフォーマンスを向上させることができます。
Cloud Load Balancingを使うことで解決できますが、Cloud Load Balancingを常時起動すると$20/月くらいはかかってきます。気軽に0円から使えるのがCloud Runの魅力の一つだと思うので、ちょっとしたサイトプロジェクトならCloud Runだけで済ませたかったりします。
レイテンシはどんなものか調査してみた
そこで気になるのが上述のレイテンシが許容できる程度なのかということです。
そこで、決まった文字列を返すだけのアプリケーションをCloud Run(asia-northeast1
)にデプロイし、日本の真ん中あたりからリクエストしたときのTTFB(Time To First Byte)を計測してみました。
調査1: Cloud Runのデフォルトのドメインの場合
まずはデフォルトのドメイン(https://○○-an.a.run.app
)で試してみます。
- 試行回数: 30回
- 平均: 28.19 ms
- 中央値: 28.1 ms
調査2: カスタムドメインをマッピングした場合
次にカスタムドメインをマッピングしてから試してみます。
- 試行回数: 30回
- 平均: 99.1 ms
- 中央値: 98.5 ms
結論
東京リージョンでカスタムドメインをマッピングすると、TTFBが約70ms遅くなった。
ちなみに
Cloud Runのドメインマッピングは2023年1月時点でプレビュー機能となっています。もしかするとこのレイテンシも一般提供のタイミングで解決される可能性はあります。
しかし、超古株のApp Engineでも同じ問題を抱え続けているため、あまり期待しすぎない方が良いとは思います。
調査3: CloudflareからCNAMEでCloudRunを指した場合
ドメインをマッピングしたCloud Run(東京リージョン)に対して、CloudflareからCNAMEでCloud Runを指したときのTTFBも調べてみた。
- 試行回数: 30回
- 平均: 113.8 ms
- 中央値: 115.2 ms
当然だけど例のレイテンシは解消されず、Cloudflareを経由するぶん10〜15msほどレイテンシが大きくなった。
調査4: Cloudflare Workersでデフォルトドメインへのリクエストをプロキシした場合
Cloud Run(東京リージョン)のデフォルトドメイン(https://○○-an.a.run.app
)に対してCloudflare Workers経由でアクセスを行ってみた。
# イメージ
🧑💻 ↔ Cloudflare Workers ↔ ○○-an.a.run.app
- 試行回数: 30回
- 平均: 44.3 ms
- 中央値: 44.5 ms
Cloudflare Workers速い! Cloudflare WorkersをCloud Runの前段に置くのはかなり現実的な解決策かもしれない。
ただし、js/css/画像/フォントなどの静的ファイルへのリクエストが毎回Cloudflare Workersを経由するのは避けたいので、デプロイ時に静的ファイルをR2にアップロードするなり(エグレス料金¥0なのでコスパ最強)、Firebase Hostingでキャッシュするなりして、別ドメインで参照するのが良いと思われる。
調査5: Cloud Run + Cloud Load Balancing(CDNなし)
Cloud Runの前段にCloud Load Balancingを配置した場合の計測結果は以下のようになった。
- 試行回数: 30回
- 平均: 30.7 ms
- 中央値: 31 ms
ドキュメントに書かれている通り、Cloud Load Balancingを使うことで例のレイテンシが解消された。