袖珍分布式系统(三)

本文是Distributed systems for fun and profit的第三部分,本文是阅读该文后的一些记录。

Time and order

先来看第一个问题:

What is order and why is it important?

为什么我们要关心是否 A happened before B?

回答这个问题之前,我们先来看下分布式编程的定义。

the art of solving the same problem that you can solve on a single computer using multiple computers.

在单机系统中,传统的模式是: a single program, one process, one memory space running on one CPU。我们做了很多努力来给编程者提供一种简单的编程模型,一种顺序执行的模型,让程序实际执行的顺序就是代码的顺序。

但是我们一旦来到分布式环境中,我们却发现再也没有这种简单的编程模型了,程序实际执行的顺序你忽然间就无法预测了,因为每个节点时钟不是严格同步的,当然你可以去用复杂的技术来实现所有节点的时钟同步,然后给予每个操作一个时间戳,从而得到一个全局的total order;另一个思路是通过一个communication system,给每个操作都编号,从而得到一个顺序,但是就像我们之前说的一样,在分布式系统中,通信是不可靠的,您不可能确定的知道另外一个节点的状态,我们可以看到以上两种方法都很难。

Total and partial order

在分布式环境中一种常见的状态是:partial order,即部分有,在集合中不是任意两个元素都是可比较的。

Total 和 partial order 都满足 自反性和传递性。

If a ≤ b and b ≤ a then a = b

(antisymmetry);

If a ≤ b and b ≤ c then a ≤ c

(transitivity);

total order还满足:

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

即所有集合中的元素都是有序的,而partial order则:

a ≤ a (reflexivity) for all a in X

即集合中的元素不是都有序,只满足自反性。

在单机系统中,所有的指令和消息的执行都是可预测的,是有一个total order的,因此程序的行为是可预测的,但是在分布式系统中想要实现total order,代价是巨大的,因为

communication is expensive, and time synchronization is difficult and fragile

What is time?

Time is a source of order - it allows us to define the order of operations- which coincidentally also has an interpretation that people can understand (a second, a minute, a day and so on).

什么是时间?时间有时候就像一个计数器,只不过时间这个计数器比较重要,我们用这个计数器产生的数值来定义整个人类的最重要的概念:时间。

Timestamps really are a shorthand value for representing the state of the world from the start of the universe to the current moment - if something occurred at a particular timestamp, then it was potentially influenced by everything that happened before it.

什么是时间戳(Timestamps),Timestamps定义了世界从初始到现在的状态,如果某件事发生在一个特定的时间点上,是之前影响产生的结果。

此处有个大前提,所有的时间都以相同的速率前行着,time and timestamps在程序中应用的时候,有3个常用的解释:

  • Order
  • Duration
  • Interpretation

当我说:time is a source of order,我指的是:

  • we can attach timestamps to unordered events to order them【通过给事件安排一个时间戳,从而给事件排序】
  • we can use timestamps to enforce a specific ordering of operations or the delivery of messages (for example, by delaying an operation if it arrives out of order)【我们可以通过时间戳给操作重新排序】
  • we can use the value of a timestamp to determine whether something happened chronologically before something else【通过时间戳知道哪个事件发生在前】

Interpretation - time as a universally comparable value.

时间戳的绝对值解释为日期(date),对人们非常有用的概念

Duration - durations measured in time have some relation to the real world.

像算法一般只关心Duration,通过Duration来判断延迟,一个好的算法都希望能有低延迟。

Does time progress at the same rate everywhere?

对于问题:时间以同样的速率进行吗?有3个常见的回答:

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

以上回答的的意思是:

  • the synchronous system model has a global clock,
  • the partially synchronous model has a local clock, and
  • in the asynchronous system model one cannot use clocks at all

下面分别来看下

Time with a "global-clock" assumption

全局时钟(global-clock)假设是我们有个非常精确的时钟,我们任何人在任何地方都能看到他。这也是平时生活中我们最习以为常的时钟,对于不同时钟间微小的差别我们并不关注。

在实际系统中,如果我们假设有个global-clock,即每个节点的时钟都是同步的,那么我们可以通过timestamps都就可以得到一个total order,但是在系统间维持时钟同步是非常难的,我们只能做到一定的范围内的同步。

目前忽略时钟之间的不同步问题做出来的系统有:

  • Facebook's Cassandra:通过时间戳来解决冲突
  • Google's Spanner:时间戳+偏差范围来定义顺序

Time with a "Local-clock" assumption

它假设了一个偏序关系

events on each system are ordered but events cannot be ordered across systems by only using a clock.

同一个机器上我们可以通过时间戳来排序,但是不同机器上的时间戳不能比较

Time with a "No-clock" assumption

不在使用时间戳,而是使用counter,通过传递消息来交换counter,从而定义不同机器之间的事件的前后顺序,比较有名的论文就是:time, clocks and the ordering of events

How is time used in a distributed system?

时间的好处是:

  1. Time can define order across a system (without communication)
  2. Time can define boundary conditions for algorithms

在分布式系统中,定义事件的顺序非常重要,因为:

  • where correctness depends on (agreement on) correct event ordering, for example serializability in a distributed database【正确性依赖于事件的顺序】
  • order can be used as a tie breaker when resource contention occurs, for example if there are two orders for a widget, fulfill the first and cancel the second one【当发生资源争用的时候可以用来做裁决】

当我们有全局时钟的时候,我们不需要通信就能够确定顺序,不幸的是,我们一般都没有全局时钟,因此只能通过通信来确定时序。

时间除了用来确定时序外,还能定义算法的边界,特别是可以区分 high latency 和 server or network link is down,而用来探测它俩区别的算法就是:failure detectors。

Failure detectors (time for cutoff)

在分布式环境中,我们怎么知道一个节点是否宕机了呢?我们可以通过等待一定时间后认为节点失败了。

那问题是这个一定时间是多久呢?

这依赖于节点之间的延迟,算法一般不会直接设置一个精确的值,而是会对“一定时间”这个概念做个很好的抽象。

A failure detector is a way to abstract away the exact timing assumptions. Failure detectors are implemented using heartbeat messages and timers. Processes exchange heartbeat messages. If a message response is not received before the timeout occurs, then the process suspects the other process.

而failure detector是一个解决方案,通过心挑信息来探测存活性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

  • 你们冬天会洗冷水澡吗? 听说,游冬泳,一年四季洗冷水澡的人,身体会好很多,真的是这样吗? 记得以前听我爸说,他一个...
    小小南南南阅读 2,250评论 0 2
  • 我读高中时,有个哥们,特别胖。一米七多点,得有100多公斤。因为体重近乎0.1吨,我们就给他取了个外号,叫吨哥。 ...
    怪物德瑞克阅读 990评论 8 21
  • 在7.9季中版本改动后,很多玩家沉迷于三大坦克英雄和新坦克装备的改动,但峡谷先锋成为了这个版本最大受益者。 在7....
    LOL小雪琪阅读 200评论 0 0
  • 有好多好多的话想要同别人讲,讲上一辈子,有些不安就像针一样要从身体里扎出成千上百个窟窿,每一个都是灵魂的伤口,而你...
    kitakimi阅读 194评论 0 1
  • 来大理已有旬日,日日见苍山负雪巍立,心向往之,知有今日之登临也。 至苍山脚下,仰望,青松被覆。以其山之高也,故绿有...
    胡斐阅读 642评论 3 4