← 返回官网架构演进之路 · ARCHITECTURE EVOLUTION · 03/10
02 · 应用与数据分离04 · 多级缓存
阶段 03 · 伸展

应用集群负载均衡架构白皮书

让「一台机器挂了」不再是事故:无状态应用 + 负载均衡的横向扩展起点。

03 / 10阅读 ≈ 11 分钟适用:日活 30,000+ · 对可用性有承诺 · 团队 5-10 人骏瑞轩集团 · 云与数字科技

§ 00概述

应用与数据分离解决了「数据的安全」,但应用仍是单点:一次发布要停机、一台故障要抢修、一次流量高峰只能硬扛。本章引入负载均衡 + 应用集群,让应用层第一次获得「横向」的能力——加机器即扩容,摘节点即发布。

这一阶段的核心工程动作只有一个:把应用改造到无状态。状态外置到 Redis(会话、缓存、锁),文件外置到对象存储,本地不落任何「删了就出事」的数据。无状态化完成后,集群化只是买机器的事。

本章 7 类数据集以「两节点起步」为基线,给出滚动发布、健康检查、会话外置的完整落地方案与成本量级。

§ 01演进定位

集群化解决的是可用性与弹性两个问题。可用性:负载均衡健康检查秒级摘除故障节点,业务无感;弹性:流量高峰加节点、低峰减节点,容量从「预估」变成「调度」。

它同时重塑了发布方式。单机时代的发布是「停机-替换-重启」,集群时代是滚动发布:摘除一个节点-更新-回归-放回流量,再对下一个节点重复。发布从风险事件变成日常动作,这也是后续 CI/CD(09 章)的前提。

代价是复杂度的第一跳:会话要外置、配置要统一、日志要能跨节点汇聚。我们会把这第一跳的所有坑列在「高频翻车点」里。

§ 02技术架构

接入层用云负载均衡(CLB):公网流量入口统一收口,四层/七层转发、健康检查、会话保持按需开启。应用节点 2 台起步,规格可比单机时代减半(4C8G × 2 优于 8C16G × 1,故障域隔离是买不来的)。

会话外置是集群化的技术核心:用户登录态、验证码、限流计数统一存 Redis(云 Redis 标准版双副本),应用节点之间彻底对等。分布式锁用 Redis 实现,先支撑定时任务防重。

健康检查建议七层(HTTP 探针)而非仅四层(端口),探针路径返回应用真实健康度(数据库连通性、关键依赖),避免「端口活着但服务已死」的假在线。日志统一写本地并按小时归档对象存储,为 08 章的集中式日志埋好伏笔。

§ 03实施路径

第一阶段(约 1 周)无状态化改造:会话迁移 Redis、本地文件迁移对象存储、定时任务加分布式锁、配置收敛。这是本阶段唯一有工程量的部分,预留回归测试时间。

第二阶段(1 周)集群搭建:CLB 创建与转发规则、2 个应用节点接入、健康检查灰度调参(间隔、阈值、探针路径)、会话保持策略验证。

第三阶段(1 周)发布演练:滚动发布全流程演练 3 次,记录单节点更新耗时;人为击杀节点验证摘除速度与用户体验;建立「发布窗口-观察指标-回滚命令」标准动作。总周期 2-3 周。

§ 04客户价值与适用判断

该上:业务对可用性有了硬承诺(无法接受分钟级停机)、发布频繁且都挤在深夜、或流量有明显峰谷需要弹性。

成本视角:从分离架构的约 ¥670 升至约 ¥1,100-1,300/月。多花的钱买的是三件事:故障从事故变成指标(秒级摘除)、发布从停机变成滚动、容量从估算变成加减机器。

可以先缓:纯内部系统、或流量极低且发布极少(月 1-2 次)的业务,集群的日常收益有限。但如果发布已让团队恐惧,不要犹豫——集群化的回报立刻兑现。

§ D01组件与选型清单

DATA应用集群与负载均衡 · 标准组件栈两节点起步
层级组件选型建议职责与要点
接入负载均衡 CLB七层 · 按流量计费统一入口,健康检查秒级摘除故障节点
应用云服务器 CVM × 2通用型 4C8G × 2跨可用区部署,规格相同且配置漂移受控
会话/缓存云 Redis 标准版2GB 双副本会话、验证码、限流计数与分布式锁
文件对象存储 COS沿用 02 章上传与静态文件,节点本地零持久化
发布滚动发布脚本摘除-更新-回归-放回全程至少 1 节点在线,回滚即重跑上一版本
日志本地 + COS 归档按小时归档跨节点日志统一命名规范,便于追溯
监控云监控 + CLB 指标节点数/后端响应/5xx「在线节点数」本身就是核心告警项

两节点必须跨可用区:同城双 AZ 对用户无感,却把机房级故障挡在门外。

§ D02成本测算数据集

