2021-09-02

Binlog 和 Redolog 的区别

Views: 15547 | Add Comments

在开发分布式数据库的过程中, Binlog 和 Redolog 是非常重要的两个概念, 两者的作用似乎相同, 但实际上各有各的使用场景. 从多副本复制一致性的角度看, Binlog 用于强一致性, Redolog 用于最终一致性.

Binlog 可包含非幂等的指令, 例如 incr 指令. Redolog 只能包含幂等的指令, 例如 set 指令.

全球跨地域同步最终一致, 能不能复制 Binlog 呢? 绝对不行! 使用 incr 和 set 指令的组合, 在不同的地域写入数据, 很容易就能发现可造成数据不一致(相同)的场景, 而且几乎无法避免(除非副本带有回滚功能). 而如果同步的是 Redolog 的话, 通过复合时间戳, 是可以实现多副本的最终一致的.

对于强一致的多副本, 能不能复制 Redolog 呢? 似乎是可行的. 例如, 收到 incr 指令, 可以先转换成对应的 set 指令. 但是, 共识过程可能耗费较长时间, 如果这时再来一个 incr 指令, 则必须将这个指令阻塞(因为两个指令有依赖), 否则生成的 set 指令将是错误的. 而如果复制的是 Binlog, 则没有这个问题, 两个 incr 指令可以并发地进行共识流程.

如果你还是不死心, 还是想在强一致性的多副本之间复制 Redolog, 行不行? 刚才得到的问题也有解决方案, 不过, 复杂度太大, 可能的解决方案也许还要引入更多的问题, 你最好放弃.

串行化是简化问题的最高效方案, 可以简化依赖的处理, 避免不必要的引用. 所以, 越早串行化越好, 对 Binlog 达成共识, 可以避免对 Redolog 达成共识可能造成的回滚问题. 一条 Binlog 如果共识不了, 换个位置尝试共识即可, 计算成本很小. 如果生成 Redolog 再共识, 一旦共识不了, 就要回滚重新生成 Redolog 再尝试共识.

Related posts:

  1. Binlog, Redolog 在分布式数据库系统中的应用
  2. MySQL binlog查看和清理
  3. 关于多写入点数据库集群的一些想法
  4. 数据库内核的并发控制
  5. SSDB源码分析 – 主从和多主同步原理解析
Posted by ideawu at 2021-09-02 21:29:51

Leave a Comment