博客
关于我
(转载)从分布式一致性谈到CAP理论、BASE理论
阅读量:796 次
发布时间:2023-03-23

本文共 1402 字,大约阅读时间需要 4 分钟。

在计算机科学领域,分布式一致性是一个相当重要且被广泛探索的问题。我们可以通过三个典型的业务场景来理解这一问题。

1. 火车站售票

终端用户是一位经常坐火车的旅行家。他常去车站的售票窗口购买车票,然后在检票口检票。假设某趟开往杭州的火车只剩下最后一张车票,可能有多个售票窗口的用户同时购买同一张车票。如果售票系统没有一致性保障,可能会出现两位乘客都购票成功,但在检票时出现一张车票无效的情况。现代中国铁路售票系统通常已经避免了这种问题,但这个例子揭示了终端用户对系统数据一致性的严格需求:系统必须保证所有客户端看到的数据准确无误。

2. 银行转账

终端用户是一位刚毕业的大学生,第一次拿到工资后想向家里汇款。在银行柜台完成转账后,柜台服务员会告知用户转账将在N个工作日后到账。用户对此并不在意,只希望钱能到账。这个场景体现了用户对系统数据安全的基本需求:无论数据在哪个节点,用户都必须能够确保最终看到的状态是一致的。

3. 网上购物

终端用户是一位网购达人,看到库存量为5的心仪商品,迅速确认购买并提交订单。系统可能会提示库存不足,但用户抱怨自己动作太慢,导致心爱的商品被抢走。实际上,商品详情页显示的库存量并非实时库存,只有在真正下单时才会检查库存。这并不影响用户体验,因为用户只关心最终能否成功收到商品。

问题的解读

从三个例子可以看出,终端用户对数据一致性的需求因系统而异:

  • 火车站售票:需要快速响应且保证所有客户端看到的数据一致。
  • 银行转账:需要对数据安全有严格要求,允许一定延时但最终保证一致。
  • 网上购物:允许系统在某些节点展示非真实数据,但在关键流程上保证数据一致。
  • 分布一致性的提出

    分布式系统中的数据复制带来了一致性挑战。数据复制的主要原因是为了提高可用性和性能,但也引入了延时问题。分布一致性是指在分布式环境下,所有数据副本在更新后都能保持一致状态。

    常见的分布一致性级别包括:

  • 强一致性:用户体验好,但性能影响较大。
  • 弱一致性:不保证读取延时,但在一定时间内保证一致。
  • 最终一致性:是弱一致性的一种,强调最终系统会达到一致状态。
  • 分布式环境的各种问题

    分布式系统面临的挑战包括:

  • 通信异常:网络不可靠,消息丢失和延迟导致系统不稳定。
  • 网络分区:部分节点无法通信,系统可能出现局部小集群。
  • 三态:成功、失败、超时三种状态,增加系统复杂性。
  • 节点故障:服务器宕机或僵死,影响系统可用性。
  • 分布式事务

    分布式事务涉及多个分布式节点的操作,要求在多个节点上同时完成并保持一致性。例如,跨银行转账需要本地银行取款和目标银行存款同时完成,且在任何一个步骤失败时都能回滚到原状态。

    CAP理论

    CAP理论指出,分布式系统无法同时满足一致性、可用性和分区容错性。选择哪些性能优先级决定了系统架构。例如:

    • CA:放弃分区容错性,追求一致性和可用性。
    • AP:放弃一致性,追求可用性和分区容错性。
    • CP:放弃可用性,追求一致性和分区容错性。

    BASE理论

    BASE理论是对CAP理论的延伸,强调基本可用性、软状态和最终一致性。它适用于大规模分布式系统,允许一定的延时和不一致,但最终保证系统达到一致状态。

    总结

    分布式系统的设计需要权衡一致性、可用性和分区容错性。CAP理论和BASE理论为系统提供了理论框架,而实际应用中需要根据业务需求选择合适的架构。无论选择哪种模式,都需要在性能和一致性之间找到平衡点。

    转载地址:http://joqfk.baihongyu.com/

    你可能感兴趣的文章
    Netty源码—5.Pipeline和Handler一
    查看>>
    Netty源码—6.ByteBuf原理二
    查看>>
    Netty源码—7.ByteBuf原理四
    查看>>
    Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
    查看>>
    Network Sniffer and Connection Analyzer
    查看>>
    Nginx Location配置总结
    查看>>
    Nginx 反向代理解决跨域问题
    查看>>
    nginx 后端获取真实ip
    查看>>
    Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    oauth2-shiro 添加 redis 实现版本
    查看>>
    OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140
    查看>>
    Objective-C实现A-Star算法(附完整源码)
    查看>>
    Objective-C实现atoi函数功能(附完整源码)
    查看>>
    Objective-C实现base64加密和base64解密算法(附完整源码)
    查看>>
    Objective-C实现base85 编码算法(附完整源码)
    查看>>
    Objective-C实现basic graphs基本图算法(附完整源码)
    查看>>
    Objective-C实现BCC校验计算(附完整源码)
    查看>>
    Objective-C实现bead sort珠排序算法(附完整源码)
    查看>>
    Objective-C实现BeadSort珠排序算法(附完整源码)
    查看>>