字数
780 字
阅读时间
4 分钟
在分布式系统中,由于有多个机器(进程)在一起协调工作,于是如何定义分布式系统中事件的先后顺序就成了难题。
这里就需要我们了解两个数学上的概念:全序(total ordering)和偏序(partial ordering)关系。
全序(Total Order) 全序关系满足以下性质:
- 反对称性:若 ( a <= b ) 且 ( b <= a ),则 ( a = b )。
- 传递性:若 ( a <= b ) 且 ( b <= c ),则 ( a <= c )。
- 完全性:对于任意 ( a ) 和 ( b ),要么 ( a <= b ),要么 ( b <= a )。
特点:
- 集合中的任意两个元素都可以比较大小。
- 不存在无法比较的元素。
举例:
- 整数集合:任意两个整数都可以比较大小(如 ( 3 <= 5 ) 或 ( 5 <= 3 ))。
- 时间戳:如果所有事件都分配了唯一的时间戳,则事件顺序是全序的。
- 物理时钟:从物理时钟到NTP与PTP协议
全序的应用
- 分布式共识算法:
- Paxos 或 Raft 等算法为所有操作分配一个全局唯一的顺序,从而实现全序。
- 例如,在 Raft 中,Leader 为每个日志条目分配一个唯一的索引,确保所有副本按相同的顺序执行操作。
- 状态机复制:
- 在状态机复制中,全序用于确保所有副本按相同的顺序执行操作,从而保持一致状态。
偏序(Partial Order) 偏序关系满足以下性质:
- 自反性:对于任意 ( a ),有 ( a <= a )。
- 反对称性:若 ( a <= b ) 且 ( b <= a ),则 ( a = b )。
- 传递性:若 ( a <= b ) 且 ( b <= c ),则 ( a <= c )。
特点:
- 集合中的部分元素可以比较大小,但并非所有元素都可以比较。
- 可能存在无法比较的元素(即并发事件)。
举例:
- 树形结构:同一层级的节点之间无法比较大小,只有父子节点之间可以比较。
- 家庭关系:你和你堂兄弟姐妹之间没有直接的父子关系,因此无法比较“大小”。
- 逻辑时钟:Lamport 逻辑时钟
- 向量时钟:Vector 向量时钟
偏序的应用
- 因果一致性:
- 在分布式系统中,偏序用于描述事件的因果关系。
- 例如,如果事件 A 导致事件 B 发生,则 ( A <= B )。
- 冲突检测:
- 在 AP 系统中,偏序用于检测并发写操作的冲突。
- 例如,使用向量时钟识别并发事件。