我目前正在阅读有关分布式系统的文章,我面临着两个以类似方式描述的不同术语:复制和冗余。
有人能部分解释一下每个术语吗?
这两个术语一开始看起来很相似,但它们之间有很大的区别。
这两个术语的共同部分是,每个术语都与系统中更多的节点/组件/进程有关。
- 冗余-描述了一个系统中有多个节点/组件/进程的事实,它对处理故障切换非常有用。如果您的一个节点发生故障,系统中的另一个节点可以接管并继续运行。冗余可以是:
- active-所有流量同时流向所有节点
- 被动-一个节点接收流量,在出现故障的情况下,将切换到另一个节点
";冗余是节点的重复,以防其中一些节点出现故障
- 复制-包括冗余,但涉及将数据从一个节点复制到另一个节点或节点之间的状态同步。复制的一个示例是在形成集群的数据库或MQ级别进行复制。复制可以是:
- 活动:每个节点接收每个消息,以便与其他节点保持同步
- 被动:这是领导者-追随者模型,领导者接收所有请求,然后将其转发给追随者
";复制是冗余节点之间的状态同步">
冗余:复制关键组件(节点、过程),以实现可靠性。冗余有助于避免单点故障。例如,如果我们有两个实例在运行,其中一个失败,那么系统可以切换到另一个。
复制:共享信息以确保冗余资源之间的一致性。
冗余增加了可靠性,而复制确保了一致性。
上限
Redundancy
是用于创建容错系统的术语冗余是指在系统中保留冗余容量(备份)以提高其可靠性。在主容量之上,备用容量作为备份随时可用。为了创建容错系统,我们遵循以下步骤:
-
我们提供冗余
-
以这样一种方式构建一个系统,即它可以检测以自动方式发生的故障
-
然后使用提供的冗余从检测到的故障中恢复
有三种类型的冗余:
1-活动红雀(热门SPare)
比如飞机上的备用发动机。主引擎和备用引擎同时运行,如果主引擎出现故障,我们的系统将切换到备用引擎
2-被动冗余(热备用):
这就像足球比赛中的替补球员。它不如主动冗余快
3-冷冗余(备份):
汽车备用轮胎。存在显著的时间延迟。
复制
Replication
是数据库设计中使用的术语。正是复制数据的过程减少了延迟。
在数据库设计中,最常见的设计是Primary/Secondary
设计。主节点用于写入数据,次节点用于用户读取数据。如果Primary失败,我们的系统将把Secondary作为Primary。正如您所看到的,我们这里有冗余,在发生故障时,我们将分配另一个组件来接管。
在sync replication
(原子)中,客户端将数据写入Primary节点后,相同的数据将传递给Secondary节点。如果两个事务都成功,则提交此事务,否则,所有事务都将回滚以更改状态,从而导致更多事务。这有更高的延迟,但我们的主数据库和辅助数据库将一直处于同步状态。因此,当主数据库下降时,辅助数据库将切换为主数据库,并且此操作将非常快速。它类似于飞机发动机的例子。对于同步复制,我们有active-active redundancy
。
在async
复制中,一旦数据写入主节点,就会向客户端发送确认,然后将数据写入辅助节点。这具有较低的延迟,因为确认会更早地发送给用户。假设您有多个写入请求,并将它们写入主节点,向用户发送确认,当这些数据传播到辅助节点时,如果主节点关闭,辅助节点将有一些丢失的数据,您的系统将把辅助节点提升为主节点,这样您的新数据库将有一些缺失的数据。在异步复制中,我们有passive redundancy
数据库是一个有状态的组件,我们在这里复制状态。如果我们的系统是读取量更大的系统,那么我们可能需要更多的辅助(或读取)节点,所以我们在这里提供冗余和复制。
在学习系统设计时,我对这些词感到困惑,但后来我从这里找到了一个简单的解释。
当您复制某个东西时,您会得到一个几乎与原始内容相同,但不完全相同的副本。原始和复制之间通常存在某种差异。例如,原件和复印件可以有不同的尺寸。因此,复制背后的想法是,复制总是与原始复制略有不同,至少在身份方面是这样。
至于另一个术语,复制过程的结果是复制,这是对原件所有方面的相同复制。如果你对房子的钥匙进行了复制,那么复制的钥匙在各个方面都将与原始钥匙完全相同。这意味着某个东西的副本与原始一样好,可以用来完全替换它,而复制通常不是这样。