返回顶部
首页 > 资讯 > 精选 >web分布式系统时间、时钟和事件顺序是什么
  • 562
分享到

web分布式系统时间、时钟和事件顺序是什么

2023-06-04 05:06:07 562人浏览 八月长安
摘要

这篇文章主要介绍“WEB分布式系统时间、时钟和事件顺序是什么”,在日常操作中,相信很多人在web分布式系统时间、时钟和事件顺序是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”web分布式系统时间、时钟和事

这篇文章主要介绍“WEB分布式系统时间、时钟和事件顺序是什么”,在日常操作中,相信很多人在web分布式系统时间、时钟和事件顺序是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”web分布式系统时间、时钟和事件顺序是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

物理时钟 vs 逻辑时钟

可能有人会问,为什么分布式系统不使用物理时钟(physical clock)记录事件?每个事件对应打上一个时间戳,当需要比较顺序的时候比较相应时间戳就好了。

这是因为现实生活中物理时间有统一的标准,而分布式系统中每个节点记录的时间并不一样,即使设置了 NTP 时间同步节点间也存在毫秒级别的偏差[1][2]。因而分布式系统需要有另外的方法记录事件顺序关系,这就是逻辑时钟(logical clock)。

web分布式系统时间、时钟和事件顺序是什么

Lamport timestamps

Leslie Lamport 在1978年提出逻辑时钟的概念,并描述了一种逻辑时钟的表示方法,这个方法被称为Lamport时间戳(Lamport timestamps)[3]

分布式系统中按是否存在节点交互可分为三类事件,一类发生于节点内部,二是发送事件,三是接收事件。Lamport时间戳原理如下:

web分布式系统时间、时钟和事件顺序是什么

图1: Lamport timestamps space time (图片来源: wikipedia)

  1. 每个事件对应一个Lamport时间戳,初始值为0

  2. 如果事件在节点内发生,时间戳加1

  3. 如果事件属于发送事件,时间戳加1并在消息中带上该时间戳

  4. 如果事件属于接收事件,时间戳 = Max(本地时间戳,消息中的时间戳) + 1

假设有事件a、b,C(a)、C(b)分别表示事件a、b对应的Lamport时间戳,如果C(a) < C(b),则有a发生在b之前(happened before),记作 a -> b,例如图1中有 C1 -> B1。通过该定义,事件集中Lamport时间戳不等的事件可进行比较,我们获得事件的偏序关系(partial order)。

如果C(a) = C(b),那a、b事件的顺序又是怎样的?假设a、b分别在节点P、Q上发生,Pi、Qj分别表示我们给P、Q的编号,如果 C(a) = C(b) 并且 Pi j,同样定义为a发生在b之前,记作 a => b。假如我们对图1的A、B、C分别编号Ai = 1、Bj = 2、Ck = 3,因 C(B4) = C(C3) 并且 Bj < Ck,则 B4 => C3。

通过以上定义,我们可以对所有事件排序、获得事件的全序关系(total order)。上图例子,我们可以从C1到A4进行排序。

Vector clock

Lamport时间戳帮助我们得到事件顺序关系,但还有一种顺序关系不能用Lamport时间戳很好地表示出来,那就是同时发生关系(concurrent)[4]。例如图1中事件B4和事件C3没有因果关系,属于同时发生事件,但Lamport时间戳定义两者有先后顺序。

Vector clock是在Lamport时间戳基础上演进的另一种逻辑时钟方法,它通过vector结构不但记录本节点的Lamport时间戳,同时也记录了其他节点的Lamport时间戳[5][6]。Vector clock的原理与Lamport时间戳类似,使用图例如下:

web分布式系统时间、时钟和事件顺序是什么

图2: Vector clock space time (图片来源: wikipedia)__

假设有事件a、b分别在节点P、Q上发生,Vector clock分别为Ta、Tb,如果 Tb[Q] > Ta[Q] 并且 Tb[P] >= Ta[P],则a发生于b之前,记作 a -> b。到目前为止还和Lamport时间戳差别不大,那Vector clock怎么判别同时发生关系呢?

如果 Tb[Q] > Ta[Q] 并且 Tb[P] < Ta[P],则认为a、b同时发生,记作 a <-> b。例如图2中节点B上的第4个事件 (A:2,B:4,C:1) 与节点C上的第2个事件 (B:3,C:2) 没有因果关系、属于同时发生事件。

