原文链接 Database Replication in System Design - GeeksforGeeks
目录
什么是数据库复制(Database Replication)
2,Master-Master Replication(or Bidirectional Replication)
不同复制配置的选择要考虑的因素(What Factors to consider when choosing a Replication Configuration?)
1,数据一致性的需求(Data Consistency Requirements)
2,性能需求(Performance Requirements)
3,带宽和延迟(Network Bandwidth and Latency)
4,故障转移和高可用(Failover and High Availability)
5,数据丢失的容忍度(Data Loss Tolerance)
Benefits of Database Replication
Challenges of Database Replication
什么是数据库复制(Database Replication)
在不同服务器上创建和维护数据库的重复副本。提高数据的
可用性(availability)
通过跨多个服务器复制数据,组织可以确保即使一个服务器发生故障,他们的数据仍然可以访问。
可靠性(reliability)
这种冗余(redundancy)也提高了数据可靠性,因为在数据损坏或丢失( corruption or loss)的情况下,有多个副本可用于恢复数据。
可扩展性(scalability)
可以帮助在服务器之间分配工作负载,提高性能和可扩展性。
为什么需要 Database Replication
1,高可用(High Availability)
即使一个或多个服务器发生故障,复制也能确保数据可用。应用不会中断。
2,灾难恢复(Disaster Recovery)
有副本,可快速恢复。
3,负载均衡(LB)
复制允许在多个服务器上分发读取查询,从而减少任何单个服务器上的负载并提高性能。
4,容错性(Fault Tolerance)
一台服务器发生故障,另一台服务器快速接管,从而提高了容错性。
5,可扩展性(Scalability)
复制可以通过允许在多个服务器上分布写操作来提高可扩展性,从而减少任何单个服务器上的负载。
6,数据地点(Data Locality)
复制可用于使数据更接近用户,减少延迟并改善用户体验。
Database Replication的方式
1,Master-Slave Replication
从一个主要的(primary)数据库(master)复制和同步数据到 一个或多个次要(second)数据库(slaves)。
primary database - master负责接收所有的写操作。
所有对master的操作同步到 second database - slaves 。
2,Master-Master Replication(or Bidirectional Replication)
也被称为双向复制(bidirectional replication)。
拥有多个master,每个master都可以接收写操作。master之间相互同步。
如果有master之间同步时遇到冲突问题,需要冲突解决机制(conflict resolution mechanisms)来确保数据一致性。
双写(多个master)能保证不中断的数据写入。
3, Snapshot Replication
意思是 在特定的时间点复制整个数据库。
这种方式主要用于报告,备份,分布式数据库等目的。
4,Transactional Replication
事务复制是一种实时保持数据库多个副本同步的方法。
这意味着对一个称为发布者的数据库中的特定表(或一组表)所做的任何更改都会立即复制到其他称为订阅者的数据库中。
这确保了数据的所有副本在任何给定时刻都是相同的,从而在多个位置提供数据一致性。
5,Merge Replication
合并复制是一种数据库同步方法,允许中央服务器(发布者)及其连接的设备(订阅者)对数据进行更改,在必要时解决冲突。
该定义以简洁准确的方式抓住了合并复制的关键本质,突出了其两个主要特征:
双向同步(Two-way synchronization):
与事务复制不同,事务复制的更新主要从发布者流向订阅者,合并复制允许双向数据流。这意味着即使在离线状态下,中央服务器和设备也可以修改数据。
冲突解决(Conflict resolution):
当多方编辑同一数据时,冲突必然会发生。合并复制采用预定义的规则或用户干预来解决冲突的更改,确保所有副本之间的数据一致性。
Database Replication的策略
策略定义了数据是如何被选取,复制和跨数据库分发来实现扩展性,可用性或高效性。
1,Full Replication(whole database replication)就是整个数据库复制。
2,Partial Replication 只复制一部分数据库。
3,Selective Replication 根据预定义的条件筛选数据,属于更细粒度的控制(more granular control)。
4,Sharding
分片是一种数据库扩展技术,涉及基于键在多个数据库实例(分片)之间对数据进行分区。这种方法允许在多个服务器上分配工作负载和数据存储,从而提高可扩展性和性能。分片通常用于单个数据库服务器无法处理应用程序的负载或存储要求的环境中。
例子:
一家在线游戏公司根据地理位置对其用户数据库进行分片,每个分片负责特定地区的用户。这通过在多个服务器上分布工作负载和数据存储来提高可扩展性。
5,Hybrid Replication 多种策略混合使用
数据库复制的配置
1,同步复制配置
同步复制是一种数据库复制方法,其中数据更改实时复制到一个或多个副本,在至少一个副本确认收到更改之前,事务不会被视为已提交。此方法可确保主数据库及其副本始终保持同步,从而提供高度的数据一致性。
(Synchronous replication is a database replication method in which data changes are replicated to one or more replicas in real-time, and the transaction is not considered committed until at least one replica has acknowledged receiving the changes. This method ensures that the primary database and its replicas are always in sync, providing a high level of data consistency.)
作者这里应该笔误,根据下图,应该说的是所有都确认收到才算已提交。要不然和下面的半自动一样了。
2,异步复制的配置
异步复制是一种数据库复制方法,其中在主数据库上进行数据更改后,将数据更改复制到一个或多个副本,而无需等待副本的确认。
此方法允许在主数据库上更快地处理事务,但可能会导致主数据库和副本之间的数据一致性略有延迟
3,半同步复制配置
这种方法在强数据一致性和改进的性能之间实现了平衡。
不同复制配置的选择要考虑的因素(What Factors to consider when choosing a Replication Configuration?)
1,数据一致性的需求(Data Consistency Requirements)
Synchronous replication强一致,但性能低。
asynchronous replication性能高,但一致性会延迟(最终一致性问题)。
2,性能需求(Performance Requirements)
Synchronous replication 有延迟
asynchronous replication 性能有改善,但数据滞后(data lag)。
3,带宽和延迟(Network Bandwidth and Latency)
Synchronous replication 占更多带宽,且对网络延迟敏感。
asynchronous replication 可容忍网络问题。
4,故障转移和高可用(Failover and High Availability)
Synchronous replication 提供了立刻转移能力,但高延迟。
asynchronous replication 转移延后,但性能高。
5,数据丢失的容忍度(Data Loss Tolerance)
Synchronous replication数据丢失降到最低,但影响性能。
asynchronous replication 复制失败则造成数据丢失。
Benefits of Database Replication
High Availability
数据库复制提供冗余,确保如果一个数据库服务器发生故障,另一个服务器可以接管,从而最大限度地减少停机时间并确保数据的连续可用性。
Improved Performance
通过在多个副本之间分发读取查询,数据库复制可以提高读取性能,因为每个副本都可以处理一部分工作负载。
Disaster Recovery
复制的数据可用于灾难恢复目的,确保数据得到保护,并在发生灾难时可以恢复。
Scalability
数据库复制可以通过将读取操作分布在多个副本上来帮助扩展读取操作,从而在工作负载增加时实现更好的性能。
Load Balancing
复制可用于负载平衡,将写操作分布在多个服务器上,以防止任何单个服务器成为瓶颈。
Challenges of Database Replication
Data Consistency
保持副本之间的一致性可能具有挑战性,特别是在异步复制场景中,复制数据可能会延迟。
Complexity
数据库复制增加了系统的复杂性,需要仔细的配置和管理,以确保数据正确有效地复制。
Cost
设置和维护复制数据库环境的成本可能很高,特别是对于具有多个副本的大规模部署。
Conflict Resolution
在多主复制场景中,当在不同副本上同时修改相同的数据时,可能会出现冲突,需要冲突解决机制。
Latency
同步复制在提交事务之前需要副本的确认,这可能会引入延迟并影响主数据库的性能。