分布式 ACID 兼容的数据库是一种系统,可确保事务可靠性 (ACID) 在分布于网络上的多个服务器或节点上实现。 ACID 代表原子性 (Atomicity)、一致性 (Consistency)、隔离性 (Isolation) 和持久性 (Durability)。 原子性保证事务要么完全完成,要么失败,而不会发生部分更改。 一致性确保数据在事务前后根据定义的规则保持有效。 隔离性防止并发事务相互干扰,而持久性确保提交的数据在发生故障后仍然存在。 在分布式设置中,即使数据在不同位置进行分区或复制,这些属性也必须保持不变,这会带来网络延迟和节点故障等挑战。
为了在分布式环境中实现 ACID 兼容性,数据库使用两阶段提交 (2PC) 等协议或 Raft 或 Paxos 等共识算法。 例如,Google Spanner 采用同步时钟 (TrueTime) 和分布式锁定的组合来在全球范围内保持一致性。 CockroachDB 使用 Raft 共识算法跨节点复制数据,即使某些节点发生故障,也能确保原子性和持久性。 这些系统在提交之前协调节点以就事务结果达成一致,从而确保原子性。 通过严格验证跨副本的数据规则来维持一致性,而隔离通常依赖于时间戳排序或多版本并发控制 (MVCC) 等技术来管理并发访问而无需锁定。
此类数据库对于需要高可靠性和全局可扩展性的应用程序至关重要,例如金融系统或库存管理。 例如,使用分布式 ACID 数据库的银行应用程序可以跨区域处理交易,同时确保余额保持准确并防止透支。 但是,在分布式系统中强制执行 ACID 可能会牺牲延迟,因为协调节点会引入延迟。 开发人员必须权衡这些权衡:Amazon Aurora 等系统通过放宽一些隔离级别来针对特定场景(例如,读取密集型工作负载)进行优化。 选择分布式 ACID 数据库取决于严格的数据正确性是否证明复杂性和潜在的性能成本是合理的。