Skip to content

Instantly share code, notes, and snippets.

@ideawu
Last active April 23, 2021 02:43
Show Gist options
  • Save ideawu/e16990e1b4a4e429fc5a52dbe3fe3109 to your computer and use it in GitHub Desktop.
Save ideawu/e16990e1b4a4e429fc5a52dbe3fe3109 to your computer and use it in GitHub Desktop.
多写入点数据同步
  • 多个节点组成一个 raft 组
  • 某个组可以作为另一个组的 slave, 从另一组同步 binlog
  • leader 负责从另一个组同步 binlog, followers 从 leader 处同步, 不走 raft
  • 两组 binlog 如何 merge?
@ideawu
Copy link
Author

ideawu commented Feb 27, 2021

LogEntry { zone_id, index, time, data }

Container { ctime }

Item { mtime }

binlog 遇到 DEL 指令时, 删除数据, 然后从指令时间戳之后开始 apply.

@ideawu
Copy link
Author

ideawu commented Feb 27, 2021

两个极端:

  1. apply 到一个副本, 发现乱序时, rollback
  2. 保留多个副本, 读的时候 merge

好的系统在这两个极端中间.

优化方向:

  • 减小副本的粒度, 例如把 logs 划分成不同的 chunk, 这样 rollback 的成本较小, 或者 merge 的成本较小
  • 减小操作粒度, rollback 时只针对某个 key
  • 尽可能往只有一个副本存在, 在可能的情况下, 消除多副本
  • 读的时候不要读多副本, 即使有多副本存在, 只读一个"主"副本

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment