数据复制系统设计(2)-同步复制与异步复制

简介: 复制的重要可选项:同步复制,synchronously异步复制,asynchronously

复制的重要可选项:


同步复制,synchronously


异步复制,asynchronously


关系型DB 中,这通常是个可配置项,而其他系统通常是硬性指定或只能二选一。


如图-1案例,网站用户更新个人头像图片的流程:


客户向主节点发送更新请求

主节点收到请求。某刻,主节点又将数据更新转发给从节点

最后,主节点通知客户更新完成

图-2显示了系统各模块间通信情况。请求或响应标记为粗箭头。

8.png



图-2中:


从节点1是同步复制:主节点需等待直到从节点确认完成写,然后才通知用户报告完成,井将最新写入对其他客户端可见

从节点2异步复制:主节点发送完消息后立即返回,不等待从节点2完成确认

从节点2接收复制日志前存在一段长延迟。复制一般速度很快,大多DB系统能在1s内完成所有从节点更新。但并不保证复制耗时多久。有时,从节点可能落后主节点几min或更久,如从节点正在故障恢复或系统已接近最大设计上限或节点间存在的网络问题。


同步复制的


优点


一旦向用户确认,从节点可明确保证完成和主节点的更新同步,数据已处最新版本。若主节点故障,可确信这些数据仍能在从节点找到。


缺点


若同步的从节点无响应(比如它已崩溃或网络故障等原因),主节点的写操作就不能视为成功。主节点会阻塞后续所有写操作,直到同步副本再次可用确认完成。


因此,将所有从节点都设置为同步复制不切实际:任一同步节点的中断都会导致整个系统更新停滞。实践时,若DB启用同步复制,意味着其中某一从节点是同步的,而其他节点是异步模式。一旦同步的从节点不可用或性能降低,则将另一个异步的从节点提升为同步模式。这就保证至少有2个节点(主节点和一个同步从节点)拥有最新的数据副本。 这种配置有时也称为半同步(semi-synchronous)。


主从复制经常会被配置为全异步模式。 此时若主节点失效且不可恢复,则任何尚未复制到从节点的写请求都会丢失。那么,即使已向客户端确认成功,写入也不能保证数据的持久化。但全异步的优点是:不管从节点数据多么滞后,主节点也能总是继续响应写请求,系统吞吐量极高。


异步模式这种弱化的持久性听起来是个很不靠谱的trade off,但异步复制还是被广泛使用,尤其是从节点数量巨大或分布地理环境较广。

复制问题研究

异步复制系统,在主节点故障时可能丢数据。这是个严重问题,因此在保证不丢数据前提下,人们尝试各种方案提高复制性能和系统可用性。 如链式复制是同步复制的一种变体,已在一些系统(如Microsoft Azure存储)实现。


多副本一致性与共识之间密切联系(即让多个节点对数据状态达成一致)。本文主要专注于数据库实践中常用的、相对简单的复制技术方案。


目录
相关文章
|
7天前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
1月前
|
存储 关系型数据库 MySQL
MySQL主从同步如何保证数据一致性?
MySQL主从同步如何保证数据一致性?
60 0
MySQL主从同步如何保证数据一致性?
|
4月前
|
监控 NoSQL Redis
RedisShake如何处理数据同步过程中的冲突和一致性问题
RedisShake保障数据同步一致性,支持全量和增量同步,处理并发冲突(利用乐观锁机制),并进行数据校验。遇到故障能自动恢复和重试,保证不间断同步。同时,提供监控和日志功能,便于识别和解决问题,确保数据完整性。
171 0
|
4月前
|
数据库
异步复制与同步复制结合
异步复制与同步复制结合
70 4
|
11月前
|
SQL 关系型数据库 MySQL
MySQL主从同步原理
MySQL主从同步原理
109 0
|
监控 关系型数据库 MySQL
如何避免主从不同步
如何避免主从不同步
99 0
|
CDN
多主复制下处理写冲突(1)-同步与异步冲突检测及避免冲突
多主复制的最大问题:可能发生写冲突,这是必须要解决的。
127 0
|
存储 移动开发 运维
无主复制系统(3)-Quorum一致性的局限性
若有n个副本,且配置w和r,使得w + r > n w + r> nw+r>n,期望可以读到一个最新值。因为成功写入的节点集合和读取的节点集合必有重合,这样读取的节点中至少有一个具有最新值,如图-11。
127 0
|
关系型数据库 MySQL 数据库
MySQL的延迟复制、半同步复制,主主复制,异步复制有什么区别?底层原理是什么?
MySQL的延迟复制、半同步复制,主主复制,异步复制有什么区别?底层原理是什么?
289 0
|
SQL 存储 关系型数据库
PostgreSQL 流复制搭建主从环境,同步和异步的解释,压力测试,主从角色切换|学习笔记
快速学习PostgreSQL 流复制搭建主从环境,同步和异步的解释,压力测试,主从角色切换
897 0
PostgreSQL 流复制搭建主从环境,同步和异步的解释,压力测试,主从角色切换|学习笔记