- 多个节点组成一个 raft 组
- 某个组可以作为另一个组的 slave, 从另一组同步 binlog
- leader 负责从另一个组同步 binlog, followers 从 leader 处同步, 不走 raft
- 两组 binlog 如何 merge?
Last active
April 23, 2021 02:43
-
-
Save ideawu/e16990e1b4a4e429fc5a52dbe3fe3109 to your computer and use it in GitHub Desktop.
多写入点数据同步
所谓的乱序 apply?
LogEntry { zone_id, index, time, data }
Container { ctime }
Item { mtime }
binlog 遇到 DEL 指令时, 删除数据, 然后从指令时间戳之后开始 apply.
两个极端:
- apply 到一个副本, 发现乱序时, rollback
- 保留多个副本, 读的时候 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
日志序列有如下属性:
理想的情况下, 每一条日志序列的时钟都能及时更新. 不过, 在网络分区时, 无法得到更新, 这时, 我们不希望系统停止工作, 所以继续工作, 等时钟更新之后, 再修复.