lamport_soon

本文介绍了Lamport算法,一种在分布式系统中解决事件顺序问题的方法,通过逻辑时钟和向量时钟的概念来确定事件发生顺序,尽管不保证绝对时序,但能确保因果关系。文中详细解释了逻辑时钟的工作原理和向量时钟的优势。
摘要由CSDN通过智能技术生成

lamport_soon

  1. Lamport算法

    1. 时间戳
    2. 概念定义原理做法等
  2. 概述

    1. 逻辑时钟定义
  3. vector时钟 向量时钟

Lamport算法

时间戳
  • 用于表示时间的标记或编号,通常是一个数字或字符串。时间戳通常用于记录或标记事件发生的时间点,以便进行时间顺序排序、时间间隔计算、事件跟踪等操作。
  • 确定事件发生顺序
概念定义原理做法等
  • 旨在解决分布式系统中的事件顺序问题,即如何在不同的节点上准确确定事件的发生顺序
  • 核心思想是通过引入逻辑时钟(Logical Clock)来解决事件顺序问题。每个节点在事件发生时都会为事件分配一个逻辑时钟值。逻辑时钟是一个全局有序的计数器,它不同于物理时钟,不一定要与真实的时间同步。
  • 每个事件都有一个唯一的时间戳(逻辑时钟值)。
  • 如果事件A在事件B之前发生,那么A的时间戳应该小于B的时间戳。
  • 事件的时间戳由以下规则确定:
    • 对于本地事件(仅在一个节点上发生的事件),时间戳递增。
    • 当一个节点发送消息时,将消息的时间戳设置为发送节点的当前时间戳。
    • 当一个节点接收到消息时,将消息的时间戳更新为消息时间戳和接收节点的当前时间戳中的较大者加1。
  • 主要局限性是,它只关注事件的发生顺序,而不考虑事件的实际时间间隔
    • 初始化
      • 初始时,A 和 B 的逻辑时钟都为 0。
    • 事件发生
      • 在节点 A 上发生一个本地事件,例如,A 在本地生成了一个数据项:Event A1。此时,A 的逻辑时钟增加到 1,并将时间戳附加到事件上:Event A1 [1]
      • 然后,A 将 Event A1 发送给节点 B,时间戳为 1。
    • 接收事件
      • 当节点 B 接收到来自 A 的消息 Event A1 [1] 时,B 的逻辑时钟需要更新。
      • 首先,B 比较本地时钟(0)和消息时间戳(1),取较大值加1,于是 B 的逻辑时钟变为 2。
      • 然后,B 在接收到的事件上附加时间戳,创建一个新事件:Event A1 [2]
      • 现在,B 的事件顺序是 Event A1 [2]

概述

  • 同步化是分布式系统中的一个重要概念,同步化主要解决的是排序问题。例如:多个线程不能同时操作一个变量,而是将多个线程使用锁或无锁结构进行同步,同步的目的就是将多个线程排序为一个操作时序对这个变量进行操作。

  • 分布式系统中,一般用进程来抽象整个系统中的节点,一般理解为一个进程为一台计算机。

  • 在单个计算机中,时间是明确的。当进程想要获取时间时,进程就进行一次系统调用,然后操作系统内核就会返回时间给这个进程。

  • 计算中物理时钟的的主要问题是时钟偏移(clock skew)。通俗点描述时钟偏移就是钟摆摆动的偏移变慢或者变快或者时快时慢导致时钟不同步。

  • 物理时钟同步有一个很重要的点就是即使当前计算机时钟大于标准时间或UTC时间,那么这台计算机的物理时钟也是不会回退的,因为回退会造成很多问题,甚至是致命的问题。通常的解决方式是如果物理时钟过快就增加保持寄存器的值从而增加了时钟的振荡周期;如果物理时钟国漫就减少保持寄存器的值从而减少了时钟的振荡周期;以上都是通过一个过渡期来慢慢调整物理时钟从而达到与标准时间或UTC时间一致的结果。

  • Lamport逻辑时钟只保证因果关系(偏序)的正确性,不保证绝对时序的正确性。

  • 逻辑时钟定义
    1. 如果a和b是同一进程中的两个事件,且a在b之前发生,则a->b为真。
    2. 如果a是一个进程发送消息的事件,而b为另一个进程接受这个消息的事件,则a->b为真。
    3. 如果时间x和y发生在两个互不交换消息的进程中,那么x->y不为真,y->x也不为真,我们就称这两个事件是并发的
  • 实现Lamport逻辑时钟,每个时钟进程Pi维护一个局部计数器Ci,计数器按照如下步骤进行更新:

    • 执行一个事件之前,P执行Ci=Ci+1;
    • 当进程Pi发送一个消息m给Pj,在执行1的步骤后,把m的时间戳ts(m)设置为Ci;
    • 在接收到消息m时,进程Pj调整自己的局部计数器为Cj=max(Cj, ts(m)),然后执行第一步,即也加一,并把消息传送给应用程序。

vector时钟 向量时钟

  • 表示因果关系,可以靠箭头方向看出更精确的事件顺序
  • 向量时钟是通过让每个进程Pi维护一个向量VCi来完成的,向量时钟的有以下两个性质:
    1. VCi[i]是进程Pi截止到目前为止事件发生的数量(也就是自己进程发生的事件数量);
    2. 如果VCi[j]=K,那么进程Pi就知道进程Pj中已经发生了K个事件。因此,进程Pi知道了进程Pj的逻辑时间。
  • image
  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值