绪论
最近20年的计算机规模的发展飞速,重要的变化是从集中式、单点架构往分布式架构发展,推出诸多的分布式计算和存储,以google mapreduce、bigtable为代表,近20年业内也主要围绕分布式一致性问题做出巨大的努力。本文主要也探讨一致性算法的演变,以及一致性算法介绍等。
架构演变
在集中式存储计算时代,数据规模较小,普遍采用类似mysql之类的数据库存储,在此阶段,大家主要关心的是ACID特性,以B树为代表的存储检索引擎得到了广泛的应用。随着数据获取的容易,大量数据接入,传统的B树索引难以大量数据写入和变更,LSMT为代表的算法在写多读少场景下得到了普遍的应用,典型的有bigtable、hbase等大数据存储,这类系统由于将数据分散在多个节点分散存储节点数据,采用分而治之的方式管理,使得大数据存储难题得到有效的解决,但同时由于多个节点存储数据,因此节点网络分区、节点下线可认为是常态,数据一致性成为这类系统的通病。于是类似CAP(一致性,可用性、分区容忍性)等成为分布式领域经常探讨的话题,数据一致性算法也得到了广泛应用。
算法演变
2阶段提交
可以归纳为阶段1:提交事务请求。阶段2:执行事务阶段
优缺点:实现简单,但容易同步堵塞,尤其是网络集群中。
3阶段提交
归纳为阶段1:can commit。阶段2:precommit。阶段3:doCommit
优缺点:降低了2阶段的堵塞成本,但在precommit阶段,网络分区,存在数据不一致问题
paxos算法
归纳为:(1)提案必须有序递增。(2)必须大多数同意才认为通过
算法解决了2阶段算法无限等待问题,利用大多数同意,解读了分布式单点问题,目前成为主流的一致性算法。
ZAB协议
分为发现,同步,广播3个阶段