Cloudflare前提のRailsは月$3.89でもこれだけ捌ける

に公開

構造を先に置く。Cloudflare をフロントに据えた、DB 接続のない Rails。インスタンスは shared-cpu-2x@512MB を 1 台、月額 $3.89 程度。ここで何が起きているかを測る。

計測条件

  • ツール: ab
  • 対象: https://aileron.cc/ の GET /
  • リクエスト数: 1000
  • 同時接続: 1 / 5 / 10 / 20(Keep-Alive も試行)
  • Cloudflare 経由(オリジン直ではない)
  • 失敗リクエスト: 0

結果(1000リクエスト平均)

concurrency req/s mean (ms) p90 (ms) 備考
1 13.0 76.8 146 単発レイテンシの素顔
5 57.5 87.0 157 体感レスポンスは 70ms 前後
10 85.8 116.5 174 スループットはまだ伸びる
20 111.9 178.7 229 p95 242ms、上限が見え始める
10 (KA) 93.3 107.2 165 Cloudflare 側で Keep-Alive は実質無効
20 (KA) 111.6 179.3 220 同上で KA=0 件

Document Length は 1153 bytes。TLS は Cloudflare 側の終端。Keep-Alive は 0 件なので、CDN の接続管理に委ねていると読める。

読み解き

処理の重さがオリジンに届く前に、Cloudflare が静的応答をキャッシュしている。Rails 自体は DB なし・薄いルーティングのみ。結果として、shared-cpu-2x@512MB でも 100 req/s 超を維持し、p90 も 200ms 前後で収まる。月 $3.89 のコストでこの粒度なら、簡易な API や Landing のフロントには十分な帯域があると見える。

余白

  • オリジン直の URL でも同条件を 1 セット回すと、CDN の効果を分離できる。
  • 時間帯・ロケーションを変えて再計測すれば、ばらつきの幅を示せる。
  • 動的処理を足す場合は、まずレスポンスボディをキャッシュ可能に保ち、キャッシュヒット率のログを観察するとよいと思う。
GitHubで編集を提案

Discussion