原文地址:
分布式系统之所以产生,主要的两个目的就是“快”和“海量”。
这个“快”可以分为两个方面:
第一个是系统的处理速度快。
第二个是开发的速度快(历时短)。
这2点本质都是相同的,把一个动作或者一件事情拆成两部分或者多个部分去同时进行,使得整体的耗时缩短。
“海量”则是由于不存在无穷大的硬盘,所以我们需要把数据分别存储到不同的硬盘上,才能满足需求。
而分布式系统再带来了前面提到的好处的同时,也带来了业界普遍认为最大的问题 —— 数据一致性问题。
分布式就意味着分治与协作,一件事一个人只负责一部分。这些事情大家都可以同时进行,但是任一环节掉链子了,都是失败的。
当一个事情分成100个部分去做的时候,很可怕,从概率的角度来看,达到一致的概率是2/5050。
什么原因导致了数据不一致的产生?
一是程序设计问题,或者说代码写错了。
二是硬件的因素存在。
并且对我们这里的大部分人来说,硬件相比软件,我们的掌控力更弱。这其中,最为严重的属网络问题。
那么什么叫达到一致性?
在任意时间、任意位置看到的同一个事物是完全一致的。
然而在考虑时间维度的情况下,不存在真正意义上的一致。
所以我们在分布式系统中,也没有必要去达到真正的意义上的一致。因为越趋近于一致,系统相当于又归一成一个单体了,在某一个时刻,只能做一件事,完全丧失了分布式系统的两个目的之一“快”的优势。
大多数情况下,为了尽可能的“快”,系统中使用的大部分方案都是所谓的最终一致性,也就容忍一定条件下的不一致,优先保证局部一致,然后再通过一系列复杂的状态同步达到全局的一致。最终一致性很多可实现的分支,列出几种常见的,抛砖引玉一下:
因果一致性:仅要求有因果关系的操作顺序得到保证。比如朋友圈的回复功能。问“饭吃了吗?”肯定得在回答“吃了”之前。
读你所写一致性:文字看着别扭,但很好解释。比如你在朋友圈下面回复一句话,其它好友可以不用马上看到你的回复,但是你自己必须得马上看到,要不然回复到哪去了?
会话一致性:与人的一次聊天可以理解为一次会话。聊天虽然也有一定的因果关系,但是大部分场景下更多的是逻辑上的先后关系。比如你阐述一个事情,分为3条信息:首先...,然后...,最后...。如果这里的一致性得不到保证那么可能会变成:最后...,首先...,然后...。
原文:https://www.cnblogs.com/sakura--/p/11052700.html