§ 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 分钟 | 复盘 · 流水线优化 |
§ D12实施时间线
DATA实施时间线周为单位
| 周次 | 里程碑 | 责任角色 | 出口物 |
|---|
| W1 | 无状态化改造 | 后端 | 会话外置 · 文件上 COS · 任务加锁 |
| W2 | 集群搭建 | 运维 | CLB + 双节点 + 健康检查调参完成 |
| W3 | 发布演练 × 3 | SRE + 后端 | 演练计时与回滚命令归档 |
| 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,960 | 02 章延续 |
| 存储/带宽/监控 | ≈ ¥80 | ≈ ¥960 | COS + 带宽 + 监控 |
首年合计 ≈ ¥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 次计时归档 | 通过/不通过 |