一致性:事务将数据库从一个有效状态转换为另一个有效状态。它确保写入数据库的任何数据都必须符合所有定义的规则、约束和级联规则。例如,如果某列定义为整数,则尝试插入字符串将违反一致性。
隔离:并发事务不应相互干扰。从任何给定事务的角度来看,它应该看起来像是系统中唯一正在执行的事务。在第一个事务提交之前,一个事务的影响对其他事务不可见。
耐用性:一旦事务提交,其更改将永久生效,即使后续系统发生故障(例如断电、崩溃),更改仍会保留。提交的数据将写入稳定存储。
虽然这些 ACID 属性在单一的、集的,但它们在分布式环境中的应用和实施却带来了相当大的复杂性。
分布式数据库难题:为什么一致性很难?
分布式系统的本质使事务一致性变得复杂。造成这一挑战的因素有几个:
网络延迟和分区:数据分布在地理 巴西电话营销数据 位置分散的节点上,导致不可避免的网络延迟。更严重的是,网络分区可能发生,节点彼此隔离。在分区期间,系统的不同部分可能会独立发展,从而导致数据视图出现分歧。
独立故障:与单台服务器不同,分布式系统中的各个节点可能会独立发生故障。某个节点可能会崩溃、无响应或出现硬件问题,而其他节点则继续运行。这需要强大的故障检测、恢复和数据同步机制。
跨节点并发:事务通常涉及驻留在多个节点上的数据。确保跨这些分布式数据片段的并发操作保持一致的全局视图是一项艰巨的任务。这时,分布式锁和两阶段提交协议等概念就变得至关重要。
时钟同步:许多一致性协议依赖于时间概念。在分布式系统中,完美同步的时钟只是一种假象。节点之间的时钟漂移可能导致事件排序不一致,从而影响分布式事务的正确性。
数据复制:为了增强可用性和容错能力,数据通常会跨多个节点进行复制。虽然复制有利于提高弹性,但它也带来了保持所有副本同步和一致的挑战。如果一个副本发生写入,该写入操作能以多快和多可靠的速度传播到其他副本?如果某个副本在收到更新之前发生故障,会发生什么情况?