分布式一致性

分布式一致性

一. 引文

1.1 什么是并发?

并发:当逻辑控制流(一次程序操作,如读取或更新内存变量的值)在时间上重叠,那它就是并发的。

一般并发都特指更新操作的并发,即有多个线程同时更新内存中变量的值。

1.2 数据复制延时问题

数据复制一般会有延时问题,即无法及时读取到更新后的最新数据。

1.3 分布式一致性问题

分布式系统一般采用数据复制都是基于两类需求:

  • 增加系统的可用性,防止单点故障引起的系统不可用;
  • 提供系统整体性能,通过负载均衡技术,让分布在不同位置的数据副本都为用户提供服务。

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

数据一致性:指对一个副本数据进行更新的同时,必须确保能够更新其他的副本。

1.4 如何解决一致性问题?

既然是由于延时引起的问题,可以将写入的动作阻塞,直到数据复制完成后,才完成写入动作。

这样能解决问题,但带来了新的问题:写入的性能很差。后续的写请求都要阻塞在前一个请求的写操作上,不适用于有大量写请求的场景。

所以我们需要在保证数据一致性和不影响系统运行的性能间做一个权衡,从而划分出一致性级别

  • 强一致性:系统写入什么,读出来就是什么,会对性能有较大影响。
  • 弱一致性:系统写入成功后不保证可以立刻读到写入的值,只尽可能的保证在某个时间级别(如秒级别)后,数据能达到一致性状态,细分:
    • 会话一致性:只保证对于写入的值,在同一个客户端会话中可以读取到一致的值,其他会话不能保证。
    • 用户一致性:只保证对于写入的值,在同一个用户中可以读取到一致的值,其他用户不能保证。
  • 最终一致性:特殊的弱一致性,非常重要的一种一致性模型。

接下来引入几种典型的分布式一致性协议,学习它们是如何解决分布式一致性问题。


参考:

🔗 《从Paxos到Zookeeper-分布式一致性原理与实践》