🚀
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クラスタをシンガポールリージョンへ移設しました。
✅ 手順概要
- MongoDB Atlasで新クラスタ作成(リージョン:Asia Pacific / Singapore)
-
mongodump
で旧クラスタからデータエクスポート -
mongorestore
で新クラスタにインポート - Railsアプリの
MONGODB_URI
を新URIに変更 - アプリを再デプロイ 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