分布式系统的理论
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: 这篇文章里解释的非常详细了
首先我们要先弄明白一个误导项,大多数人刚接触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框架,用于解决微服务之间通信和服务发现,提供了微服务治理的能力
本博客文章除特别声明外,均可自由转载与引用,转载请标注原文出处:http://www.yelbee.top/index.php/archives/236/