タイトル通りですが、Heroku US リージョンを Tokyo からアクセスすると物理的に遠いため遅いです。要件によってはギリギリ耐えられるくらいの遅さですが、少しでも速くしたいのであれば Fastly など CDN を前に置くことで少しだけ速くなります。しかもキャッシュしなくてもネットワーク経路が改善されるのか効果があります。

というわけで、実際にどれくらいの差があるのかを検証してみました。

ベンチマーク

Ruby on Rails に rails g scaffold article しただけのシンプルなアプリを対象にしました。CDN ありバージョンでもキャッシュはせず、アプリケーションサーバが応答するようにしてあります。あくまで相対的な目安として見てください。

計測方法は雑に curl を何回か実行した平均値をとってます。

for i in (seq 1 20); curl https://example.com/articles -s -o /dev/null -w "%{time_total}\n"; end | awk '{sum+=$1} END {print sum/NR}'

結果は以下の通りです。

  • Heroku : US region
    • CDN なし : 0.80 sec
    • CDN あり : 0.37 sec (Fastly)

CDN なしに比べて、ありだと半分近く速くなってますね。Fastly はコストはかかりますが、Heroku は使い続けたいが少しでもレスポンスを改善したいと言うときには採用することをオススメします。

次にこれが Tokyo リージョンの存在する GCP や AWS で Heroku と同じ PaaS にあたるものでどうかを検証します。

  • Google App Engine : Tokyo region
    • CDN なし : 0.21 sec
    • CDN あり : 0.10 sec (CloudCDN)
  • AWS Elastic Beanstalk : Tokyo region
    • CDN なし : 0.05 sec
    • CDN あり : 0.04 sec (CloudFront)

うーん、やはり Tokyo リージョンは速いですね。0.2-0.3 sec というのは Web ページの遷移としては体感するレベルの違いなので、そこが大事な場合は Tokyo リージョンがあるサービスを利用するのが良さそうです。とはいえ、Heroku の PaaS としての完成度は高いので、良い感じに使い分ければ良いと思います。