回家再修文,先发ㄌ
晚点要补一下前一篇的 failure detectors
介绍分散式系统中的时间,主要分为
这篇笔记在物理时间 3.1 3.2 不做太多着墨,
只需要知道因为误差的关系,
分散式系统间的讯息传递不能以物理时间当作时戳,
否则可能会有时空旅行的可能。
3.3 会介绍逻辑时间的数学关系,以迎接第 4 章: Logical clock。
对於分散式系统来说,物理时间较少使用。
根据 atomic 时间,但会依据地球自转而有所校正。
校正 UTC 来大致符合地球自转。
每年可能 +- 1 秒,会提前公告。
而这个东西会造成很大的问题!!
通常程序会直接忽略 leap seconds,对於一些系统来说这是很严重的事情。
如果两个时钟都有各自的 drift,那他们的 skew 随着时间增加,所以需要 sync。
i.e. a时钟慢了1秒,b时钟快了1秒,每秒这两个时钟差就多2秒。
clock server 的层级:
根据 client 和 server 的时间差,调整 client 时钟的策略有 3 种:
所以单个电脑上要对某个动作计时,应该使用 monotonic clock。
如果是分散式系统,不得已得用 physical clock 来比较不同电脑的时间,则用 time-of-day clock。
再怎麽努力与 NTP sync,每个电脑上的物理时间还是有可能会有一点点误差。
若以物理时间来重新排序讯息,一个不小心就可能时空旅行。
time skew > one way network delay?? 不太懂 3:27
定义 happens-before relation
a ->
b 代表 a happens-before
b iff
:
happens-before 是个 partial order,
有可能 既不是 a -> b 也不是 b -> a,称之 concurrent。
a || b。
什麽?为什麽可以不是 a-> b 也不是 b-> a?
这可能小小的违反我们的直觉,
但 happens-before 关系是一种相对关系,
而我们直觉是基於物理时间的。
在分散式系统上,
如果不能使用物理时间,
那若没有讯息传递,例如两个 nodes 之间完全不联系,
我们无从去比较出两个 node 上事件的 happens before relation 的。
concurrent 不代表 spontaneous!!
只是这两个 events 不知道对方先发生还是後发生、无法比较而已。
happens-before relation 是一种可以讨论分散式系统上事件之间因果关系的数学关系。
a -> b: a 可能 have caused b
a || b: a 不可能 have caused b
causal order
是代表
若 a causes b, then a happens before b?
似乎是从物理借镜来的概念。
如果今天两个事件发生的「距离够远」,就算时间很相近,但他们却不会有关系,a 不可能影响 b。
分散式系统注重讯息的顺序,其中也有同样的概念,就是如果 a 跟 b 没有 causal 关系的话,或许我们并不是很在意他们实际是不是在差不多的时间发生。
a || b : a 不可能 have caused b!
>>: [Day04 - UI/UX] 确认使用的 UI framework
许多厂商、卖家都会想知道自己的商品上架到平台贩售时,商品会排名在哪个位置? 大品牌厂商可能有经费每...
问题回答 在 Vue 2,我们需要使用 .set() 等 Vue 语法来修改在 data 里的物件或...
今天的实作内容主要根据教学网站进行。 将应用程序安装到Heroku 环境设定 Heroku主要利用四...
昨天的重点复习/./就是一个最简单的正规表达式。 先认识一下match与=~。 match回传匹配的...