1. 本周读的是 Time and order ([http://book.mixu.net/distsys/time.html](http://book.mixu.net/distsys/time.html)). 我的理解是时间和排序。这篇文字和上周的 CAP ( Consistency, Availability, Partition tolerence ) 理论有一些关系。时间和排序在分布式系统中,它的 过程的表现及数据结果,其实和 Consistency, Availability 有关系。按照业务系统进行选择取舍。

Time 和 Order 的概念

  1. Time 如果在一开始理解的话,它是我们认知的时间(秒、小时、日、月、年)。从某种意义上说,时间就像其他任何整数计数器一样。它足够重要,大多数计算机都有专用的时间传感器,也称为时钟(Clock).<br /> Timestamp 时间戳是表示从宇宙开始到当前时刻的世界状态的简写值。当我们假设世界到处都以同样的速度进行,在程序当中,时间和时间戳会有以下几种解释/性质: 1. Order 顺序。时间是顺序的来源。我们可以将时间戳附加到无序事件来对它们排序。我们可以使用时间戳来强制执行特定的操作顺序或消息的传递。我们可以使用时间戳的值来确定某事物是否在其他事物之前按时间顺序发生。 2. interpretations解释。时间作为普遍可比的价值。时间戳的绝对值可以解释为日期。 3. duration 持续时间。及时策略的持续时间和现实世界有一定的关系。算法通常不关心时钟的绝对值或其作为日期的解释,但是它们可能使用持续时间来进行一些判断调用。特别是,等待的时间量可以提供系统是 分区 只是经历高延迟 的线索。<br /> Order 某个集合的每个元素的顺序。当然我们很自然而然地使用时间或时间戳来排序,或者别的排序规则。如果不使用时间来排序呢,我们可以想 Git 分支,不同的分支它们都是独立的个体,你没法给他排序。分布式系统中,自然地状态是部分排序(而不是一个汇总的排序,因为我们希望分布式系统如同一个单体计算机)。<br /> 关于时间和时钟,这里有一个很有意思的问题和假设: 每个地方的时间以相同的速度进步吗?于是引出了三个概念。全球时钟、本地时钟、无时钟。<br /> 无时钟的话: 有逻辑时间的概念。在这里,我们根本不使用时钟,而是以其他方式跟踪因果关系。请记住,时间戳只是世界状态的简写,因此我们可以使用计数器和通信来确定是否在其他事物之前,之后或同时发生了某些事情。<br /> 对于全局时钟: 允许订购两台不同机器上的操作,而两台机器不直接通信。如果没有全局时钟,我们需要进行通信以确定顺序。<br /> 对于无时钟,事件可以使用计数器在单个系统上进行排序而不进行通信,但是跨系统排序事件需要进行消息交换。

如何在分布式系统中使用时间?

  1. Time 时间有什么好处?1. 时间可以定义整个系统的顺序(没有通信) 2. 时间可以定义算法的边界条件<br /> Order 事件的顺序在分布式系统中很重要,因为分布式系统的许多属性是根据操作/事件的顺序定义的:<br /> 正确性取决于(协议)正确的事件排序,例如分布式数据库中的可序列化<br /> 当资源争用发生时,可以将订单用作平局判断器,例如,如果窗口小部件有两个订单,则执行第一个订单并取消第二个订单<br /> 所以在使用时间的时候会涉及到: 矢量时钟、故障检测器