我与DeepSeek读《大型网站技术架构》(5)下

万无一失:网站的高可用架构

4. 高可用的数据

保证数据存储高可用的手段主要是数据备份和失效转移机制。

缓存服务的高可用争论

1. 缓存服务需要实现高可用

核心论据

  • 避免雪崩效应:缓存宕机导致数据库瞬时压力骤增,可能引发级联故障。
  • 提升用户体验:缓存直接支撑高频访问,其不可用会导致延迟飙升、功能异常。
  • 数据热备价值:部分缓存数据(如会话信息)可能无持久化备份,丢失后影响业务连续性。

适用场景

  • 高并发实时系统:如电商秒杀、社交平台热点数据。
  • 缓存即核心数据源:如仅缓存中存在计算结果(无持久化存储)。
  • 高可用要求严苛:金融、支付等对稳定性要求极高的领域。

技术方案

  • Redis Cluster:自动分片、主从切换,保障分布式高可用。
  • 主从+Sentinel:主节点故障时自动切换从节点,需配合代理(如Twemproxy)。

2. 缓存服务无需高可用,通过其他手段解决

核心论据

  • 缓存数据可重建:缓存数据通常源自持久化存储,宕机后可通过回源加载恢复。
  • 成本与复杂度:高可用设计增加运维复杂度及硬件成本(如多副本、集群管理)。
  • 降级容灾替代:通过限流、熔断、静态降级页面对冲缓存失效影响。

适用场景

  • 低频或非关键业务:如内部管理系统、数据分析后台。
  • 资源有限的中小系统:初期可接受短暂服务降级以降低架构复杂度。
  • 冷数据缓存:数据访问频率低,重建成本可控。

技术方案

  • 熔断降级:Hystrix/Sentinel在缓存不可用时触发限流或返回默认值。
  • 预热与快速恢复:脚本定期预热热点数据,结合容器化实现缓存节点快速重启。

3. 决策框架与平衡建议
1. 评估业务影响
  • 关键性问题:缓存失效是否会导致核心业务不可用或用户体验严重下降?
    • → 必须实现高可用(如电商购物车、实时竞价系统)。
    • → 可依赖降级策略(如新闻推荐列表展示兜底数据)。
2. 权衡成本与收益
  • 高可用成本:集群节点数翻倍、运维复杂度上升。
  • 降级成本:开发容灾逻辑、可能损失部分用户体验。

示例

  • 小型博客站点:单节点Redis + 定期备份 + 降级页面 → 低成本可行。
  • 在线支付系统:Redis Cluster + 多机房部署 → 高可用必要。
3. 混合策略
  • 分层缓存
    • 本地缓存(如Caffeine):应对短暂故障,减少回源压力。
    • 分布式缓存(如Redis):主集群高可用,冷备集群待命。
  • 渐进式优化:初期降级容灾,随业务增长逐步升级为高可用架构。

4. 总结
  • 选择高可用:适用于缓存失效直接威胁系统存活的场景,需投入资源保障稳定性。
  • 选择容灾降级:适用于可容忍短暂中断或资源受限的场景,通过弹性设计弥补缓存不可用。
  • 最终建议
    • 核心系统必选高可用:缓存作为性能屏障,需避免单点故障引发全局瘫痪。
    • 非核心系统灵活权衡:结合业务容忍度、成本及技术债务综合决策。
    • 结论:两种观点并非对立,而是适用于不同场景的互补策略。实际架构中,应基于业务优先级和风险承受能力选择合适方案,必要时采用混合模式平衡可用性与成本。

CAP理论

在分布式系统(比如多个服务器组成的系统)中,有三个核心需求:数据一致性服务可用性网络容错性。但就像“鱼与熊掌不可兼得”,你最多只能同时满足其中两个


CAP 分别代表什么?
  1. C(Consistency)一致性

    • 通俗解释:所有用户看到的数据都是“最新的”。
    • 例子:你在淘宝买东西,不管用手机、电脑还是平板看购物车,里面的商品数量必须一模一样,没有延迟。
  2. A(Availability)可用性

    • 通俗解释:系统永远“有求必应”,不会卡死或报错。
    • 例子:双十一抢购时,不管有多少人访问,淘宝页面都能正常加载,不会显示“系统崩溃”。
  3. P(Partition Tolerance)分区容错性

    • 通俗解释:系统即使“断网”也能继续干活。
    • 例子:比如微信的聊天记录,即使你的手机暂时没信号,恢复网络后消息还能正常发送,不会丢数据。

为什么不能全都要?

想象一个场景:你和朋友用共享文档写同一份报告

  • 如果网络突然断开(触发 P)
    • 选 C(一致性) + P:系统会禁止你们继续编辑,保证所有人看到的内容一致,但你们暂时无法工作(牺牲可用性)。
    • 选 A(可用性) + P:允许你们各自继续编辑,但网络恢复后可能会出现冲突(比如两个人改了同一段话,牺牲一致性)。

这就是 CAP 的“二选一”困境:当网络出问题时(P 必须面对),你只能在 C 和 A 中保一个。


