分布式 ACID 系统
要完全理解 ACID 是否适用于分布式系统,首先需要探索分布式系统的属性,并了解它们如何受到 ACID 约束的影响。
分布式系统的形状、大小和形式各不相同,但是它们都具有一些典型的特征,并且都是公开的
随着分布式系统变得越来越大,越来越分散,复杂性变得更具挑战性。此外,如果系统需要高可用性,挑战只会成倍增加。
参考一个分布式情况图:
即使在两个应用程序(每个应用程序连接到一个数据库,所有四个部分都在单独的计算机上运行)的简单情况下,提供 ACID 的挑战也不是微不足道的。
在分布式系统中,ACID 原则是使用开放 XA 协会提出的概念来应用的,该概念指定了事务管理器或协调器管理事务的需要跨多个事务资源分布。即使使用中央协调器,在多个数据库之间实现隔离也是极其困难的。这是因为不同的数据库提供的隔离保证不同。
比如两阶段锁(及其变体 Strong Strict 两阶段锁或者 SS2PL)和两阶段提交(two-stage commit)可以帮助改善这种情况。但是,这些技术会导致阻塞操作,并且在事务处于进程中并且数据从一种一致的状态移动到另一种一致的状态期间,使系统的某些部分不可用。
在长时间运行的事务中,基于 XA 的分布式事务不起作用,因为长时间阻塞资源是不切实际的。补偿操作等替代策略有助于在长时间运行的分布式事务中实现事务保真度。
在高可用性场景中也会出现长时间运行的事务中资源不可用的问题。这个问题占据了中心舞台,特别是当资源不可用和中断的容忍度较低时。
评估确保分布式系统中类 ACID 保证所涉及的问题的一个一致和合乎逻辑的方法是了解以下三个因素在这类系统中如何受到影响:
-
Consistency (一致性)
-
Availability (可用性)
-
Partition Tolerance (分区容差)
一致性、可用性和分区容忍度(CAP)是 Brewer 定理的三大支柱,它是最近一代关于大型可伸缩分布式系统中事务完整性的思想的基础。简而言之,布鲁尔定理指出,在分布式或扩展式系统中,不可能同时实现所有三个目标(一致性、可用性和分区容差)。你必须做出取舍,至少牺牲一个,以利于另外两个。
Consistency(一致性)
一致性不是一个非常明确的术语,但是在 CAP 的上下文中,它暗示了原子性和隔离性。一致性意味着一致的读和写,以便并发操作看到相同的有效和一致的数据状态,这至少意味着没有过时的数据。
在 ACID 中,一致性意味着不满足预定义约束的数据不被持久化。这与 CAP 中的一致性不一样。
布鲁尔定理是由埃里克 · 布鲁尔猜想出来的,并在2000年的 ACM 分布式计算原理研讨会上作为主题演讲。布鲁尔关于 CAP 的想法是他在加州大学伯克利分校和 Inktomi 分校工作的一部分。2002年,Seth Gilbert 和 Nancy Lynch 证明了 Brewer 的猜想,因此它现在被称为 Brewer 定理(有时也被称为 Brewer 的 CAP 定理)。在 Gilbert 和 Lynch 的证明中,一致性被认为是原子性。吉尔伯特和林奇的证明可以在一篇题为“布鲁尔猜想和一致的、可用的、可分区容忍的 Web 服务的可行性”的论文中找到.
在单节点的情况下,可以使用数据库 ACID 语义来实现一致性,但是随着系统的扩展和分布,情况会变得复杂。
Availability
可用性意味着系统可以在需要的时候提供服务。作为一个必然结果,一个系统,是繁忙的,没有交流,或没有响应时访问是不可用的。有些人,特别是那些试图反驳 CAP 定理及其重要性的人,认为一个系统只有很小的延迟或最小的延迟,仍然是一个可用的系统。然而,就 CAP 而言,这个定义并不模糊; 如果系统不能在需要的时候为请求提供服务,那么它就不可用。
尽管如此,许多应用程序可能会在可用性方面做出妥协,这是它们可以做出的一种权衡选择。
Partition Tolerance
并行处理和扩展是经过验证的方法,正被用作可扩展性和更高性能的模型,而不是扩展和构建大型超级计算机。
过去几年已经表明,建设巨大的单片计算装置是在大多数情况下是昂贵和不切实际的。在集群中添加许多商品硬件单元并使它们协同工作,是一种更具成本、算法和资源效率和效率的解决方案。云计算的出现就是这一事实的证明。
因为向外扩展是选择的路径,所以集群中的分区和偶然故障是给定的。CAP 的第三个支柱依赖于分区容错或容错。换句话说,分区容忍度衡量的是当一个系统的一些集群成员变得不可用时系统继续服务的能力。
本文正在参加「金石计划 . 瓜分6万现金大奖」