Rails 能撑到百万级甚至更高流量;真正先崩的通常是数据库、任务队列和缺缓存,不是框架本身。Shopify BFCM 2025 应用服务器峰值超过 1.17 亿次请求/分钟,靠分片等架构手段留在 Rails。
常见误判 → 实际原因
「扛不住流量」→ 多半是 N+1
「数据库挂」→ 全打主库、没缓存
「高峰变慢」→ 请求里同步调第三方
「服务器打满」→ 单机、没水平扩展
「该上微服务了」→ 往往是缺索引 / 胖模型
瓶颈顺序与对应招
N+1 →
includes/preload,用 Bullet连接池耗尽 → 算清连接;必要时 PgBouncer
后台队列堆积 → Solid Queue / Sidekiq,按优先级拆队列
单机顶满 → 无状态进程 + 负载均衡
多机后缓存/会话乱 → Solid Cache / Redis
数据库进阶(别跳步) 先查索引与执行计划 → 再读副本 → 再分区 → 最后才分片。
真正硬伤: 单进程吞吐低于 Go/JVM,多花机器、少花工程时间。YJIT 能缩小差距。极低延迟、十万级 WebSocket、重 CPU 更适合拆独立服务,不必整站重写。
动手前先看: 各接口 p95、最慢 SQL 的 EXPLAIN ANALYZE、所有 Puma/Job 的总连接数。