DATA成本测算示例(两节点集群 · 月度)月度 · CNY
项目规格月成本说明
应用节点 × 2通用型 4C8G · 包年≈ ¥520跨可用区,故障域隔离
负载均衡CLB 七层≈ ¥40 + 流量实例费 + LCU/流量,随量增长
Redis标准版 2GB 双副本≈ ¥160会话与热点数据外置
对象存储标准 100GB + 流量≈ ¥20沿用 02 章
公网带宽8Mbps · 按流量≈ ¥60入口统一走 CLB
数据库高可用 2C4G≈ ¥330沿用 02 章
月均合计 ≈ ¥1,130 · 两节点冗余运行

Redis 与数据库是本阶段的「公共设施」,后续章节只增不改;应用节点费用随流量线性,可随时加减。

§ D03关键指标基准

DATA可用性与体验基线SLO 参考
指标分离架构基线本阶段目标行业良好
应用层可用性99.5%99.9%(节点级冗余)99.99%+
故障节点摘除无(单点即停)< 15 秒自动摘除< 5 秒
发布方式停机发布滚动发布 · 零停机自动化 + 灰度
单节点发布时长—< 10 分钟/节点< 3 分钟
扩容方式升配(停机)加节点(在线)自动弹性(10 章)

§ D04演进触发信号

DATA什么时候必须走向下一阶段任一命中即评估
触发信号判定阈值演进方向
数据库读压力读 QPS > 500 持续多级缓存(04)与只读实例(05)
静态资源带宽占比高静态流量 > 40% 总带宽CDN + 反向代理(06)
接口响应劣化P95 > 800ms 且 DB 是瓶颈缓存与 SQL 治理(04/05)
业务域耦合拖慢迭代单仓库多人冲突、回归范围失控业务拆分(08)
节点数超过 5 台手工管理配置开始出错容器化(10)统一编排

§ D05上线检查清单

无状态验证随机击杀任一节点,用户会话不丢、请求零失败
跨可用区两个应用节点分布不同 AZ,CLB 开启跨 AZ 分流
健康检查真实探针覆盖数据库与关键依赖连通性,而非仅端口探活
滚动发布演练完整演练 3 次并计时,回滚命令写在预案第一行
Redis 高可用标准版双副本起步,故障切换不丢会话
配置一致两节点配置来源于同一份配置源,禁止手工单点修改

§ D06高频翻车点

假无状态本地还残留文件上传或内存缓存,扩容后「时灵时不灵」
会话保持滥用依赖 CLB 会话保持而非 Redis 外置,摘节点即批量掉登录
健康检查形同虚设只探端口不探依赖,数据库断了节点仍「健康」接流量
滚动发布不回归更新完不验证直接放流量,故障被滚动复制到全部节点
定时任务重复执行多节点并跑定时任务无分布式锁,数据被重复处理

§ D07常见问答

DATA应用集群与负载均衡 · 问答数据集4 组
问题答案
两节点和三节点怎么选?可用性两节点已达标(N+0 冗余);若发布期间也要求满容量承接峰值,则按「峰值节点数 + 1」配置,通常业务早期两节点够用。
会话外置改造量大吗?主流框架(Spring Session、PHP/Node 会话驱动)都有现成适配,通常是配置级改动。真正的工程量在排查「藏在内存里的状态」:本地缓存、静态变量、临时文件。
负载均衡会不会成为新单点?云 CLB 本身是集群化托管服务,接入层可用性由云 SLA 保障(通常 99.95%+),配合 DNS 多记录可进一步消除顾虑。
节点规格和数量怎么平衡?「多而小」优于「少而大」:故障域更小、发布影响面更窄、利用率更均衡。单节点不低于 2C4G,避免基础设施开销占比过高。

§ D8角色分工数据集

DATA角色分工数据集本阶段人员配置
角色核心职责投入度备注
后端 × 2无状态化改造 · 滚动发布 · 灰度验证80%改造期双后端并行
运维CLB 配置 · 健康检查 · 跨 AZ 部署50%发布体系主责
SRE(兼)发布演练 · 预案 · 发布指标看板30%演练记录是验收件
业务发布窗口确认 · 回退决策授权10%回退决策预先授权

§ D9风险登记册

DATA风险登记册概率 × 影响
风险概率影响缓解措施
本地状态残留导致扩容异常高严重击杀节点测试作为无状态化验收标准
健康检查误判(假在线)中严重七层探针覆盖数据库与关键依赖
滚动发布故障被复制到全集群中严重单节点回归通过再放行下一节点
定时任务多节点重复执行中中Redis 分布式锁 + 幂等设计

§ D10监控告警清单

DATA监控告警清单阈值即责任
监控对象指标告警阈值响应动作
集群在线节点数< 预期副本数电话 · 立即定位掉线节点
应用HTTP 5xx 率> 1%短信 · 结合发布记录定位
CLB后端响应 P95> 800ms工单 · 慢接口分析
Redis内存使用率> 70%工单 · 扩容或淘汰策略复核
发布单节点发布时长> 15 分钟复盘 · 流水线优化

§ D11工具链选型

