Skip to content
字数
780 字
阅读时间
4 分钟

在分布式系统中,由于有多个机器(进程)在一起协调工作,于是如何定义分布式系统中事件的先后顺序就成了难题。

这里就需要我们了解两个数学上的概念:全序(total ordering)和偏序(partial ordering)关系。


全序(Total Order) 全序关系满足以下性质:

  1. 反对称性:若 ( a <= b ) 且 ( b <= a ),则 ( a = b )。
  2. 传递性:若 ( a <= b ) 且 ( b <= c ),则 ( a <= c )。
  3. 完全性:对于任意 ( a ) 和 ( b ),要么 ( a <= b ),要么 ( b <= a )。

特点

  • 集合中的任意两个元素都可以比较大小。
  • 不存在无法比较的元素。

举例

  • 整数集合:任意两个整数都可以比较大小(如 ( 3 <= 5 ) 或 ( 5 <= 3 ))。
  • 时间戳:如果所有事件都分配了唯一的时间戳,则事件顺序是全序的。
  • 物理时钟从物理时钟到NTP与PTP协议

全序的应用

  • 分布式共识算法
    • Paxos 或 Raft 等算法为所有操作分配一个全局唯一的顺序,从而实现全序。
    • 例如,在 Raft 中,Leader 为每个日志条目分配一个唯一的索引,确保所有副本按相同的顺序执行操作。
  • 状态机复制
    • 在状态机复制中,全序用于确保所有副本按相同的顺序执行操作,从而保持一致状态。

偏序(Partial Order) 偏序关系满足以下性质:

  1. 自反性:对于任意 ( a ),有 ( a <= a )。
  2. 反对称性:若 ( a <= b ) 且 ( b <= a ),则 ( a = b )。
  3. 传递性:若 ( a <= b ) 且 ( b <= c ),则 ( a <= c )。

特点

  • 集合中的部分元素可以比较大小,但并非所有元素都可以比较。
  • 可能存在无法比较的元素(即并发事件)。

举例

  • 树形结构:同一层级的节点之间无法比较大小,只有父子节点之间可以比较。
  • 家庭关系:你和你堂兄弟姐妹之间没有直接的父子关系,因此无法比较“大小”。
  • 逻辑时钟Lamport 逻辑时钟
  • 向量时钟Vector 向量时钟

偏序的应用

  • 因果一致性
    • 在分布式系统中,偏序用于描述事件的因果关系。
    • 例如,如果事件 A 导致事件 B 发生,则 ( A <= B )。
  • 冲突检测
    • 在 AP 系统中,偏序用于检测并发写操作的冲突。
    • 例如,使用向量时钟识别并发事件。

贡献者

文件历史