前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多主复制下处理写冲突(4)-多主复制拓扑

多主复制下处理写冲突(4)-多主复制拓扑

作者头像
JavaEdge
发布2022-08-01 08:22:11
4270
发布2022-08-01 08:22:11
举报
文章被收录于专栏:JavaEdge

复制的拓扑结构描述了写请求从一个节点传播到另一个节点的通信路径。若有两个主节点,如图-7,只有一个合理拓扑结构:M1必须把他所有的写同步到M2,反之亦然。当有两个以上M,各种不同拓扑都可能的。如图-8说明了一些例子。

图-8 三个可以设置多主节点的拓扑结构实例
图-8 三个可以设置多主节点的拓扑结构实例

最普遍的拓扑是全部到全部,即图-8 ©,每个M将其写入同步到其他所有M。

但也会使用更多受限制的拓扑:例如,MySQL仅支持环形拓扑(circular topology),其中每个节点接收来自前一个节点的写入,并将这些写入(加上自己的写入)转发给后序节点。

另一流行结构是星形形状1。一个指定的根节点将写入转发给所有其他节点。星型拓扑可以推广到树。

环形、星形拓扑

写请求需通过多个节点才能到达所有副本,即中间节点需要转发从其他节点收到的数据更改。为避免无限循环,每个节点需赋予一个唯一标识符,在复制日志中的每个写请求都标记了所有已经过的节点的标识符。当某节点收到用自己的标识符标记的数据更改时,该数据更改将被忽略,避免重复转发。

问题

若某节点故障,则可能会中断其他节点之间的复制消息流,导致它们无法通信,直到节点修复。拓扑结构可以重新配置为在发生故障的节点上工作,但在大多数部署中,这种重新配置必须手动完成。更密集连接的拓扑结构(例如全部到全部)的容错性更好,因为它允许消息沿着不同的路径传播,避免单点故障。

全部到全部的拓扑也可能问题。特别当一些网络链接可能比其他网络链接更快(网络拥塞),结果一些复制消息可能“超过”其他复制消息,如图-9。

图-9:多主复制,某些副本可能出现错误的写请求到达顺序
图-9:多主复制,某些副本可能出现错误的写请求到达顺序

客户端A向L1的表中插入一行,B在L3更新该行。然而,L2能以不同顺序接收写入:可先接收更新(从它的角度来看,是对数据库中不存在的行的更新),之后接收L1的插入日志(本该在更新日志之前到达)。

这是个因果关系问题,类似“一致前缀读”中的:更新依赖先前完成的插入,所以需确保所有节点先接收插入,再处理更新。在每次写日志里添加一个时间戳还不够,主要因为无法确保时钟完全同步,因而无法在L2上正确排序所收到的日志。

为正确排序日志消息,可使用版本向量。冲突检测技术在很多主节点复制系统中实现不够完善。如PostgreSQL BDR不提供写入的因果排序,Tungsten Replicator for MySQL甚至不尝试检测冲突。


  1. 不要与星型模式混淆,其描述了数据模型的结构,而非节点之间的通信拓扑。 ↩︎
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/07/31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环形、星形拓扑
    • 问题
    相关产品与服务
    云数据库 SQL Server
    腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档