数据副本与一致性问题
数据副本
数据副本是个很常见的概念和术语,我们经常遇到,但是也最容易让人产生迷惑。
副有以下几种含义:
(1)辅助的,区别于正和主,例如:副职,副手,副官。
(2)附带的,次要的,例如:副业,副品,副食,副刊。
(3)相配、相称之意,例如:名实相副,其实难副。
(4)量词,表示一组或一套,例如:一副手套,全副武装;也可指态度,例如,一副笑脸。
在分布式系统和大数据领域,所有的节点,所有的数据块,地位都是平等,所以副本并不是指正副的“副“,只是用作量词,没有主副之分。可以这么说,所有的数据都可以叫做“数据副本”。
一致性问题
一致性问题立足于数据副本,有数据副本的地方必定会有一致性问题。对于数据副本,人们往往印象不深,但是对于缓存,我想人人皆知。缓存就是数据副本。
我们知道,数据存在于内存中,然后被加载到寄存器中,此时出现了两个数据副本,如何保证两者的一致性呢?这就是一致性问题的起源。
一致性问题并不是分布式领域才有的问题,只不过在分布式领域更常见罢了。因为存在多个数据副本,如果对第一个数据副本进行了更新,而对其他的数据副本没有更新操作,那么这会导致数据不一致性。
人们发现了一致性问题之后,随后提出了CAP理论,而一致性位列其中的C位。一致性是个非常重要的概念,它前承数据副本 ,后接CAP理论。
副本、一致性这些基本的概念很重要。能够不假思索的说出来,很考验了一个的功底。搞分布式的,搞大数据的,如果这些都不甚明白,那真的还算没有入门。
一致性问题无关乎数据的对错
为了实现集群的高可用性,用户的数据往往要多重备份,多个副本虽然避免了单点故障,但同时也引入了新的挑战。
假设有一组服务器保存了用户的余额,初始是100块,现在用户提交了两个订单,一个订单是消费10元,一个订单是充值50元。由于网络错误和延迟等原因,导致一部分服务器只收到了第一个订单(余额更新为90元),一部分服务器只收到了第二个订单(余额更新为150元),还有一部分服务器两个订单都接收到了(余额更新为140元),这三者无法就最终余额达成一致。这就是一致性问题。
一致性算法并不保证所有提出的值都是正确的(这可能是安全管理员的职责)。我们假设所有提交的值都是正确的,算法需要对到底该选哪个做出决策,并使决策的结果被所有参与者获悉。
另外,一致性算法并不保证所有节点中的数据是完全一致的,但它能保证即使一小部分节点出现故障,仍然能对外提供一致的服务(客户端无感知)