设计数据密集型应用-第五章-备份机制(单机可存全量的问题和方案)

在互联产品中,为了使产品服务满足高可用,可扩展(规模),防延迟等性能指标,普遍涉及到数据备份的问题(本章主要讨论的单机可存全量的业务场景),即将数据在不同节点机器中进行备份(其中涉及到很多同步细节的问题)。

根据机器节点的相互关系,可以将数据备份整体架构分一下三种:

  • 一主多从备份方式
  • 多主多从备份方式
  • 无主多从备份方式
架构模式 同步方式 写模式 读模式 特点
一主多从 实时同步/异步同步 写主库,根据接受到的请求逐一添加 普遍读从库 从库和主库的同步,普遍是一实时同步,多异步同步(需要考虑自身的业务情况)
如果存在多实时同步的从库,可能导致,一个写的请求部分失败(部分从句失连或者crash)或者耗时较长(需要所有实时同步从句返回成功写入);
但是如果是非实时同步,会存在读取的信息是”过时”信息;
存在一些确保读写一直的小技巧(可在代码应用层添加), i.e. Read-After-Write (如果读频繁更新的信息,只读主库), Monotonic-Read(使用户只从一个特定的从库读)
多主多从 实时同步/异步同步 写主库 读从库 涉及到写多主库的冲突问题(借助书中的一张图,见下图),可能的解决方案
1. 特定类型的写操作指引到特定的主节点(Conflict Avoidance) 2. 记录每一个写操作,经下次读操作,由用户来确定最后值;
无主多从 异步同步 写从库 读从库 法定人数读写规则 (w + r > n), 即读和写时的节点数之和要大于总节点数,以确保至少有一个节点更新和读到一个最新状态的节点;

设计数据密集型应用-第五章-备份机制(单机可存全量的问题和方案)