跳至内容

Junyi's Lab

Distributed System: Consistency

Table of Contents

这篇文章主要是对分布式系统中的一致性Consistency进行区分

弱一致性Weak Consistency:允许系统的行为与单一系统的行为不一致。

强一致性Strong Consistency:整个系统表现得像是一个单一的、无并发的实体。


下面的一致性,由弱到强

# 最终一致性Eventual Consistency

系统最终会达到一致的状态。

# 因果一致性Causal Consistency

比 Sequential Consistency 更弱。 如果操作 A 依赖于操作 B,那么操作 B 发生在操作 A 之前,但是如果操作 A 和操作 B 之间没有因果关系,那么操作 A 和操作 B 的顺序是不确定的。

有因才有果,因在果之前

先看见因,再看见果

如果一个问题被回答,显然问题本身得先在那里,因为给出答案的人必须已经看到这个问题,我们认为在问题和答案之间存在因果依赖。

比如微信朋友圈需要服务器之间采用因果一致性,来保证用户刷朋友圈时不会看到评论所对应的答复而看不到对应的评论。

drawing

延伸阅读:怎么生成唯一且递增的 ID?微信序列号生成器架构设计及演变雪花算法

# 序列一致性Sequential Consistency

不管系统怎么运行,得到的结果就好像把所有节点的所有操作按照某个 sequential order 排序后运行,但是在这个 sequential order 中,来自同一个节点的操作仍然保持着它们在节点中被指定的顺序。

换句话说,物理意义上的时间,不能决定操作operations的执行顺序

用作 Transaction 时我们称之为 Serializability

常用在 银行、金融数据库、事务

# 线性一致性Linearizable Consistency

也叫 Linearizability

是【顺序一致性 + 按照物理时间顺序执行】。

满足线性一致性的数据结构,表现得像是一个单一的、无并发的实体。是最强的保证

比如 Google Spanner


介绍到这里,基本上对 Consistency 有了大致的了解,接下来可以看 Primary Backup Replication 了。

# Lab 2

实现 Primary-backup replication:

  1. client 发送请求给 primary-server
  2. 由一个 中央 view-server 决定谁是 primary 谁是 backup
  3. primary 挂了,backup 顶上来
drawing