分布式系统一般指在网络上运行的系统,分布式系统可以使用网络中的硬件和软件资源,同时保障网络中的节点按照一定方式进行通信。
分布式系统有两项关键的功能:分布式计算和分布式存储。分布式计算是指将一个庞大的问题分解并分配给网络中众多的网络节点来共同解决,使得网络上的计算资源的利用效率更高。分布式存储是指将数据存储在网络的中多个节点上,防止由于单一节点故障而引发系统瘫痪,增强系统的可靠性。
![](https://img.haomeiwen.com/i2261919/b1e013e37334feae.jpg)
将数据分布存储在网络中,就必须采取某种方法使得网络中各个节点的数据能保持一致,因此出现了分布式共识算法。不同的共识算法各有优劣,在实际应用中要根据具体的场景进行取舍。
科学家Eric Brewer针对分布式存储提出了CAP设想,他认为一个分布式数据存储方案不能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance),最多只能保证其中的两个条件。其中,一致性指的是数据是否在所有节点中同一时刻是否一致;可用性指一部分节点故障后,其他节点能否正常处理用户的请求;分区容错性指的是能否容忍网络丢失从某个节点发出的信息。Seth Gilbert和Nancy A. Lynch随后证明了这个设想,使其成为了CAP定理。
CAP定理的意义是在设计分布式系统时,要按需进行权衡。比如,谷歌文件系统(GFS)牺牲了可用性来强化一致性和分区容错性,而亚马逊AWS的Dynamo系统牺牲了强一致性来强化另外两个特性。这里要指出的是,牺牲一致性指的是牺牲强一致性,是指不需要立刻达到一致,建立一致需要一定的时间,达到“最终一致性”。比如很多社交网络的应用中,往往会选择牺牲强一致性,而一些金融相关的应用为了保证用户的财产安全往往会对一致性的要求很高。
区块链系统也是一种分布式数据存储系统,区块链的共识算法决定了其如何在网络中建立一致性。类似于比特币这种公有链往往采用最终一致性,即在短时间内比特币允许不同的节点之间存在分歧,即分叉的出现,但最终会根据PoW工作量证明机制的确定唯一一条区块链,达到最终一致。而另一些联盟链或私有链往往对一致性和系统的效率要求较高,所以往往采用强一致性的机制,如PBFT、DPoS等。
网友评论