什么是复制 (Replication)?为什么数据库需要复制?
2026年10月3日
数据复制 (replication) 是指同一份数据不只保存一份,而是同时存放在多个节点、机器或区域中。举例来说,内容分发网络 (CDN) 会把内容复制到多个地理位置,借此提高可用性(因为一个节点发生故障时,还有其他节点可用),同时降低延迟(让数据离用户更近)。
我们可以把复制理解为共置概念的进一步延伸。共置是指通过把数据放到更接近需求的地方来降低延迟;而复制意味着不同位置都有数据副本,因此每个拥有副本的区域都能从距离较近的副本获得响应,进而加快响应速度。
从延迟的角度看常见的数据复制策略
在实务中,有三种常见的数据复制策略,分别是单主节点复制 (single-leader)、多主节点复制 (multi-leader) 和无主节点复制 (leaderless)。下面会分别讨论这些模式与延迟之间的关系。
单主节点复制是指系统中有一个特定节点(也称为领导节点,leader)负责接受客户端的写入,其他节点则从主节点接收更新,让自己的数据副本保持同步。从架构角度来看,单主节点复制相对简单,但也会带来延迟问题。
因为写入只能发送到主节点,所以假如主节点位于美国,亚洲用户写入数据时,就需要一路传输到美国;与此同时,亚洲其他节点上的数据库副本也必须等待美国返回数据才能同步。对于全球性系统来说,这种架构会因为物理距离而增加延迟。
多主节点复制是单主节点复制的延伸,系统中会有多个领导节点,每个节点都能接受写入,再彼此同步。通常在单一数据中心的场景下,由于这种架构较复杂(例如不同主节点同时收到互相冲突的写入时,需要解决冲突),而且同一数据中心内机器之间的物理距离很近,因此不太会采用这种方式。但是在多数据中心场景下,从延迟角度来看,这种做法能带来很大的改善。
以上面的例子来说,亚洲用户写入数据时,不必一路发送到美国的主节点,而是可以直接写入亚洲区的主节点;同样地,美国和欧洲的写入也都可以直接发送到当地的主节点。这种做法省去了写入时的长距离传输,从而有效降低延迟。
当然,降低延迟并非没有代价。主节点数量增加后,系统需要处理更复杂的写入冲突、跨区域延迟,以及发生故障后主节点的恢复与重新同步问题。
无主节点复制是指所有节点的地位都相同,任何节点都能接受写入。从延迟角度来看,这种方式很有吸引力,因为客户端可以写入距离最近的可用节点,不必寻找特定的主节点。不过,由于任何节点都能接受写入,为了维持节点之间的一致性,系统也会面临额外的实现复杂度。
一致性与延迟取舍
从上面的讨论来看,复制并不难理解。但在实务中,要在不同区域维护多份数据副本,就必须面对“副本如何保持同步”的难题。副本同步牵涉到一致性问题:某笔数据写入后,是否会立刻出现在不同的数据副本中?如果不会立即出现,要等多久才能看到?
从单主节点到无主节点,都是延迟与一致性之间的取舍。不同程度的一致性会对应不同的延迟。如果必须等所有副本都同步数据后,用户才能读取,延迟就会提高;但如果想降低延迟,就必须承担部分副本尚未同步所带来的不一致问题。
实务中没有标准答案,需要根据不同情境选择合适的取舍。在每种情境下,都应该思考:“是否愿意为了更快的写入与读取速度,接受读到过期数据的可能?”或者:“是否希望用户永远看到最新数据,即使这意味着读取速度可能变慢?”
前面对于一致性与延迟取舍的讨论比较概括。实际上一致性更像一条光谱,从较强的一致性延伸到相对较弱的一致性。其中,最常听到的是强一致性 (strong consistency) 与最终一致性 (eventual consistency)。
强一致性承诺,即使系统中存在很多副本,对于应用程序来说,看起来仍然只有一份数据。每次操作都像是在同一份数据上进行,用户不需要知道背后其实有多份副本,应用层也不必担心读到旧数据。虽然这听起来很理想,但代价是延迟较高,因为系统需要反复确认副本都已更新,并在出现问题时重试;这些网络往返都可能增加延迟。
最终一致性不保证所有副本在当下都保持一致,但承诺副本之间的状态最终会趋于一致。举例来说,如果网络断线,某个副本的更新可能落后,导致用户看到旧数据。最终一致性可以接受这种暂时状态,而强一致性则不允许。
从希望用户永远看到最新数据的角度来看,最终一致性相对不理想;但从降低延迟的角度来看,它反而是许多低延迟系统的选择。最主要的原因是,最终一致性省去了昂贵的跨节点协调。相比在写入时就确认多个节点,最终一致性允许先完成本地节点的写入,再稍后同步其他节点。
举例来说,如果某次写入发生在亚洲区,在最终一致性的情况下,只要更新完亚洲区的副本就可以返回成功;但在强一致性的情况下,系统必须先与其他地区的副本完成必要协调,才能返回写入成功,这会增加跨区域网络往返所需的时间。相比之下,前者带给用户的延迟会低得多。
加入 E+ 会员方案
如果你觉得这篇分享有帮助,想阅读更深入的内容,欢迎加入 E+ 会员。除了有会员专属的深度文与影片,探讨前后端开发、AI 工程、职业发展,同时有 Discord 社群一同交流与成长。
许多 E+ 会员通过所任职公司的教育训练补助 (E+ 会开立有统编的发票),不用花自己的钱,也能每周通过深度主题文与社群交流,拓展技术视野、加速职业成长。