Judo Battle 门户高负载基础设施
Next.js SSR + Strapi 支撑 15,000 并发连接:三节点架构、Varnish 缓存、PM2 集群与自动 CI/CD。
项目概述
体育门户,前端较重:Next.js SSR、24 个 JS chunk、动态内容与 Strapi CMS。目标是在赛事高峰承受 15,000 并发连接且用户无感知降级。我们将单体拆分为隔离节点,构建智能缓存,并通过压测验证 KPI。
从单体到隔离架构
Nginx、前端、后端和数据库在同一台服务器。Next.js SSR 处理每个请求——15,000 连接时 CPU 100%,Strapi 单线程,管理员会话中断,SSH 暴露于暴力破解。
私有网络 172.16.0.0/28 上三个独立节点:Proxy(Nginx + Varnish,12 GB 缓存)、Frontend(PM2 集群,8 个 Next.js 实例)、Backend(4 个 Strapi 实例)。外部仅见 443 端口。部署、SSL 与日志轮转全自动。
解决方案架构

Proxy 服务器
Nginx + Varnish 自定义 VCL。静态资源缓存 1 年,SEO 页面 10 分钟(含语言 cookie)。RSC、prefetch 和 API 绕过缓存。Grace mode 在后端故障时最多 1 小时提供陈旧页面。
Frontend (Next.js)
PM2 集群模式占满所有 CPU 核心(8 实例)。Cron CI/CD:备份、git pull、build、通过 pm2safe 安全重启。max_memory_restart: 1G,日志 5 MB 轮转。
Backend (Strapi)
4 实例集群,端口 1337–1340(STRAPI_WEB_CONCURRENCY: 2)。管理面板固定 1337 以保持会话,公共 API 负载均衡。systemd 在重启后自动恢复。
关键方案
智能 Varnish 缓存
24 个 JS chunk 与静态资源 immutable 缓存 1 年。SEO 内容(新闻、选手、俱乐部)10 分钟。Next.js 动态与后台绕过缓存,保持交互与认证。
自主 CI/CD
脚本每 5 分钟轮询 GitHub。新提交 → tar.gz 备份 → npm install → build → 安全 PM2 重启。用户无感知更新。
PM2 集群
8 个 Next.js + 4 个 Strapi 实例,内存泄漏自动重启(1G / 2G)。单节点故障不影响服务。
封闭网络
所有服务器默认关闭 SSH(22)。仅通过服务商控制台或临时脚本访问。内网隔离——外部仅见 Proxy。
SSL 自动续期
Proxy 上 Certbot systemd 定时器(每周日)。Backend 上 bash 脚本 standalone 模式更新。RandomizedDelaySec 避免 Let's Encrypt 峰值。
Grace mode 与自愈
后端故障或延迟时 Varnish 再提供缓存页面 1 小时——用户不见 502/504。PM2 与 systemd 自动恢复进程。
压测结果
Apache Bench:15,000 并发连接,100,000 请求,重型 SSR 站点。项目 KPI 达成且有余量。
15,000+
并发连接无故障
100,000
单次运行请求数
≤ 25%
峰值 Proxy CPU
1–3%
Frontend/Backend CPU(缓存生效)
≤ 6 GB
稳态每台机器 RAM
0
用户侧 502/504(grace mode)
瓶颈: 限制来自物理带宽(约 1 Gbps),而非软件。信道饱和后出现 TLS 错误与超时——CPU 与 RAM 仍有大量余量。