关于时间和事件定序

时间就是过去、现在、将来的一系列事件的集合,如果世界是静止的,时间就没有意义。如果我们将事件看成这个世界的本质,那么[1]里面提到的happen before就意义非凡,在这种场景下,时间并不重要,事件定序才是第一需求。

定序有两种基本思路,一种是假设世界存在一个绝对的物理时间(这玩意是否存在我不确定,似乎只是人类赋予的一个符号),永远以匀速向前推进,且所有发生事件的主体都可以获得这个时间,这样所有的事件也自然而然在时间轴上获得了自己的位置,定序十分简单。然而获得或者模拟这样一个抽象的物理时间是一件复杂的事情,在实际实现的时候可以做一定的弱化处理。

思路一,在一个小的系统里面,自己定义一个时钟源,所有主体在send/local/receive事件发生时都向这个时钟源获得时间,一些分布式系统采用了这种机制,简单直接。这个时钟源可以发出逻辑信号,比如1 2 3(Logical Clock, [1]),也可以同时考虑物理信号(Hybrid Logical Clock. [2]. 比起LC,HLC给时钟赋予了一定的自然意义,其分配的时钟跟物理时钟的偏差被控制在一定范围内,易于理解或者与外部系统对接)。这种架构中,单点带来的性能、可用性、运维效率等问题,需要额外的机制解决(系统里面特殊的角色越少越好,最终会不会演进到share nothing成为主流呢?也很难,在某一个层次上有一个或者多个协调者更符合一般认知)。

思路二,在基础雄厚的大公司,可以直接模拟绝对时间,比如原子钟以及在此基础上形成的时间同步系统。这套机制建立起来后,可以承担一个分布在广泛地理区域的,庞大复杂的分布式系统的定序问题,为分布式系统的实现奠定基础。目前似乎只有Spanner的TT公开发表过。

思路三,直接从本质出发,绝对时间是为了解决定序的,所以可以绕开绝对时间考虑其他思路,比如相对时间。在这个思路下,为每个事件主体分配独立递增的时钟源,然后在相互作用的主体之间分享各自的时钟源状态,最终将能够对所有相关事件进行排序。而那些不相关事件,可以通过对事件主体定序(比如ID排序)从而解决定序问题。通过这种思路,我们一样能够得到所有事件的序,那么绝对时间就不是必要的了。在这个系统里面,各个主体的独立性是最强的(只有在需要的时候才跟其他主体发生作用),也意味着系统扩展性是最好的。不过必须认识到,如果系统里面太多的主体之间发生相互作用,就会导致每个主体维护其他主体时钟状态的开销十分可观。Vector clock是这种思想的一个产物,其复杂性也反映了这种思路的复杂性[3]。对于这种复杂性,解决思路一般是想办法减少参与主体的个数,或者想办法丢弃一部分历史状态。但是反过来想,如果我们的某个系统要求高扩展性,且参与主体个数可控,历史状态简单(比如线性),这种思路不失为一个好的备选项。

对分布式系统有了一点认识之后,回来再看一些说法,也很值得玩味。

A system is distributed if the time it takes to send a message from one process to another is significant compared to the time interval between events in a single process. [1]. 随着网络越来越快,分布式系统是否可能出现新的特征?

The term partial is used to indicate that it is not necessary for any two elements of the set to be related in some way. [1]. 偏序的抽象定义。具体一点可以说,存在两个事件,其序不可比。全序就是在此基础上加一个约束,所有的事件,其序都可比。

The causality rela- tionship captured (by LC), called happened-before (hb), is defined based on passing of information, rather than passing of time. [2]. 本质是事件。

The reason for seeing very low l – pt and c values in the WAN deployment is because the message communication delays across WAN are much larger than the e, the clock synchronization uncertainty. [2]. 试验分析。随着网络越来越快,这个试验结果会变,可能导致c占用更多的bit,虽然不影响正确性,可能影响可用性(等待新时钟)。对于新系统,是否一开始就分离pt和c更好?

[1]. Time, Clocks, and the Ordering of Events in a Distributed System

[2]. Logical Physical Clocks and Consistent Snapshots in Globally Distributed Databases

[3]. http://basho.com/posts/technical/why-vector-clocks-are-hard/

[4]. 封面图来自[1]

    原文作者:杨东东
    原文地址: https://zhuanlan.zhihu.com/p/28826428
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