当数据中心的一条数据的所有副本都发生故障时会发生什么?

What happens when all replicas of a piece of data fail in a data-center?

现代数据中心的分布式存储架构设计为每条数据有 2-3 个副本,因此当机器出现故障时它仍然可用。

据我了解,所有副本失败的概率仍然不为零,并且考虑到操作规模,肯定存在可能发生这种情况的情况。大型数据中心如何防止此类故障,尤其是当它是重要数据(如电子邮件或图像)时?甚至进一步的冗余只会进一步使此类故障不太可能发生,但并非不可能。

让我们假设一个给定的硬盘在一年内有 50% 的机会发生故障(不,这不是基于任何真实的统计数据,只是任意高估)。

这意味着在给定的小时内有 .5 / (365 * 2) ~ 0.0057% 的失败几率(假设失败概率在一年中的所有时间均匀分布)。

一个正确配置的集群应该检测到一个节点已经相当快地宕机,并为该节点负责的数据制作额外的副本。我声称这将在 <1 小时内发生(最多可能在几分钟内),我感到相当安全。

所以我们真正要问的是 - 所有 包含单个数据的节点在时间上如此接近以致于数据不能 re-replicated 来自现有节点。

对于数据的两个副本,这给了我们 0.000057^2 ~ 3.25 * 10^-9 = 0.0000000325%

三份,0.000057^3 ~ 1.86 * 10^-13 = 0.00000000000186%.

这还没有考虑额外的异地备份等。所以虽然这并非不可能,但我敢打赌你丢失数据的可能性更大,因为太阳耀斑会炸毁整个数据中心,而不是因为任意硬驱动器故障。

NYC Tech Talk Series: How Google Backs Up the Internet is a good explanation of how Google manages backing up and achieving reliability. A text-based explanation is here.

最重要的是谈话内容如下:

  • 冗余并不能保证完整性或可恢复性。
  • 磁带没有过时。
  • 需要在几个不同的垂直领域确保隔离:位置、应用层问题、存储层问题、介质故障等
  • 连续备份和恢复,甚至在需要恢复之前从磁带读取和写入。
  • 尽可能自动化 steady-state 操作。
  • 预期以特定速率发生故障,调查故障率是否发生变化。

再次,正如另一个答案所说,只有覆盖所有基础并确保概率如此之低和data-loss的window(在一个备份失败和重建之间)来自其他备份)非常低。