🚀

Render×MongoDB AtlasでRailsを運用してわかったパフォーマンス改善のポイント

に公開

はじめに

RailsアプリをRenderで公開し、MongoDBをMongoDB Atlasで運用しています。
今回は、**Render(サーバ:シンガポール)× MongoDB Atlas(クラスタ:アメリカ)**という構成で発生していた重大なパフォーマンス問題と、その改善プロセスをまとめました。


問題:ページ読み込みが10秒以上かかる

初期構成は以下の通りです:

  • Render:Webサーバ(リージョン:Singapore)
  • MongoDB Atlas:クラスタ(リージョン:US)

実際のログ(抜粋)

Completed 200 OK in 15784ms (Views: 344.9ms | MongoDB: 15431.8ms)

MongoDBアクセスに15秒以上かかっており、体感でも明らかに遅延が発生していました。
静的ページ以外は全てMongoDBに依存していたため、サイト全体が重い印象になっていました。


原因:MongoDBとのリージョン間距離

Renderのサーバがあるシンガポールと、MongoDBがあるアメリカとの距離が大きなボトルネックになっていました。
MongoDB Atlasはネットワーク遅延が顕著にパフォーマンスに影響するため、同一リージョンにすることが極めて重要です。


解決策:MongoDBクラスタの移行

以下の手順でMongoDBクラスタをシンガポールリージョンへ移設しました。

✅ 手順概要

  1. MongoDB Atlasで新クラスタ作成(リージョン:Asia Pacific / Singapore)
  2. mongodump で旧クラスタからデータエクスポート
  3. mongorestore で新クラスタにインポート
  4. Railsアプリの MONGODB_URI を新URIに変更
  5. アプリを再デプロイ or 再起動

効果:100倍以上の高速化

改善前(USクラスタ)

MongoDB: 15431.8ms

改善後(Singaporeクラスタ)

MongoDB: 3.4ms, 9.0ms, 1.6ms など

⏱ ビフォーアフターまとめ

アクション Before(US) After(Singapore)
/products/:id 929.4ms 3.4ms〜9.0ms
/products/new 221.8ms 1.6ms
/dashboard(一覧) 約15秒 ※未検証(期待大)

おわりに

Render×MongoDB Atlas構成でRailsアプリを運用する場合、DBとアプリサーバのリージョン一致が極めて重要です。

「なんか遅いな…」と思ったら、MongoDBへの接続時間をログで確認し、必要に応じてリージョン移行を検討しましょう。
Renderは常時起動&シンプルな構成で使いやすいので、MVPや個人開発にもおすすめです。


おまけ:RenderとHerokuの最安プラン比較

項目 Heroku(Eco) Render(Starter)
月額料金 $5 $7
RAM/CPU 512MB / 1x 512MB / 1x
スリープ ✅(30分無操作) ❌(常時起動)
デプロイ git push GitHub連携

関連リンク

Discussion