访问高峰时一台云服务器变慢,第一反应常是“再买一台”。但如果慢在数据库锁或共享磁盘,两台应用机并不会自动把瓶颈变成两倍容量。反过来,即使单机性能充足,只要业务不能接受一次实例故障导致整站中断,也有理由评估双实例和负载均衡。本文用可测的并发与故障演练,判断该先升配、先优化,还是增加云服务器。
适用场景和先决条件
适合准备购买第二台云服务器、把单机网站改成多可用区部署,或续费时犹豫是升级 CPU/内存还是采购负载均衡的业务。先明确两个目标:高峰时的响应时间/错误率 SLO,以及允许单实例故障造成多长时间中断。容量问题与可用性问题不同,可能需要不同方案。
先观察高峰的请求速率、并发连接、CPU、内存、磁盘 IO、网络吞吐、应用队列、数据库等待和 p95/p99 延迟。只看平均 CPU 容易漏掉单核热点、短时峰值和下游锁等待。若业务还没有可重复的负载测试与故障演练,先不要把“新增实例”写成可用性保证。
判断该升级单机还是横向扩容
- 应用 CPU/内存持续到顶,数据库与外部依赖有余量:若短期容量缺口、应用尚有本地状态,先评估升配;若高峰持续增长且应用可无状态运行,再比较双机扩容。
- CPU 不高但延迟升高,数据库锁、磁盘或调用链排队明显:先解决下游瓶颈,盲目加应用机可能增加数据库连接和压力。
- 性能足够但故障中断不可接受:重点评估跨故障域的两个实例、健康检查、流量切换和数据库/存储的冗余。两台实例放在同一故障域并不能覆盖该故障域失效。
- 流量突发且能自动扩缩:评估负载均衡 + 自动伸缩,但要验证实例启动、预热、健康检查和扩容速度能否赶上突发。
扩容预算不能只算第二台云服务器。还要计入负载均衡、跨可用区流量、共享会话/缓存、数据库容量、日志监控和备份。实际价格与规格以目标云厂商、地域和计费方式为准。
两台云服务器真正可用前,要处理四种状态
- 会话:若登录态仅在本机内存,用户请求换节点后可能掉线。优先使用可共享、可过期的会话存储或无状态令牌;“会话粘滞”可缓解问题,但不能替代故障切换设计。
- 用户上传文件:本地盘各存一份会造成两节点看到不同文件。使用共享或对象存储,并验证权限、回源和备份。
- 数据库:应用双机仍可能共用单库,数据库会成为新的单点。明确数据库的备份、主备/高可用方案和写入一致性边界。
- 定时任务与消息消费:两节点同时执行可能重复扣费或重复发送;需要锁、幂等或独立 worker。
负载均衡器要有真实健康检查路径:它应测试应用及关键依赖,不能只返回一个永远为 200 的静态页面;同时也要防止依赖短暂抖动让所有实例被判为不健康。以 AWS 应用负载均衡健康检查说明为例,目标进入流量池需要通过检查,实际阈值和异常行为需按所选产品核对。
可执行的部署与验证步骤
先把当前应用镜像或部署包在第二台云服务器复现,保证版本、配置、证书、访问权限一致;两台实例尽量通过私网访问同一受控数据库。只开放负载均衡器到应用端口,管理端口不应对公网裸露。
若用 Nginx 自建入口,以下是两台示例内网地址的最小 upstream 片段,需按自身环境调整。它展示请求分配和被动失败标记;不能单凭这段配置宣称入口或数据库已高可用。生产中还要配置 TLS、超时、真实客户端 IP 和入口自身冗余。
upstream app_nodes { least_conn; server 10.0.1.10:8080 max_fails=3 fail_timeout=30s; server 10.0.2.10:8080 max_fails=3 fail_timeout=30s; } server { listen 80; server_name example.com; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://app_nodes; } }配置语义以 NGINX 官方 upstream 文档为准。对有副作用的写请求,不要假设失败后一定能安全自动重试;要在应用侧设计幂等与去重。
上线前分别验证两台后端的/health、登录、读取、写入和上传,再验证入口:
curl--fail--show-error http://10.0.1.10:8080/healthcurl--fail--show-error http://10.0.2.10:8080/healthsudonginx-tcurl--fail--show-error-H'Host: example.com'http://LB_PRIVATE_IP/health最后在演练窗口只摘除一台测试后端,观察健康检查剔除、正在处理的请求、会话、上传、错误率和恢复时间;随后把该节点加回并确认流量正常。若两台后端同时不可用、共享数据库失效或入口故障,仍须有单独的回滚和恢复方案。
常见误区
- 用“买两台”代替瓶颈分析,结果数据库或磁盘更快到顶。
- 把第二台放同一故障域,却宣称具备跨区容灾。
- 忽略本地会话、上传目录、定时任务和支付回调的重复执行。
- 健康检查只看端口存活,没有覆盖关键业务依赖。
- 未演练节点摘除与恢复,就把“有负载均衡器”当作零中断。
- 升级应用服务器规格后不复测业务 p95、错误率和实际成本。
采购前的最终判断
若瓶颈在单机 CPU/内存且业务允许短时中断,先评估合适规格的云服务器升配;若核心需求是容量弹性或单机故障切换,则按峰值负载、会话/文件状态、数据库能力、故障域和可接受恢复时间规划两台或多台云服务器及负载均衡。先做小规模压测与故障演练,再决定购买配置和带宽,能避免为未解决的瓶颈持续付费。