Version vector

基于Vector clock我们可以获得任意两个事件的顺序关系,结果或为先后顺序或为同时发生,识别事件顺序在工程实践中有很重要的引申应用,最常见的应用是发现数据冲突(detect conflict)。

分布式系统中数据一般存在多个副本(replication),多个副本可能被同时更新,这会引起副本间数据不一致[7],Version vector的实现与Vector clock非常类似[8],目的用于发现数据冲突[9]。下面通过一个例子说明Version vector的用法[10]

web分布式系统时间、时钟和事件顺序是什么

图3: Version vector

  • client端写入数据,该请求被Sx处理并创建相应的vector ([Sx, 1]),记为数据D1

  • 第2次请求也被Sx处理,数据修改为D2,vector修改为([Sx, 2])

  • 第3、第4次请求分别被Sy、Sz处理,client端先读取到D2,然后D3、D4被写入Sy、Sz

  • 第5次更新时client端读取到D2、D3和D4 3个数据版本,通过类似Vector clock判断同时发生关系的方法可判断D3、D4存在数据冲突,最终通过一定方法解决数据冲突并写入D5

Vector clock只用于发现数据冲突,不能解决数据冲突。如何解决数据冲突因场景而异,具体方法有以最后更新为准(last write win),或将冲突的数据交给client由client端决定如何处理,或通过quorum决议事先避免数据冲突的情况发生[11]

由于记录了所有数据在所有节点上的逻辑时钟信息,Vector clock和Version vector在实际应用中可能面临的一个问题是vector过大,用于数据管理的元数据(meta data)甚至大于数据本身[12]

解决该问题的方法是使用server id取代client id创建vector (因为server的数量相对client稳定),或设定最大的size、如果超过该size值则淘汰最旧的vector信息[10][13]

到此,关于“web分布式系统时间、时钟和事件顺序是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: web分布式系统时间、时钟和事件顺序是什么

