返回文章列表
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 的托管通常有三大主流流派:

  1. Serverless 函数流派(代表:Vercel):开箱即用,按需冷启动,弹性伸缩;
  2. 边缘计算流派(代表:Cloudflare Pages / Workers):全球分布式边缘节点,离用户最近,主打极致首包延迟;
  3. 轻量常驻容器流派(代表: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/*。
  • 探测端点分级:
    1. 冷启动与基础探针:/api/health(仅返回平台标识与时间戳,纯测运行时连通性与冷启动开销);
    2. 中度计算密集型:/api/drawdown(多标的历史最大回撤计算)与 /api/pe-history(估值分位与 PE 回溯);
    3. 复杂上游聚合型:/api/fund-info(多数据源抓取、JSON 聚合与容错回退)与 /api/premium(ETF 折溢价计算)。
  • 抗噪规则:单请求超时上限设为 30 秒;若某一轮中三个平台同时间在同一业务端点全部报错,则判定为上游金融源全局故障(Common-Mode Failure),不计入单平台扣分。

三、 核心实测数据全景

连续 19 天(累计 95 轮探测,每轮 15 个请求,单平台各 475 条采样)的最终汇总统计如下:

托管平台资源规格与网络模型成功率健康探针 Avg (P95)业务接口 Avg 耗时业务接口 P95 耗时
Northflank0.2 vCPU / 512 MB 常驻容器 (London)99.37% (472/475)863 ms (1,596 ms)612 ~ 1,026 ms1,116 ~ 3,192 ms
CloudflarePages + Edge Runtime (全球 Anycast)98.74% (469/475)515 ms (917 ms)479 ~ 2,123 ms872 ~ 3,223 ms
VercelNext.js Serverless / Edge98.11% (466/475)4,372 ms (5,121 ms)999 ~ 2,543 ms1,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%
标签: #随笔

评论

无需注册,填写昵称即可评论 阅读 — 次