推荐一篇文章<<Time, Clocks, and the Ordering of Events in a Distributed System>>

简述: 分布式系统包含一堆进程(processes),进程间通过交换消息(message)彼此通讯。在分布式系统中,有时无法确定两个事件(event)的先后次序,所以先发生(happended before)关系在系统中只能是偏序(partial ordering)。分布式系统中的问题很多源于人们尚未意识到这点及其涵义。

如前所述,假定系统由进程组成;而进程包含一个事件序列。即:若a先于b发生,则a在序列中比b靠前。因此在单一进程中的事件,其“先发生”是全序(total ordering)关系。假定进程收发消息也是事件,则可以用符号”->”指代”先发生”关系如下:

定义:

(1) 若a和b是同一进程中的事件,a比b先发生,则a->b;

(2) 若进程一发送一消息为事件a,进程二接收此消息为事件b,则a->b;

(3) 若a->b 和 b->c 则 a->c;

两事件a与b, 若a->b 与 b->a皆不成立, 则说二者同时发生 (concurrent)。

假定a->a不成立, 即”先发生”关系是非自反的(irreflexive).

image

上面图1表现时空关系, 横向是空间,纵向为事件, 先发生事件标记在下,波浪线为消息。例如如图我们有: p1->r4;而p3和q3则为同时关系。若您熟悉狭义相对论的时空表示,则看这幅图也不会觉得陌生。相对论中,事件的序(ordering)由能发送的消息定义(message that could be sent),而在此处,我们只考虑实际发送的消息(message that are sent)。

逻辑时钟: 

现在引入逻辑时钟:为进程Pi定义时钟Ci, 它为进程中的每个事件a都赋予一个数字Ci[a].

对任意事件a和b: 若a->b 则C[a]  <  C[b]

注意反向未必成立.

易见:

C1. 若a和b是同一进程Pi的两个事件,且a先于b发生,则Ci[a]  <  Ci[b].

C2. 若Pi发送一消息为事件a, Pj接收同一消息为事件b, 则Ci[a]  <  Cj[b].

(未完待续)

posted on   薛定谔的旺财(刘杨)  阅读(2415)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述

导航

< 2011年3月 >
27 28 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9
点击右上角即可分享
微信分享提示