
187
第
11
章
复制和一致性
在继续讨论共识和原子提交算法之前,让我们学习最后一块缺失的部分:
一致性模型
(consistency model)。一致性模型非常重要,因为它们解释了多数据副本系统的可见性
语义和行为。
容错
(fault tolerance)描述了这样一种特性:当系统中的部分组件发生故障时,系统仍
然能继续正确地运行。使系统具有容错性并不是一件容易的事情,而使现有的系统具备
容错能力则更加困难。容错的主要目标是从系统中消除单点故障,并确保关键任务组件
有冗余。通常,冗余对用户来说是完全透明的。
系统可以存储多个数据副本,当其中一台机器发生故障时,通过另一台机器可以进行
故障转移(failover),这样系统就可以继续正确运行。在具有单一真相来源(source of
truth)的系统中(例如,主 / 副本数据库),可以通过将副本晋升为新的主数据库来显式
地完成故障转移。有些系统则不需要显式的重新配置,它们通过在读写查询期间收集多
个参与者的响应来确保一致性。
数据
复制
(replication)通过在系统中维护多个数据副本来引入冗余。然而,由于原子地
更新数据的多个副本是一个等同于共识的问题 [MILOSEVIC11],因此数据库中的
每个
操作都执行共识操作可能成本相当高。我们可以探索一些性价比更高且更灵活的方法,
允许参与者之间存在某种程度的差异,但使数据从用户的角度
看起来
是一致的。
在多数据中心部署中,复制尤为重要。在这种情况下,跨地域复制(geo-replication)有
多种用途:它通过提供冗余来提高可用性,增强抵御一个或多个数据中心的故障的能力。 ...