本周主要介绍了分布式数据库和NoSql数据库的相关知识。
大多数 NoSQL 无法实现真正符合 ACID 的事务,只能实现数据的最终一致性。
CAP 理论
对于一个分布式系统而言,网络失效一定会发生,也就是说,分区耐受性是必须要保证的,那么在可用性和一致性上就必须二选一。针对不同的使用场景,来决定实现AP还是CP。
BASE理论
基本可用(Basically Available)系统在出现不可预知故障时,允许损失部分可用性,如响应时间上的损失或功能上的损失。
Soft state(弱状态)软状态,指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。
Eventually consistent(最终一致性)指系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态,因此最终一致性的本质是需要系统保证数据能够达到一致,而不需要实时保证系统数据的强一致性。
ZooKeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是按照CP原则构建的。
Zookeeper是使用Paxos算法实现的,Paxos算法主要有三个角色,Proposer、Acceptor和Learner。
第一阶段:Prepare 阶段。Proposer 向Acceptors 发出Prepare 请求,Acceptors 针对收到的Prepare 请求进行Promise 承诺。
第二阶段:Accept 阶段。Proposer 收到多数Acceptors 承诺的Promise 后,向Acceptors 发出Propose 请求,Acceptors 针对收到的Propose 请求进行Accept 处理。
第三阶段:Learn 阶段。Proposer 在收到多数Acceptors 的Accept 之后,标志着本次Accept 成功,决议形成,将形成的决议发送给所有Learners。