RailsアプリをHeroku(US)とGoogle App Engine(tokyo)のエンドユーザレスポンスタイムを計測してみた

この記事はアドベントカレンダー用に少し真面目に書いた記事だよ

adventar.org

はじめに結論

当たり前ですがGoogle App Engine(以下GAE)の方が早かったです.

Heroku

f:id:kiitan128:20171219164127p:plain

Google App Engine

f:id:kiitan128:20171219164113p:plain

方法と結果

環境

動かすアプリ

Rails + Elasticsearch を使った検索サービス

Heroku

Heroku Hobby Dyno なのでAWS USリージョンのどこかにサーバが立っています.

Google App Engine

Google App Engine をデフォルト 1インスタンスで tokyoリージョンに立てています.

計測方法

↓珍しく日本のサーバでのクライアントサイドからデータ計測が行える神サイトのでこちらを利用します. www.webpagetest.org

結果

Heroku

f:id:kiitan128:20171219164127p:plain

Google App Engine

f:id:kiitan128:20171219164113p:plain

はやい圧倒的なスピードである.
日本鯖なので First Byte が0.6ms位差が出ている. てか heroku おそすぎでは.

しかしGAEは料金がたか~い(サービス移行4日目くらい)

プロダクト リソース 使用量 料金(円)
App Engine Flex Instance Core Hours Japan 6,440.42 Minute ¥796.38
App Engine Flex Instance RAM Japan 107.34 Gibibyte-hour ¥106.42

なので次はVPSとかで検証しようかな?

おまけ GAE Railsアプリの起動方法

GAE に触ったきっかけは?

GAE (Google App Engine) が無料枠で 28時間分あるみたいなので移行しようと色々試してみた.
しかしRails無料枠の対象外であることにあとから気がついた. (無料枠対象はStandard EnvironmentだけRubyはFlexible Environmentだったw)

rubyで Standard Environment はなんで使われへんのや!!

とりあえずGAEでのRailsアプリケーションをたてる

ここでは以下の構成で環境を構築します. ・GCE でPosgreSQLを起動してます.(CloudSQLは月$10くらいかかるので使わない)
・GAE (Google App Engine) で Rails を起動します.
こちらの記事ではGAEのことだけ説明します.
PosgreSQLに関しては以下のテンプレートを使っただけ

console.cloud.google.com

railsのルートディレクトリで下のコマンドでデプロイをしようとできます.
app.ymlつくるー?って聞かれるので Yesと答えましょう.
次になんかか聞かれますがとりあえずコマンドを中断します.

gcloud app deploy

下のDocumentを参考にスケーリング設定等を./app.ymlに書いていきます. Configuring your App with app.yaml  |  App Engine flexible environment for Node.js docs  |  Google Cloud Platform

Google App EnginのFlexible Environment の app.yml に関する日本語記事が見当たらなかったので書き記しておきます.

entrypoint: bundle exec rackup -p $PORT
env: flex
runtime: ruby

includes:
- secret.yaml #環境変数を設定するymlを分けておけるので便利

threadsafe: true #デフォルトだとシングルスレッド処理なのでマルチスレッド処理を許可

automatic_scaling:
  min_num_instances: 1 #最小インスタンス数
  max_num_instances: 2 #最大インスタンス数
  cool_down_period_sec: 60 #60刻みで設定、インスタンスがアイドル状態になってから寝るまでの時間
  cpu_utilization:
    target_utilization: 0.8 #CPU使用率が何%になったら次のインスタンスを立てるかの設定、これだと80%になったら次のインスタンスが立つ

./secret.yamlの中身もついでに

env_variables:
  SECRET_KEY_BASE: 'hogehoge'

database.ymlもついでに

production:
  adapter: postgresql
  encoding: unicode
  database: your_databasename
  username: your_user
  password: your_password
  host: your_ip
  port: your_port

ここまでできたら一旦デプロイしてみましょう.
ここでものすごくデプロイに時間がかかるのでこーひーぶれいくーでもしましょう.

gcloud app deploy

とりあえずgcloud app browseでサイトが見えればおk

ついでに独自ドメインも設定〜

GCPコンソールでGAEの設定項目ないのカスタムドメインを追加します. 追加したら以下のような画面になるのでDNSに設定しましょう. f:id:kiitan128:20171215144233p:plain

お名前ならここからへんこうできる https://www.onamae.com/domain/navi/dns_controll/result