本文链接: https://lsjlt.com/news/236613.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • web分布式系统时间、时钟和事件顺序是什么
    这篇文章主要介绍“web分布式系统时间、时钟和事件顺序是什么”,在日常操作中,相信很多人在web分布式系统时间、时钟和事件顺序是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”web分布式系统时间、时钟和事...
    99+
    2023-06-04
  • redis文件事件和时间事件是什么
    今天小编给大家分享一下redis文件事件和时间事件是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2024-04-02
  • Linux中系统时间和硬件时间有什么关系
    在Linux系统中,系统时间和硬件时间之间存在着密切的关系。系统时间是指Linux系统中的运行时间,由操作系统维护和管理,可以通过系...
    99+
    2024-04-02
  • web分布式系统CAP的概念是什么
    这篇文章主要讲解了“web分布式系统CAP的概念是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web分布式系统CAP的概念是什么”吧!引言CAP是分布式系统、特别是分布式存储领域中被讨...
    99+
    2023-06-04
  • Linux文件分布式系统是什么
    这篇文章主要介绍“Linux文件分布式系统是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux文件分布式系统是什么”文章能帮助大家解决问题。Lustre(www.lustre.org)  ...
    99+
    2023-06-28
  • web分布式系统的基本概念是什么
    这篇文章主要讲解了“web分布式系统的基本概念是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web分布式系统的基本概念是什么”吧!1、分布式小明的公司又3个系统:系统A,系统B和系统C...
    99+
    2023-06-04
  • Linux系统文件中的三个时间是什么
    这篇文章主要介绍了Linux系统文件中的三个时间是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux系统文件中的三个时间是什么文章都会有所收获,下面我们一起来看看吧。在Linux系统中文件涉及到三个时...
    99+
    2023-06-27
  • 分布式文件系统FastDFS的原理是什么
    今天就跟大家聊聊有关分布式文件系统FastDFS的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是FastDFS?FastDFS是一个开源的轻量级分布式文件系统。它解决...
    99+
    2023-06-16
  • Python开发注意事项:处理并发和分布式系统时的注意事项
    Python开发注意事项:处理并发和分布式系统时的注意事项随着互联网的快速发展,越来越多的软件系统需要处理并发性和分布式计算。Python作为一种灵活且易于使用的编程语言,被广泛应用于这些领域。然而,处理并发和分布式系统时,Python开发...
    99+
    2023-11-23
    注意事项 Python并发编程 分布式Python
  • 分布式系统中使用 PHP API 时需要注意什么?
    随着互联网的不断发展,分布式系统已经成为了现代互联网架构中不可或缺的一部分。在这样的架构中,PHP API 成为了连接不同服务的重要桥梁。然而,在使用 PHP API 的过程中,我们需要注意一些问题,以确保分布式系统的可靠性和稳定性。 网...
    99+
    2023-07-26
    api 分布式 npm
  • Numpy分布式文件系统的Java实现方法是什么?
    Numpy是Python中用于科学计算的重要库之一。其中,Numpy的分布式文件系统提供了一种方便的方法来存储和处理大数据。但是,如果我们想在Java中使用Numpy分布式文件系统,应该如何实现呢? 实现方法 在Java中使用Numpy分...
    99+
    2023-07-28
    文件 分布式 numpy
  • vc控制台程序关闭事件时的处理方式是什么
    本篇内容介绍了“vc控制台程序关闭事件时的处理方式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!关键控制台API函数:SetConso...
    99+
    2023-06-21
  • 分布式存储系统中,PHP和Apache的作用是什么?
    分布式存储系统是一种通过网络连接多个计算机来存储和访问数据的系统。在这种系统中,PHP和Apache扮演着非常重要的角色。PHP是一种脚本语言,主要用于开发Web应用程序,而Apache则是一种Web服务器软件。本文将深入探讨它们在分布式...
    99+
    2023-09-30
    分布式 存储 apache
  • 分布式系统开发中,Python和Bash的优势分别是什么?
    在分布式系统开发中,Python和Bash是两种常用的编程语言。Python是一种高级编程语言,可以用于各种应用开发,而Bash则是一种解释性的Unix shell,主要用于自动化任务和系统管理。那么在分布式系统开发中,Python和Bas...
    99+
    2023-09-21
    bash 分布式 javascript
  • 分布式系统中Java语言的优势和劣势是什么?
    随着互联网的迅猛发展,分布式系统的应用越来越广泛。Java作为一种广泛使用的编程语言,也在分布式系统中发挥着重要的作用。本文将探讨Java在分布式系统中的优势和劣势,并通过演示代码来具体说明。 一、Java语言在分布式系统中的优势 跨平...
    99+
    2023-10-09
    分布式 关键字 numy
  • Oracle Gateway for SQL Server时2PC分布式事务异常处理的方法是什么
    这篇文章主要讲解了“Oracle Gateway for SQL Server时2PC分布式事务异常处理的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和...
    99+
    2024-04-02
  • Python和Bash:它们在分布式系统中的角色分别是什么?
    在分布式系统中,Python和Bash都有着非常重要的作用。Python是一种高级编程语言,它具有丰富的库和框架,可以轻松地处理各种任务。Bash是一种Unix shell,它可以在命令行中执行各种任务。本文将介绍Python和Bash在...
    99+
    2023-09-20
    bash 异步编程 分布式
  • win10开机黑屏好长时间才可以进系统软件是怎么回事
    许多朋友在应用计算机的过程中都是会遇到过开机黑屏的状况,近期有网民体现自身的win10开机黑屏好长时间才进系统软件,不清楚win10开机黑屏久是为什么.下边小编就给各位剖析下win10电脑上开机黑屏时间长的缘故和解决方案.点一下桌面的鼠标右...
    99+
    2023-07-14
  • Java关键字和API在分布式系统中的作用是什么?
    随着信息技术的不断发展,分布式系统已经成为了现代软件开发中不可或缺的一部分。在分布式系统中,Java作为一种通用的编程语言,具有很高的灵活性和可移植性,因此得到了广泛应用。在本文中,我们将探讨Java关键字和API在分布式系统中的作用。 ...
    99+
    2023-10-23
    关键字 分布式 api
  • Numpy在Java分布式系统中的优势和应用场景是什么?
    Numpy是一个开源的数学库,它为Python提供了快速、高效的多维数组操作。然而,Numpy不仅仅适用于Python。在Java分布式系统中,Numpy也有着广泛的应用。本文将介绍Numpy在Java分布式系统中的优势和应用场景。 优势...
    99+
    2023-09-18
    分布式 django numpy
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作