分布式系统:ACID与CAP

ACID: 在计算机科学中,ACID是数据库事务的一组特性,旨在保证数据的有效性,即使在出现错误、断电和其他意外情况下也能保持数据的一致性。在数据库的上下文中,满足ACID属性的一系列数据库操作(可以被视为对数据的单一逻辑操作)称为“事务”。例如,从一个银行账户向另一个账户转账,即使涉及多个更改(比如从一个账户借记并向另一个账户贷记),也视为单一事务。

CAP:在理论计算机科学中,CAP定理(也称为Brewer定理,以计算机科学家Eric Brewer命名)规定任何分布式数据存储只能提供三个特性中的两个(一致性、可用性、分区容错性)。

概要

?ACID处理个体节点的数据一致性 = 事务级别?CAP处理整个集群的数据一致性 = 节点级别

ACID:

?原子性(Atomicity):

原子事务是一系列数据库操作的不可分割和不可约简,要么全部发生,要么全部不发生。

一个原子事务的例子是从账户A向账户B进行货币转账。它包括两个操作:从账户A取款和存入到账户B。通过在原子事务中执行这些操作,确保数据库保持在一致的状态,即如果这两个操作中的任何一个失败,资金既不会丢失也不会被创建。

?一致性(Consistency):

所有已应用的数据更改为所有数据库连接提供一致的数据视图。也就是说,在成功写入、更新或删除记录之后,任何读取请求都会立即接收到记录的最新值。

一致性(或正确性)指的是任何给定的数据库事务必须仅按照允许的方式更改受影响的数据。写入数据库的任何数据必须符合所有定义的规则,包括约束、级联、触发器以及所有这些规则的组合。

?隔离性(Isolation):

隔离性确定事务完整性对其他用户和系统的可见性。隔离性通常在数据库级别定义,是一个属性,定义了一个操作的更改在何时或如何成为对其他操作可见。

较低的隔离级别增加了许多用户同时访问相同数据的能力,但增加了用户可能遇到的并发效果(如脏读取或丢失更新)的数量。相反,较高的隔离级别减少了用户可能遇到的并发效果,但需要更多的系统资源,并增加了一个事务将阻塞另一个事务的机会。

二阶段锁定是数据库管理系统中最常见的事务并发控制方法,用于提供正确性的序列化和可恢复性。为了访问数据库对象,事务首先需要为该对象获取锁定。根据访问操作类型(例如读取或写入对象)和锁类型,如果另一个事务持有该对象的锁定,则获取锁定可能会被阻塞和延迟。

?持久性(Durability):

持久性是ACID属性,保证已提交的事务将永久保存。例如,如果航班预订报告表示已成功预订座位,则即使系统崩溃,座位也将保留预订状态。

持久性可以通过将事务的日志记录刷新到非易失性存储中来实现,然后在确认提交之前。

在分布式事务中,所有参与的服务器必须在确认提交之前进行协调。这通常通过二阶段提交协议来完成。

许多数据库管理系统通过将事务写入事务日志来实现持久性,可以重新处理事务日志以在任何后续故障之前重新创建系统状态。只有在事务记录输入日志后,事务被视为已提交。

0*z5L-KJZpq5FAvqh9.jpeg

CAP

?一致性(Consistency)(所有节点通过最终一致性拥有相同的数据):一致性意味着在一个节点上的更新/更改立即传播到其他节点。?可用性(Availability):每个请求都会收到(非错误的)响应,但不能保证它包含最新的写入。例如,我们需要跟踪和报告国家的公民数量,如果在计算中丢失了最新数据,不会对最终结果造成重大错误。我们可以使用支持可用性的数据存储。另一方面,当我们需要跟踪业务交易时,我们需要选择支持一致性的数据存储。?分区容错性(Partition Tolerance):即使发生节点之间的任意消息丢失(或延迟),系统仍然可以继续运行。

当发生网络分区故障时,必须决定采取以下其中一种操作:

?取消操作,从而降低可用性但确保一致性?继续操作,从而提供可用性但可能导致不一致性。

分布式系统:ACID与CAP

CAP定理的维恩图

因此,如果存在网络分区,则必须在一致性和可用性之间选择。

0*PyiMBeDQi3RZpeLR.png

作为CAP权衡

CAP定理基于三个权衡,其中之一是“原子一致性”(缩写为“一致性”),“讨论原子一致性与讨论ACID数据库有些不同,因为数据库一致性是指事务,而原子一致性仅指单个请求/响应操作序列的属性”。

 

注意:尽管一些人偏向一致性,而其他人偏向可用性,但其他NoSQL数据存储(如Cassandra和DynamoDB)可以同时提供两者。

原创文章,作者:小技术君,如若转载,请注明出处:https://www.sudun.com/ask/33994.html

Like (0)
小技术君的头像小技术君
Previous 2024年4月10日
Next 2024年4月10日

相关推荐

  • 实现速率限制的初学者指南

    如果你之前接触过后端服务,你可能听说过速率限制(Rate Limit)这个术语。 如果没有这个关键的工具包,客户端可以在任何时间点向你的服务发起无限多的请求。这会导致突然的流量激增…

    2024年4月19日
    0
  • CDN的典型应用

      场景一:大文件下载加速 场景描述 各类大文件,如游戏软件安装包下载、手机ROM升级、应用更新和网盘文件下载等分发场景,对下载速度和下载准确性要求极其苛刻。通过文件预取…

    2024年7月17日
    0
  • CDN如何为企业保驾护航

    CDN(内容分发网络)对企业来说可以提供多种保驾护航的服务和功能,以下是其中一些关键点: 综上所述,CDN 可以为企业提供网站性能优化、全球覆盖和可用性保障、安全防护、节省带宽成本…

    CDN资讯 2024年2月24日
    0
  • C# 优雅的处理 TCP 数据

    Tcp是一个面向连接的流数据传输协议,用人话说就是传输是一个已经建立好连接的管道,数据都在管道里像流水一样流淌到对端。 那么数据必然存在几个问题,比如数据如何持续的读取,数据包的边…

    2024年5月25日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注