现实中的例子
  1. 银行系统(CP)

    • 保证一致性和容错性:转账时所有账户必须立刻同步金额,如果某台服务器断网,系统会暂停服务,避免你看到错误的余额。
    • 代价:转账时偶尔会提示“系统繁忙,请稍后再试”(牺牲了可用性)。
  2. 社交平台(AP)

    • 保证可用性和容错性:发朋友圈时即使部分服务器断网,你也能正常发送,但可能延迟几秒别人才能看到(牺牲了一致性)。
    • 代价:偶尔看到“暂时无法加载”(但很快恢复)。

总结

CAP 理论告诉我们:设计系统时,没有“完美方案”,得根据业务需求做取舍。

  • 要数据绝对正确?选 CP(如银行)。
  • 要服务永不卡死?选 AP(如微博)。
  • 想忽略网络问题?不可能!(因为现实世界网络总会出问题,所以 P 必须选)。

数据备份

1. 同步热备(Synchronous Replication)
核心原理
  • 强一致性:主节点必须在数据写入本地后,立即同步到所有备节点并收到确认,才向客户端返回成功。
  • 实时性:主备数据严格一致,无延迟。
工作流程
  1. 客户端向主节点写入数据。
  2. 主节点将数据同步到所有备节点。
  3. 所有备节点返回确认后,主节点向客户端返回写入成功。
优点
  • 零数据丢失:主节点故障时,备节点数据与主节点完全一致。
  • 高一致性:适合对数据一致性要求严苛的场景(如金融交易)。
缺点
  • 写入延迟高:受网络延迟和备节点性能影响,吞吐量降低。
  • 可用性风险:若备节点宕机或网络中断,主节点将阻塞写入操作。
适用场景
  • 银行核心交易系统(如转账操作)。
  • 强一致性的分布式数据库(如 Google Spanner、TiDB)。

2. 异步热备(Asynchronous Replication)
核心原理
  • 最终一致性:主节点先向客户端返回成功,再异步将数据同步到备节点。
  • 容忍延迟:主备数据存在短暂不一致窗口期。
工作流程
  1. 客户端向主节点写入数据。
  2. 主节点立即向客户端返回成功。
  3. 主节点在后台异步将数据同步到备节点。
优点
  • 高吞吐量:写入性能不受备节点或网络影响。
  • 高可用性:备节点故障不影响主节点正常服务。
缺点
  • 数据丢失风险:主节点故障时,未同步的近期数据可能丢失。
  • 一致性弱:备节点数据可能短暂落后。
适用场景
  • 日志采集、消息队列(如 Kafka、RocketMQ)。
  • 社交网络、电商订单等允许最终一致性的场景。

对比总结
维度同步热备异步热备
一致性强一致性(数据实时一致)最终一致性(数据短暂不一致)
性能写入延迟高,吞吐量低写入延迟低,吞吐量高
容灾能力零数据丢失,但可能服务中断可能丢失部分数据,但服务持续可用
网络依赖高度依赖网络稳定性容忍网络波动
典型应用金融交易、核心数据库日志系统、高并发写场景

混合策略(Semi-Sync)
  • 折中方案:主节点等待至少一个备节点确认后返回成功,兼顾一定一致性和性能。
  • 应用案例:MySQL 半同步复制(Semi-Synchronous Replication)。

选择建议
  • 选同步热备:当数据一致性优先级高于性能(如资金交易)。

  • 选异步热备:当高吞吐量和可用性更重要(如社交平台发帖)。

  • 混合使用:核心业务同步,非核心业务异步(如电商系统:支付用同步,商品浏览用异步)。

  • 核心原则

  • 技术方案

    • 数据冗余
      • 数据库主从复制(MySQL Replication)。
      • 分布式存储多副本(如HDFS、Redis Cluster)。
    • 数据恢复
      • 实时备份(Binlog同步)。
      • 定期全量备份(如XtraBackup)。
    • 数据分片:分库分表(如MyCAT)避免单点容量瓶颈。
  • 容灾设计:异地多活(如支付宝三地五中心架构)。


5. 高可用网站的软件质量保证

  • 核心方法:通过工程化手段降低软件缺陷风险。
  • 关键实践
    • 自动化测试:单元测试、压力测试(JMeter)、混沌测试(Chaos Engineering)。
    • 灰度发布:逐步上线新功能,监控异常后快速回滚。
    • 代码审查:通过Pull Request机制保障代码质量。
  • 工具链:持续集成(Jenkins)、代码扫描(SonarQube)。

6. 网站运行监控

  • 监控目标:实时感知系统状态,提前发现潜在风险。
  • 监控体系
    • 基础监控:CPU、内存、磁盘、网络(如Zabbix)。
    • 应用监控:QPS、RT、错误率(如Prometheus + Grafana)。
    • 业务监控:订单成功率、支付耗时(如ELK日志分析)。
  • 告警机制:阈值触发告警(如短信、邮件),结合根因分析(RCA)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

递归书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值