DATA工具链选型发布与运维
环节推荐备选选择理由
发布滚动发布脚本蓝绿 / Ansible双节点下滚动最经济
会话Spring Session / 框架适配自研 Token框架级适配改造量最小
分布式锁Redis SETNX 封装ZooKeeper已有 Redis,不新增组件
日志归档本地轮转 + COS 归档Loki09 章前先用归档过渡

§ D12实施时间线

DATA实施时间线周为单位
周次里程碑责任角色出口物
W1无状态化改造后端会话外置 · 文件上 COS · 任务加锁
W2集群搭建运维CLB + 双节点 + 健康检查调参完成
W3发布演练 × 3SRE + 后端演练计时与回滚命令归档
W4故障演练验收全员击杀节点用户无感记录

§ D13SLA 与容灾基线

DATASLA 与容灾基线对内承诺
指标基线承诺度量方式未达标处置
应用层可用性99.9%拨测 + CLB 指标跨 AZ 复查 + 节点规格复核
故障摘除< 15 秒击杀演练实测健康检查参数调优
发布停机0 分钟发布记录发布流程回炉
容量冗余峰值 60% 内压测报告加节点或升配

§ D14应急预案

DATA应急预案一页纸预案
故障场景典型现象处置步骤升级路径
单节点宕机CLB 摘除 · 流量集中① 确认摘除生效 ② 排查宕机原因 ③ 修复或拉起新节点双节点同时异常 → 电话升级
发布后大面积 5xx版本问题① 立即停止滚动 ② 回滚已更新节点 ③ 归档现场波及全量 → 复盘并冻结发布
Redis 故障会话批量丢失① 切备用实例 ② 用户重新登录兜底文案 ③ 数据核对数据丢失 → 评估影响面并公告
CLB 异常入口全部超时① 检查监听与健康状态 ② 联系云厂商 ③ DNS 临时切源站入口级故障 → P1 + 公告

§ D15首年成本明细

DATA首年成本明细CNY
项目月成本年成本备注
应用节点 × 2(4C8G)≈ ¥520≈ ¥6,240跨可用区
CLB 实例与流量≈ ¥60≈ ¥720随流量增长
Redis 标准版 2G≈ ¥160≈ ¥1,920会话与锁
数据库高可用(沿用)≈ ¥330≈ ¥3,96002 章延续
存储/带宽/监控≈ ¥80≈ ¥960COS + 带宽 + 监控

首年合计 ≈ ¥13,800。冗余与发布能力是本阶段花钱买到的核心资产。

§ D16团队能力要求

DATA团队能力要求按需补齐
能力项要求级别如何补齐
负载均衡与健康检查必须CLB 实操 + 演练计时
无状态化设计必须击杀测试驱动改造
发布工程必须三次发布演练考核
故障演练文化建议月度演练轮值

§ D17关键决策速查(ADR)

DATA关键决策速查(ADR)本阶段 4 个决策
决策备选方案结论理由
节点规格1 台大机 vs 2 台小机2 小机:故障域隔离不可购买
会话管理CLB 会话保持 vs Redis 外置Redis:摘节点不掉登录
健康检查四层 vs 七层七层:探真实依赖而非端口
发布方式停机 vs 滚动滚动:演练三次后零停机

§ D18高频面试题

DATA高频面试题本阶段 4 题
问题考察点优秀回答特征
如何验证应用真的无状态?工程方法随机击杀节点作为验收标准
滚动发布怎么设计?发布工程摘除-更新-回归-放回 + 回滚第一行
健康检查误判怎么办?可观测性七层探针覆盖关键依赖
定时任务多实例重复执行怎么办?分布式基础分布式锁 + 幂等双保险

§ D19命令与操作速查

DATA命令与操作速查集群运维
场景命令/操作说明
节点摘除CLB 控制台/权重置零摘除后观察流量再操作
会话验证杀节点后检查登录态无状态化验收手段
锁排查redis-cli 查看锁 key锁超时与续期配置
日志归档定时任务 → COS命名含节点标识

§ D20采购与商务要点

DATA采购与商务要点本阶段采购项
采购项询价要点商务注意
双节点包年跨 AZ 是否同价两台错开可用区
CLB实例费 + LCU/流量口径大促流量费预估
Redis 标准版主备切换 SLA内存规格留 40% 余量

§ D21阶段 KPI 卡

DATA阶段 KPI 卡验收口径
KPI口径目标
故障摘除击杀演练实测< 15 秒
发布停机发布记录0 分钟
单节点发布演练计时< 10 分钟
月成本账单合计≤ ¥1,400

§ D22交接清单

DATA交接清单换人不换知识
交接项载体验收
发布脚本与预案Git + Wiki新人独立完成一次滚动发布
演练记录Wiki三次演练计时可查
CLB 配置导出配置库配置可重建
值班表与升级链工单系统P1 电话打通验证

§ D23演进检查点评审

DATA演进检查点评审走向 04 章前
检查项达标标准结果
击杀测试通过随机杀节点用户无感通过/不通过
缓存候选清单读接口画像完成并评审通过/不通过
Redis 双副本故障切换演练通过通过/不通过
发布演练滚动发布 3 次计时归档通过/不通过

§ →继续演进