分布式系统数据一致性级别

分布式一致性问题

在分布式系统中一个需要解决的重要问题就是数据的复制。

分布式系统对于数据的复制需求一般都来自于以下两个原因:

  • 为了提高系统的可用性,以防止单点故障引起的系统不可用
  • 提升系统的整体性能,通过负载均衡技术,能够让分布在不同地方的数据副本都能够为用户提供服务。

所谓的分布式一致性问题,是指在分布式环境中引入数据复制机制后,不同数据节点间可能出现的,并无法依靠计算机应用程序自身解决的数据不一致情况。

简单地讲,数据一致性就是指在对一个副本数据进行更新的同时,必须确保也能够更新其他的副本,否则不同副本之间的数据将不再一致。

可能会有人想到这种解决方案:

将写入的动作阻塞,直到数据复制完成后,才完成写入动作。

这似乎能解决问题,可当应用场景中有非常多的写请求时,系统的性能将急剧下降。

总的来讲,我们无法找到一种能够满足分布式系统所有系统属性的一致性解决方案。因此如何既保证数据的一致性,同时又不影响系统运行的性能,是每一个分布式系统都需要重点考虑和权衡的。

于是就出现了以下一致性级别。

强一致性

这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响极大

弱一致性

这种一致性级别约束了系统在写入成功后,不承诺立即可以读到写入的值,也不具体承诺多久之后数据能够达到一致,但会尽可能保证到某个时间级别后,数据能够达到一致状态。弱一致性还可以再进行细分:

  • 会话一致性:该一致性级别只保证对于写入的值,在同一个客户端会话中可以立即读到一致的值,但其他的会话不能保证。
  • 用户一致性:该一致性级别只保证对于写入的值,在同一个用户中可以立即读到一致的值,但其他用户不能保证。

最终一致性

最终一致性是弱一致性的一个特例,系统会保证在一定时间内,能够达到一个数据一致的状态。这里之所以将最终一致性单独提出来,是因为它是弱一致性中非常重要的一种一致性模型,也是业界在大型分布式系统的数据一致性上比较推崇的模型。

参考内容:
《从Paxos到ZooKeeper 分布式一致性原理与实践》倪超著

猜你喜欢

转载自blog.csdn.net/u013568373/article/details/91458102
今日推荐