分布式系统中的 Partial ordering 和 Global ordering 的理解

这篇文章用简化的事件顺序示例,解释了分布式系统中 partial ordering 与 global ordering 的区别。正文先说明全局有序要求所有事件都按统一顺序发生,而部分有序只约束存在依赖关系的那部分事件,再通过 A、B、C 三个事件的例子说明两者在系统行为上的差异,最后结合 Lamport Timestamp 指出这类逻辑时钟系统通常只能保证 partial ordering,而不是整个系统范围内的全局有序。

在分布式系统中,我们在阅读关于事务一致性的论文中,经常会看到 partial ordering 和 global ordering。这里简单的说明下。

Partial ordering

部分有序。指在一系列的事件中,只保证部分的事件按照一定的顺序进行处理。

Global ordering / Total ordering

全局有序。很简单,就是所有的事件均按照一定的顺序处理。例如在一个单核系统中,所有的事件都是逐一发生的,发生了 A 事件才会发生 B 事件再发生 C 事件。

例子

假设我有三个事件 A,B,C{ A,B,C} ,假设事件的执行顺序是 A>B>CA>B>C,那么该系统属于 Global ordering 。另一种情况,如果我们假设 A>CA>C,执行 C 事件需要先执行 AA 事件,而 BB 事件为独立事件,不受 AACC 的影响,那么这种情况称为 partial ordering。

所以我们能知道,基于 Lamport Timestamp 的系统一定是 partial ordering 的。因为 Lamport Timestamp 只保证同一个 key 的数据处理有序,而不保证整个系统的所有事件处理有序。

不清楚什么是 Lamport Timestamp 的可以阅读之前的文章:https://www.inlighting.org/archives/lamport-timestamp-vector-clock

参考资料

https://stackoverflow.com/questions/4620779/partial-ordering-of-events-in-a-distributed-system

原创文章,作者:Smith,如若转载,请注明出处:https://www.inlighting.org/archives/understand-partial-ordering-and-global-ordering

打赏 微信扫一扫 微信扫一扫
SmithSmith
上一篇 2020年10月13日 上午1:17
下一篇 2020年10月13日 下午1:20

相关推荐

  • TinyKV Project1 Standalone KV

    这篇文章总结了 TinyKV Project1 的实现内容,核心是在 Badger 之上构建一个支持 Column Family 的 standalone KV 存储引擎。正文先解释 TinyKV 里 `default`、`write`、`lock` 等 CF 的基本含义,以及如何通过 key 前缀在底层 KV 中模拟多列结构,随后说明 standalone storage、Reader 和批量写入的实现方式,再继续梳理 `RawGet`、`RawScan`、`RawPut`、`RawDelete` 等服务接口如何基于自定义 Reader 完成读写。文章最后还补充介绍了 Badger 参考 WiscKey 的存储设计,以及它在读写放大上的权衡。

    2023年3月2日
    2.0K0
  • Talent Plan TinyKV 白皮书

    这篇文章记录了作者参加 PingCAP Talent Plan TinyKV 学习营、完成 TinyKV 项目后的整体复盘,并汇总了配套白皮书、经验和踩坑总结。正文先说明比赛结果、性能评分异常的猜测以及白皮书各章节入口,随后从硬件准备、测试方式和心态管理谈起,分析 TinyKV 在文档完整性、测试覆盖度和事务实现理解上的几个难点,并给出各个 Project 的难度排序与推荐完成顺序。文章最后补充了参考资料、批量跑测试脚本,以及对整个 TinyKV 学习过程的个人反思。

    2022年1月9日
    10.1K49
  • 理解 FLP-Impossibility 论文

    这篇文章尝试用更易读的方式梳理 FLP-Impossibility 论文,解释为什么在异步消息系统中,即使最多只有一个进程故障,也不存在能够同时满足 Validity、Agreement 和 Termination 的真正共识算法。正文先定义论文里的大量术语和系统模型,包括 process、configuration、schedule、bivalent、univalent 等概念,再围绕几个关键 lemma 逐步展开证明思路,说明系统总能停留在无法保证做出决议的状态。最后文章结合 Paxos、Raft 等现实算法讨论 FLP 的实际意义,即它证明的是最坏情况的存在,而工程系统必须通过随机化、时序假设或其他约束来换取可用性。

    2021年6月10日
    5.5K8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注