评论列表

  • hackershare

    · ·

    If someone knows even a little about Spanner, the first question they have is: "How does CockroachDB provide external consistency without atomic clocks?"

  • kyon

    ·

    CockroachDB 在没有原子钟的情况下,如何保证分布式数据库的线性一致性。 分布式系统中,唯一时钟存在意义有两方面: 1. 保证有因果关系的事务,记录的时间戳与发生的前后顺序一致 2. 保证隔离性,类似于 innodb MVCC 中的序列号,用于确认 snapshot 可见性。 在 spanner 中,这两个方面都可以通过基于原子钟和 GPS 的 TrueTime 解决,而 CockroachDB 面向已有硬件的特性决定了没有原子钟支持,因此需要通过其他方式解决这两个问题。 对于 1,通过引入 causality token 解决:如果事务 B 由事务 A 引发,那么事务 B 会接收事务 A 传递的带有 timestamp 的 token,从而保证时间戳顺序与事务实际发生顺序一致。 对于 2,通过 uncertainty restart 解决:选取发起事务节点的当前时间 T,然后取 [T, T+maximum clock offset] 不确定区间,那么事务执行过程中,如果快照时间戳小于 T 或者大于 T+maximum clock offset,事务和快照的先后顺序都是确定的,如果遇到时间戳落在这个区间内的快照,就无法确定快照发生时间和事务发起时间的前后,那么对事务进行 uncertainty restart,相当于延后事务的启动时间,但是重启后,不确定区间的上限不变,这样缩小不确定区间,直到可以确定事务与快照的先后顺序。 另外,文中也区分了 Serial 和 Linear: 对于非分布式数据库,Linear 就是 Serial,因为一台机器只有一个时钟,所以先发生的事务时间戳肯定在前;而对于分布式场景下,由于不同节点的片上时钟可能有误差,就会导致事务实际发生时间与记录的时间戳顺序不一致,这就是非 Linear 但 Serial。

  • kyon

    ·

    啊,排版全部丢掉了啊!

  • 评论增强我们优先安排下,现在是不好用😂

用户信息

@kyon
趾高气扬一头呆鹅