MENU

分布式系统

2024 年 10 月 25 日 • 访问: 342 次 • 系统架构设计

分布式系统的理论

CAP & BASE理论详解
一文讲透微服务架构下如何保证事务的一致性
ZooKeeper相关概念总结

Q: 分布式系统的理论有哪些?
A:
CAP理论(2000年加州大学伯克利分校的 Eric Brewer 教授在分布式计算原理研讨会上提出)

  • 一致性(Consistency) : 所有节点访问同一份最新的数据副本。
  • 可用性(Availability): 非故障的节点在合理的时间内返回合理的响应(不是错误或者超时的响应)。
  • 分区容错性(Partition Tolerance): 分布式系统出现网络分区的时候,仍然能够对外提供服务。网络分区指的是因为某些故障导致节点之间不连通了,整个网络就分成了几块区域。

BASE理论(2008年eBay的架构师在ACM上提出的)

  • Basically Available(基本可用)
  • Soft-state(软状态)
  • Eventually Consistent(最终一致性)

BASE 理论本质上是对 CAP 的延伸和补充,更具体地说,是对 CAP 中 AP 方案的一个补充。AP 方案只是在系统发生分区的时候放弃一致性,而不是永远放弃一致性。在分区故障恢复后,系统应该达到最终一致性。

Q: 分布式系统CAP为什么不能同时满足?
A: 这篇文章里解释的非常详细了

https://www.cnblogs.com/techflow/p/12178912.html

首先我们要先弄明白一个误导项,大多数人刚接触CAP理论会认为CAP理论讲的是“CAP三者中只能满足其二,不能三者同时满足”。实际上分布式系统中出现网络分区是必然的,要不然就不会叫分布式系统了,并不存在P不满足的情况,所以实际上CAP理论讨论的是,在满足分区容错性(P)的基础上,一致性(C)和可用性(A)两者不能兼顾。

接着我们举个例子说明一个P满足的条件下,为什么C和A只能满足其一。

ZooKeeper属于CP架构,任何时候访问ZK都可以获得一致性的结果。它的职责就是保证管辖下的服务保持同步和一致,显然不可能放弃一致性。但是在极端情况下,ZK可能会丢弃调一些请求,消费者需要重新请求才能获得结果,即使是舍弃可用性也要保证数据的一致性。例如涉及金融领域的金钱结算,属于强一致的场景,即使是银行系统慢一些,可用性差一些,也需要保证数据的一致性。

我们在过年抢票、抢购手机、抢热门演唱会的票,还有双11秒杀这些活动,回想一下是不是经常在手速飞快锁定订单购买的时候,系统并没有提示没票或者没货,沾沾自喜,可是在等我们输入了验证码,付款的时候才会告知,已经没有票或者没有货了。这就是因为我们在点击购买的时候,数据没有达成一致性,在付款校验的时候才检验出余票不足。这种设计会牺牲一些用户体验,但是可以保证高可用,让用户不至于页面无法访问或者是长时间等待。这种场景就是一种AP场景,即牺牲了一致性,保证了系统的可用性。

Q: 分布式系统的协议和算法有哪些?分布式系统下如何保证某些值的一致性?
A: 分布式系统共识算法Paxos算法。Raft 算法、ZAB 协议、 Fast Paxos 算法都是基于 Paxos 算法改进而来。zk使用的ZAB协议。

分布式项目实践

Q: 有哪些分布式系统会用到的协调服务组件?

  • Zookeeper:ZooKeeper 是一个开源的分布式协调服务,用于实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能
  • Dubbo:阿里巴巴开源的RPC框架,用于解决微服务之间通信和服务发现,提供了微服务治理的能力
返回文章列表 打赏
本页链接的二维码
打赏二维码