开发者学堂课程【高校精品课-西安交通大学-数据库理论与技术:第四课】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/12/detail/15860
第四课(一)
内容介绍
一、CAP 定理
二、CAP 定理的起源
三、CAP 定理:鱼和熊掌不可兼得
四、CAP 定理:示例
五、CAP 定理:选择放弃
六、服务器一致性
七、一致性哈希
一、CAP 定理
CAP 定理(Brewer's CAP Theorem)是分布式数据管理系统的理论基础之一,最初是由 Eric Brewer 教授(University of California, Berkeley)提出的有关分布式数据共享系统性质一个猜想,后来 Seth Gilbert 和 Nancy Lynch 证明了其正确性,因此成为定理。这个证明和数学定理不太一样,不是严格的数学定理,但应用了数学定理的方式。
二、CAP 定理的起源
1985年,Lynch 证明了异步通信中不存在任何一致性的分布式算法,即 FLP 原理,且这是个否定的结果。2000年,Brewer 教授在提出一致性、可用性和分区容错性 CAP 三者无法在分布式系统中被同时满足,这仅仅是个猜想,并没有证明。2002年,Lynch 与其他人证明了 Brewer 猜想,从而把CAP上升为-一个定理。Now,争论与质疑:CA与CP中C定义不同,具体看一致性如何理解;不适应传统的数据库事务,传统数据库认为 CA 都能保证;分区容错概念横糊等,直观上分区容错即断网。一个分布式系统不可能同时满足一致性(C) ,可用性(A)和分区容错性(P)这三个需求,三个要素中最多只能同时满足两点。三者不可兼顾。一致性(Consistency): 在分布式系统中的所有数据备份,在同一时刻是否具有同样的值。(等同于所有节点访问同一份最新的数据副本)。如果具有同样的值,则为一致性。可用性(Availability):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(每一个操作总是能够在定的时间内返回结果)。分区容忍性(Partition tolerance):允许节点之间丢失任意多的消息,即网断了,当网络分区发生时,节点之间的消息可能会完全丢失。
如果不断网,则 C 和 A 都能满足,数据保证一致,还能保证可用性。但是网一断,便无法保证。例如,学校的招标招查收换系统,当时用的荒电卡,后勤部门担心一个问题:学校并校,新晋校区有个食堂,还有医学校区有食堂,卡是通用的。有两个并排的服务器,南区有一个基站,买了卡,卡里充了100元,消费时刷卡,卡会根据消费额扣除,比如今天吃饭消费5元,便从卡中扣5元。后勤部们担心这笔钱,如果网络不通则会发生什么?在网通的情况下,吃饭消费了100元,则数据会统计到南区,那边的服务器也会变成零,则去南区便无法吃饭消费。如果断网,在这个区的钱消费完,余额变为0,但另一个区的100元还在,意味着在此区消费完毕后再火速到另一个区,在另一个区再刷一遍卡,这是双花问题。因此要首先避免双花问题,或者票不能重复订两次。什么是一致性?
比如卡里余额在两台服务器上,同一时刻的值一样。如果断网便无法保证一致性,即这边钱消费完毕,但因为网不通,所以数据无法传输到另一边,所以另一边还是100元,这便是不一致。此时有一个问题,到底保证是一致性还是可用性。
所以食堂应保证可用性,不能说因为网断了,所以食堂不开饭了;但可以利用数据不一致来获取利益,但会损害他人的利益。网不断两个都能保证,网一断,只能在一致性和可用性中选一个。比如银行系统,则一致性更重要,网断了,则不让取钱。
网断了,需要保证数据一致性,如果不一致,在一个地方把钱取光,则可以去另一个 ATM 机再取,那么是不允许的,因此需保证一致性,降低可用性。相反,食堂便需牺牲一致性。两个都保,需要网不断,可以使网更坚固,多条电路,降低断网几率,或者也可以不用网,用集中系统,便不会出现 CAP 的问题。
三、CAP 定理:鱼和熊掌不可兼得
在分布式系统中,CAP可以同时得到吗?鱼与熊掌可以兼得吗?答案: NO!一个分布式系统最多只能同时满足两个。Brewer's CAP "Theorem":You can have at most two of these three properties for any system. CAP定理告诉我们:在设计分布式数据共享系统时,熊掌与鱼不可兼得也!因此,架构师不要将精力浪费在设计能满足三者的完美分布式系统,而是应该进行取舍。例如,如果关注的是一致性(C),比如银行对一致性要求非常高,不能容忍不一致性,因为不一致性会造成钱的损失,钱对不上账是不允许的,那么就需要处理因为系统不可用而导致的写操作失败的情况。而如果关注的是可用性(A),那么就应该知道系统的 read 操作可能不能精确的读取到 write 操作写入的最新值。正如饭卡的例子,在一个区消费完卡里的钱后,又去南区,利用了数据不一致。
由于系统的关注点不同,相应的采用的策略也是不一样的,只有真正地理解了系统的需求,才有可能利用好 CAP 理论。CA:传统关系数据库,两个都保证,是因为它有集中系统。no cirle 数据库牺牲一致性,数据宁可不一致,但是业务影响不大可以容忍。AP:key-value 数据库