返回文章列表
1069 字
· 5 分钟
从 Serverless 到常驻容器:基于 19 天 1,425 次实测的 Next.js 生产部署全景评测
数据周期:2026-08-26 至 2026-09-13(连续 19 天)
评测平台:Cloudflare Pages (Edge) vs Vercel (Serverless/Edge) vs Northflank (微型常驻容器)
测试环境:Next.js App Router 全栈应用,GitHub Actions 每 2 小时定时主动轮询,指标集中入库 Upstash Redis
一、 背景与评测初衷
在现代化前端与全栈部署方案中,Next.js 的托管通常有三大主流流派:
- Serverless 函数流派(代表:Vercel):开箱即用,按需冷启动,弹性伸缩;
- 边缘计算流派(代表:Cloudflare Pages / Workers):全球分布式边缘节点,离用户最近,主打极致首包延迟;
- 轻量常驻容器流派(代表:Northflank / Fly.io / 自建 K8s):常驻微型 Docker 实例,进程不休眠,自带完整的 Node.js 运行时与长连接池。
很多人评测往往只跑一次 wrk 或测一个简单的 Hello World,但这无法反映真实业务在长期生产环境下的网络波动、冷启动衰减、上游长连接损耗以及极端 P95/P99 表现。
为了选出最契合 ETF 投研分析系统(anhe-etf) 的生产基座,我们在三个平台上统一部署了相同的 Next.js 代码,并构建了一套长达 19 天、由 GitHub Actions 每 2 小时主动轮询探测的自动化监控系统。所有测试指标实时写入 Upstash Redis,共沉淀了 1,425 条真实探针数据。
今天,我们把这 19 天跑出来的原始数据彻底解构,分享我们的实测收获与工程思考。
二、 评测环境与实验设计
为了杜绝跨平台 API 转发造成的链路污染,我们遵循了严格的控制变量原则:
- 代码同源:三平台均基于同一份生产代码构建,同源调用各自宿主机的
/api/*。 - 探测端点分级:
- 冷启动与基础探针:
/api/health(仅返回平台标识与时间戳,纯测运行时连通性与冷启动开销); - 中度计算密集型:
/api/drawdown(多标的历史最大回撤计算)与/api/pe-history(估值分位与 PE 回溯); - 复杂上游聚合型:
/api/fund-info(多数据源抓取、JSON 聚合与容错回退)与/api/premium(ETF 折溢价计算)。
- 冷启动与基础探针:
- 抗噪规则:单请求超时上限设为 30 秒;若某一轮中三个平台同时间在同一业务端点全部报错,则判定为上游金融源全局故障(Common-Mode Failure),不计入单平台扣分。
三、 核心实测数据全景
连续 19 天(累计 95 轮探测,每轮 15 个请求,单平台各 475 条采样)的最终汇总统计如下:
| 托管平台 | 资源规格与网络模型 | 成功率 | 健康探针 Avg (P95) | 业务接口 Avg 耗时 | 业务接口 P95 耗时 |
|---|---|---|---|---|---|
| Northflank | 0.2 vCPU / 512 MB 常驻容器 (London) | 99.37% (472/475) | 863 ms (1,596 ms) | 612 ~ 1,026 ms | 1,116 ~ 3,192 ms |
| Cloudflare | Pages + Edge Runtime (全球 Anycast) | 98.74% (469/475) | 515 ms (917 ms) | 479 ~ 2,123 ms | 872 ~ 3,223 ms |
| Vercel | Next.js Serverless / Edge | 98.11% (466/475) | 4,372 ms (5,121 ms) | 999 ~ 2,543 ms | 1,274 ~ 3,894 ms |
各平台端点耗时明细(毫秒)
[Northflank - 常驻 Node.js 容器]
/api/health (健康探针) -> 平均: 863ms | P95: 1596ms | 成功率: 100%
/api/premium (折溢价) -> 平均: 612ms | P95: 1116ms | 成功率: 100%
/api/drawdown (回撤计算) -> 平均: 892ms | P95: 1305ms | 成功率: 100%
/api/pe-history (PE估值) -> 平均: 955ms | P95: 1170ms | 成功率: 100%
/api/fund-info (多源聚合) -> 平均: 1026ms | P95: 3192ms | 成功率: 96.8%
[Cloudflare Pages - Edge 边缘运行时]
/api/health (健康探针) -> 平均: 515ms | P95: 917ms | 成功率: 100%
/api/premium (折溢价) -> 平均: 479ms | P95: 872ms | 成功率: 100%
/api/drawdown (回撤计算) -> 平均: 1393ms | P95: 1740ms | 成功率: 100%
/api/pe-history (PE估值) -> 平均: 1149ms | P95: 1361ms | 成功率: 100%
/api/fund-info (多源聚合) -> 平均: 2123ms | P95: 3223ms | 成功率: 93.7%
[Vercel - Serverless 云函数]
/api/health (健康探针) -> 平均: 4372ms | P95: 5121ms | 成功率: 97.9%
/api/premium (折溢价) -> 平均: 1865ms | P95: 3894ms | 成功率: 100%
/api/pe-history (PE估值) -> 平均: 999ms | P95: 1274ms | 成功率: 100%
/api/drawdown (回撤计算) -> 平均: 1237ms | P95: 1601ms | 成功率: 100%
/api/fund-info (多源聚合) -> 平均: 2543ms | P95: 3589ms | 成功率: 92.6% 标签:
#随笔
评论
无需注册,填写昵称即可评论 · 阅读 — 次