复制与冗余:区别和应用场景

16

我目前正在阅读有关分布式系统的内容,我面临着两个不同但描述方式相似的术语:复制冗余

有人可以逐一解释这两个术语吗?

5个回答

36
两个术语乍一看很相似,但它们之间有着显著的区别。 两个术语的共同之处在于它们都与系统中更多的节点/组件/进程有关。 1. 冗余 - 描述了系统中有多个节点/组件/进程,并且它非常有用于处理故障转移。如果其中一个节点失败,系统中的另一个节点可以接管并继续工作。冗余可以是: - 主动 - 将所有流量同时发送到所有节点 - 被动 - 一个节点接收流量,在发生故障时,会切换到另一个节点。 "冗余是节点的复制,以防止某些节点失效" 2. 复制 - 包括冗余,但涉及将数据从一个节点复制到另一个节点或在节点之间同步状态。一个应用复制技术的例子是形成集群的数据库或MQs。复制可以是: - 主动:每个节点接收每条消息,以保持与其余节点同步 - 被动:这是领导者-追随者模型,其中领导者接收所有请求,然后将它们转发给追随者。

"复制是冗余节点之间状态同步的过程。"


当我们需要高可用性时,通常会采用以下两种方式:冗余-主备模式(一个节点为主节点,另一个为备份节点)和复制-双活模式(两个节点都是活动节点)。 - Isabel Jinson

1

冗余: 重要组件(节点、进程)的复制,旨在实现可靠性。冗余有助于避免单点故障。例如,如果我们有两个运行实例,其中一个失败了,那么系统可以切换到另一个实例。

复制: 共享信息以确保冗余资源之间的一致性。


0

冗余可以提高可靠性,而复制则确保一致性


7
复制并不一定能够确保一致性。 - Jonas

0

在学习系统设计时,我对这些词感到困惑,但后来我从这里找到了一个简单的解释。

当你复制某物时,你得到的是一个几乎与原始物品相同但不完全相同的副本。通常原始物品和副本之间会有一些差异。例如,原始物品和其副本可以具有不同的大小。因此,复制背后的思想是,副本至少在其身份方面总是略微不同于原始物品。

至于另一个术语,复制过程的结果是一个副本,它是原始物品在所有方面上的完全相同的复制品。如果你复制房子的钥匙,那么副本将在所有方面上与原始钥匙完全相同。这意味着某物的副本与原件一样好,并且可以完全替代它,而这通常对副本不成立。


0

冗余性

冗余性是创建容错系统的术语。冗余性是指在系统中保留冗余容量(备份)以增加其可靠性。除了主要容量外,还保留了一种备用容量作为备份。

为了创建一个容错系统,我们有以下步骤:

  • 提供冗余性

  • 以自动化的方式构建系统,可以检测到发生的故障

  • 然后利用已提供的冗余性来恢复检测到的故障

有三种类型的冗余性:

1- 主动冗余性(热备份)

例如,飞机上的备用引擎。主引擎和备用引擎同时运行,如果主引擎故障,我们的系统将切换到备用引擎。

2- 被动冗余性(温备份):

就像足球比赛中的替补球员。它不像主动冗余那样快速。

3- 冷备份冗余(备份):

汽车备用轮胎。这会有显著的时间延迟。

复制

复制是数据库设计中使用的术语。它是减少延迟的数据复制过程。

在数据库设计中,最常见的设计是主/从设计。主节点用于写入数据,而从节点用于用户读取数据。如果主节点出现故障,我们的系统将把从节点分配为主节点。正如您所看到的,我们在这里具有冗余性,以防发生故障,我们会分配另一个组件来接管。

同步复制(原子)中,客户端将数据写入主节点后,相同的数据将传递到从节点。如果两个事务都成功,则提交此事务,否则,所有内容都将回滚以更改状态将导致更多的事务。这具有更高的延迟,但我们的主数据库和从数据库始终保持同步。因此,当主数据库崩溃时,从数据库将切换为主数据库,并且此操作将非常快速。这类似于飞机引擎的例子。通过同步复制,我们具有主动-主动冗余

在异步复制中,一旦数据被写入主节点,就会向客户端发送确认,然后将数据写入辅助节点。这样可以降低延迟,因为确认会更早地发送给用户。假设您有多个写请求,并将它们写入主节点,向用户发送确认,而这些数据正在传播到辅助节点,如果主节点崩溃,则辅助节点将缺少一些数据,您的系统将升级辅助节点为主节点,因此您的新数据库将缺少一些数据。在异步复制中,我们具有被动冗余。
数据库是一个有状态的组件,我们在这里复制状态。如果我们的系统更加读取密集型,那么我们可能需要更多的辅助(或读取)节点,以便在这里提供冗余和复制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接