高可用架构需按业务等级分层投入:金融系统需两地三中心强同步,oa系统主从手动切换即可,内容网站可降级保读;接入层用slb+健康检查,应用层无状态快速扩缩,数据层依rpo/rto分级加固;通过缓存、索引、熔断等技术杠杆替代硬件堆砌,并持续故障演练与监控验证。

高可用架构不是堆资源,而是用合理的投入守住业务底线。关键不在“要不要做”,而在“在哪做、做多少、怎么收效”。
先明确业务真实水位线
不同系统对中断的容忍度天差地别:
- 金融支付类系统,停1分钟可能触发监管通报,RTO必须压到30秒内,RPO接近0 → 需两地三中心+强同步复制+自动故障切换
- 企业内部OA或HR系统,停2小时不影响核心营收,99.9%可用性(年停机约8.7小时)已足够 → 主从+手动切换+定期演练即可
- 内容型网站或后台管理端,用户对偶发加载慢有容忍,可接受降级(如关闭评论、隐藏非关键模块)→ 重点保读服务,写链路允许短时不可用
不匹配业务等级的高可用,要么浪费钱,要么留隐患。
分层投入,把钱花在刀刃上
高可用是全链路工程,但资源要按风险权重分配:
-
接入层优先保通路
用云厂商SLB或Nginx+Keepalived实现多节点负载均衡,配合健康检查(HTTP探针+响应时间阈值),确保请求不打到挂掉的机器上。这是成本最低、见效最快的单点消除项。 -
应用层做无状态+快速扩缩
把会话、缓存、配置全部外置(Redis、Config Server),实例本身不存状态。这样一台挂了,新实例30秒内拉起就能接管流量。Kubernetes HPA自动扩缩比买冗余服务器更省钱。 -
数据层按RPO/RTO分级加固
- 日志类、行为埋点等允许丢数据?用异步写+本地缓冲+定时落库,主从延迟容忍度放宽
- 订单、账户等核心数据?必须主从强同步,加半同步复制(semi-sync),必要时上分布式事务中间件(如Seata)
- 不追求零丢失但要求快恢复?用逻辑备份+binlog增量恢复,比物理备库便宜且运维简单
用技术杠杆替代硬件堆砌
很多性能与可用性问题,靠优化比加机器更划算:
- 缓存穿透/雪崩?加布隆过滤器 + 多级缓存(本地Caffeine + Redis集群),减少80%以上数据库压力
- 慢查询拖垮DB?给高频查询加覆盖索引,冷热数据分离,避免大表全量扫描
- 级联故障频发?在服务调用处加熔断(Resilience4j)、限流(Sentinel)、超时控制(Feign timeout配置),让故障止步于单个接口
某中型电商曾用5台Redis代替30台MySQL从库,支撑住双十一流量峰值,成本下降60%,可用性反而从99.9%升至99.99%。
持续验证,避免纸上谈兵
高可用方案上线后必须实测:
- 定期模拟故障:杀进程、断网、删磁盘,看是否自动转移、多久恢复、有没有数据丢失
- 监控关键指标:RTO(从告警到服务恢复)、RPO(实际丢失数据量)、错误率突增点、慢请求占比
- 建立SLO基线:比如“99%的订单查询响应
不复杂但容易忽略。











