分布式系统时钟和有序-(3)

前言

分布式系统本质上就是使用多机来解决单机的问题,为了保证它的通用性,必须能够保证如单机一样的order。所有你所关心的就是它确实像单机一样在执行操作。本章主要讲解分布式系统一个基本问题:时序问题。

如果你还不了解分布式系统,那么欢迎戳它:分布式系统基本概念-(1)
如果你想进一步了解分布式系统的基本特征以及consensus问题,那么欢迎戳它:分布式系统上下层概念抽象-(2)

1. 全序和偏序

这说明的分布式系统最重要的顺序问题。从单机角度上来,不同任务之间可以具有完全的order,然后从多机系统的角度,我们想却无法保证全局的Order。

全序:集合中的任何两个元素都是可比较的(例如实数域);
偏序:集合中只有部分元素是是可比较的(例如复数域)。

对于全序和偏序来说,都具有反对称性和传递性
也就是说对于任意的a和b,有

If a ≤ b and b ≤ a then a = b (antisymmetry);
If a ≤ b and b ≤ c then a ≤ c (transitivity);

不同之处,对于偏序来说,具有自反性,即

a ≤ a (reflexivity) for all a in X

对于全序来说,具有完全性,即

a ≤ b or b ≤ a (totality) for all a, b in X

不知道上面的性质有没有把你说懵逼?
反对称性和传递性都比较容易理解。举例集合的包含关系,如果集合a包含集合b,且集合b包含集合a,那么a=b(反对称性),如果集合a包含b,b包含c,那么集合a包含c(传递性)。

对于全序来说,具有完全性,也就是说任意的两个元素都具有比较关系,即要不a>= b,要不b>=a,至少一个成立;对于偏序来说,并不能满足任意成立,只需要满足自反性即可。可以看出,偏序包含全序,偏序是一种更泛化的情况。

以git为例,在一个分支中,git log中显示的版本号具有序号的概念,可比较(例如先提交,后提交之说),然后不同branch之间的git提交却是无法比较的。例如都是基于master,创建了分支A和B,然后

分支A: a1, a2, a3 ...
分支B: b1, b2, b3 ...

虽然分支A和B起源于同一个位置,然后A和B向不同方向发展,因此不可比较,这叫发生了分叉,也就是说全序不再成立。对于分叉的处理要不自动合并,要不人工选择某一个。

2. 什么是time

time具有三种属性:

  • Order:决定事件的顺序
  • Duration:用于测量the amount of time
  • Interpretation:便于解释,例如转换为Date,具有具体含义

分布式系统的各个节点内部都具有自身的Order(可以依靠自身的时钟),但是由于它们独立的运行,无法得到全局的Order(各个节点的clock可能不完全一致)。

3. time走的一样快吗?

对于这个问题,有三种角度:

  • Global clock:yes
  • Local clock:no,but
  • No clock:no

Global clock

假设整个系统有一个全局的精确时钟,所有event的发生的时间戳都被精确的确定,因此就具有了全局的Order,然而这是一个理想的系统。真实情况下,时钟同步会有一定的延迟,用户也可能手动修改了时钟,这都会导致各个节点的时间不一致。

即使这样,仍然有系统假设时钟是完美同步的,例如Facebook的Cassandra基于时钟同步假设,它解决冲突的标准是选择最新的写入(最新基于时钟最新)。

Local clock

Local clock假设感觉更可行一些,它说的是每个机器都有本地的时钟,并没有全局的时钟。Local clock定义了一种偏序关系,在节点内部,event是有序的,然而节点之间,event是不可比较的。

No clock

No clock意味着没有逻辑时间的概念,取而代之的是我们使用couters和communication来决定事件是否发生过,异或是还未发生。 由于没有time的概念,我们也就无法使用timeout。这也是一个偏序概念:从节点本身来看,可以使用counter决定顺序,跨

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值