分布式系统时间处理

2023-12-09 database

在分布式系统中,需要解决事务的时序问题,包括 MVCC、ACID 等,当前常用的有 Logical Clock、True Time、Hybrid Logic Clock、Timestamp Oracle 等。

这里简单介绍其基本概念。

简介

当前大部分的数据库会采用 Multi-Version Concurrency Control, MVCC 实现,从名字看就意味着需要类似时间戳的版本信息,不过这也不是必须的,例如 MySQL 采用 ReadView 就是基于事务 ID 以及活跃事务进行可见性判断。

无论如何,都需要有个单调全局递增的实现,可以是时间戳,也可以是事务 ID 等。

Lamport Clock

Lamport 在 1978 年中的 Time, Clocks and the Ordering of Events in a Distributed System 论文提出了逻辑时钟的概念,以此定义分布式系统中的先后顺序,本质上就定义了 Happen Before 关系。

其实现也很简单,需要遵守如下规则:

  • 每个事件对应一个 Lamport 时间戳,初始值为 0 。
  • 如果事件在节点内发生,那么时间戳加 1 。
  • 如果事件属于发送事件,时间戳加 1 并在消息中带上该时间戳。
  • 如果事件属于接收事件,时间戳为 Max(本地时间戳,消息中的时间戳) + 1 。