分布式数据库必需要有 分区容忍性(Partition Tolerant)
,因此主要是在 一致性(Consistent)
和 可用性(Available)
之间作选择。
虽然在 CAP 理论中,选择了 Availability
就不可能获得真正的 Consistency
,可是你能够追求 最终一致性(Evental Consistency)
数据库
evental Consistency
背后的思路是:每一个系统节点老是 Available
的,同时任何的写(修改数据)操做都会在后台同步给系统的其余节点。
这意味着,在任意时刻,整个系统是Inconsistent(不一致的)
,然而从几率上讲,大多数的请求获得的值是准确的。服务器
互联网的 DNS(域名服务) 就是最终一致性的一个很是好的例子。你注册了一个域名,
这个新域名须要几天的时间才能通知给全部的 DNS 服务器。可是无论何时,你可以链接到的任意 DNS 服务器对你来讲都是 'Available' 的。分布式
让咱们接着以前的小故事.code
假设你不是深山里,是被抓到一个孤岛上造方舟。事件
2015年7月3日
——距离你被抓来造方舟已经将近3个月,你在孤岛的海边捡到了一个漂流瓶,里面写着:get
最新一期暴走大事件是第四季第2期
因此你知道:最新一期暴走大事件至少是第四季第2期
。同步
假设暴漫的粉丝喜欢玩漂流瓶——只要暴走大事件有更新,就会把最新一期的暴走大事件写在纸上,而后经过漂流瓶扔向大海。
这样,像你这样的被 Partition
的人,老是能时不时地收到记录着最新一期暴走大事件是什么的漂流瓶。
换句话说,虽然每一时刻,关于“最新一期暴走大事件是什么”你并不必定知道的是正确的答案,但你老是会 eventually(最终)
知道正确答案。域名