黑五大促最高立省 60%
  • 年付套餐首年立省 60%
  • 终身授权立省 45%
剩余
立即领取优惠

开考前就绪:扩容与安全替换 Web 节点——NovaCommerce 第二篇

两个应用池提供了扩容空间。更难的是确认新节点可用、让旧节点排空,并保持服务版本兼容。

作者

Anichur Rahaman

1 个月前5 分钟阅读223 次浏览
开考前就绪:扩容与安全替换 Web 节点——NovaCommerce 第二篇

前端切换 DNS 一小时后,旧服务器仍收到约 36% 的记录流量。团队已经将 TTL 降为 300 秒,并通过 hosts 文件测试新路径。迁移后依然有两个入口,因此保持旧入口可用比宣布 DNS 切换完成更重要。

NovaCommerce 是课程与考试平台的匿名名称。第二篇保留 2026 年 9–10 月的既有案例观察,不是 StoreConsole 基准,也不是本次重新运行的测试。第一篇区分了限流身份、Valkey 连接压力和后端 CPU;本篇跟进应用层。

把需要独立决策的层分开

当时的实现是前端一套负载均衡器与扩容池,后端另一套,DNS 名称原本就已分开。不同节点规格、健康检查和替换策略适合这种划分,但不能据此要求所有应用使用两个均衡器。

后端用标签发现替代固定 Droplet ID 列表,新节点可加入相应池并获得防火墙规则。标签是配置,不是应用就绪或用户授权证据。两台均衡器合计每月 $48 是历史预算,不是现行报价。

计算健康容量,而不是申请的机器

两个池均配置 2–10 节点。前端每节点 2 vCPU/4 GB,nginx 后运行两个 Next.js 容器;后端为 4 vCPU/8 GB,运行 nginx/PHP-FPM。这是该部署的选择。单个 JavaScript 事件循环不代表其他 CPU 空闲,原生操作和工作线程池也会消耗资源。

历史前端测试中,双节点约 356 requests/s,p95 0.05 s,报告错误为零,CPU 55–60%。这支持试用更便宜的共享 CPU,不能证明所有路由、宿主机资源争用或答案写入容量。每节点每月 $28/$56 也只是历史规划输入。

历史配置前端后端
池范围2–10 节点2–10 节点
每节点2 vCPU / 4 GB;2 个 Next.js 容器4 vCPU / 8 GB;PHP-FPM
CPU 目标70%70%,后改为 55%
健康检查边界检查 Next.js 响应仅 nginx;应用就绪另测
其他状态协调公共缓存池外单一固定工作节点

按开考时间预扩容

10 月 5 日 21:17–21:33 的 k6 测试重放 GET 请求:300–450 requests/s,随后约 750 持续六分钟。两层均从两节点扩至三节点。报告的服务器错误和超时为零,但约 4% 请求因共享测试 IP 得到 HTTP 429。合法请求被拒绝仍是业务失败;这不是完整业务流程通过,也没有验证答案的持久写入。

整体 p95 为 132–153 ms,API p95 为 320–705 ms。该案例记录了 5–8 分钟指标延迟,另一轮中后端 CPU 达到 99% 后约七分钟才出现额外节点。这些是特定配置观察,不是供应商统一时间保证。团队在考试前约 45 分钟预扩容并确认健康容量。Kubernetes 仅考虑过,未实施,也不能保证应用瞬间就绪。

安全替换流程:独立池、预扩容、应用就绪、新节点接入、旧节点排空和结果验证。
案例操作的教学图。就绪和排空是证据门槛,历史等待时长并非普遍保证。

先证明接替者能工作,再移除旧节点

首次模板替换出现短暂 503。后续流程等待新节点就绪并加入均衡器,再排空、删除旧节点。历史 30–40 秒等待与当时健康检查设置有关,安全门槛应核实实际路由和活动请求,而非只看计时器。长请求、WebSocket 和供应商触发的缩容需要各自的保护。

后端 /lb-health 仅由 nginx 响应,适合作为存活检查和排空开关,却不能证明 PHP 或数据库业务路径可用。需要有界的应用就绪检查及真实路径探针,同时避免每次健康检查都执行昂贵查询。后一次部署每两秒探测一次,共 219 次、零错误;该样本不能证明所有用户都未受影响。

使用经过测试的不可变镜像,以及兼容的数据库和队列变更。多个 Next.js 实例要协调构建、适用的 action 密钥、缓存失效与版本差异。仅缓存符合条件的公共响应,不能共享学生会话或私有页面。代理头只信任受控入口,转发 IP 不是学生身份或访问权限。

可替换节点仍需要状态与恢复设计

会话、缓存和队列放在 Valkey,上传放在 Spaces,后端日志发往节点之外。24 小时未观察到本地文件写入支持该设计,却不能证明未来所有路由无状态,更不等于随时强删安全。队列与调度仍在单一固定工作节点上,这是已知故障点;集中运行并不能保证业务效果恰好一次。

旧连接与缓存地址仍存在时,旧前端必须保持兼容。300 秒 TTL 不会关闭已有连接,36% 的观察也不能独自解释所有原因。反向修改 DNS 不是即时回滚,更不能形成两个数据库写入者。新写入发生后,恢复必须保留这些数据。

有价值的成果是可重复的就绪与排空流程,而非任何替换都无人察觉的承诺。第三篇将介绍数据库切换,以及清单中遗漏的旧客户端。

系列

一手资料

审核日期:2026年11月6日。Anichur Rahaman,StoreConsole 创建者。历史观察来自既有项目记录;一手资料支持通用说明,不代表本次重新测试生产环境。

作者简介

Anichur Rahaman

继续阅读