分布式事务基础理论(二)
结合电商系统中的业务场景理解CAP。
如图:
整体执行流程如下:
- 商品服务请求写入主数据库信息,包括添加商品,修改商品,删除商品;
- 主数据库向商品服务响应写入成功。
- 商品服务请求从数据库读取商品信息。
Consistency:
一致性是指写操作后的读操作,可以读取到最新的数据状态,当数据分步在多个节点上,从任意节点读取的数据都是最新的状态。
上图中,商品信息的读写要满足一致性就要实现如下目标:
- 商品服务写入主数据库成功,则向从数据库查询新数据也成功;
- 商品服务写入主数据库失败,则向从数据库查询新数据也失败;
如何实现一致性?
- 写入主数据库后要将数据同步到从数据库;
- 写入主数据库后,在向从数据库同步期间要将从数据库锁定,待同步完成后再释放锁,以免新数据写入成功后,向从数据库查询到旧的数据。
分布式系统一致性的特点:
- 由于村在数据同步的过程,写操作的响应会有一定的延迟。
- 为了保证数据一致性会对资源暂时锁定,待数据同步完成释放锁定资源。
- 如果请求数据同步很失败的节点,则会返回错误信息,一定不会返回旧数据。
Availability
可用性是指任何事务操作都可以得到响应结果,且不会出现响应超时和响应错误。
上图中,商品信息读取满足可用性就要实现如下目标:
- 从数据库接收到数据库查询请求时需要立即响应数据查询结果;
- 从数据库不允许出现响应超时或者响应错误;
如何实现可用性?
- 写入主数据库后要将数据同步到从数据库;
- 由于要保证数据库可用性,不可将从数据库的资源进行锁定;
- 即使数据还未同步过去,从数据库也要返回查询的数据,哪怕是旧数据,如果旧数据没有了,可以按照约定返回默认信息,但不能返回错误或者响应超时;
分布式系统的可用性特点:
- 所有请求都有响应,且不会出现响应超时或者响应错误;
Partition tolerance:
通常分布式系统各个节点部署在不同的子网中,这就是网络分区,不可避免的因为网络问题,导致通信失败,此时仍然需要保证对外提供服务,这叫做分区的容忍性。
上图中,商品信息读写满足分区容忍性需要满足如下目标:
- 主数据库向从数据库同步数据失败不想赢读写操作。
- 其中一个节点挂掉不影响另外一个节点对外提供服务。
如何实现分区容忍性?
- 尽量使用一部取代同步操作,例如使用异步方式将数据从主数据库同步到从数据库,节点之间能有效实现松耦合。
- 添加从数据库节点,其中一个节点挂掉其他从节点提供服务。
分布式分区容忍性的特点:
- 分区容忍性是分布式系统具备的基本能力。
CAP组合方式
所有分布式事务场景中不会同时具备CAP三个特性,因为在具备了P的前提下,C和A是不能共存的。
- AP:放弃一致性,追求分区容忍性和可用性。这是很多分布式系统设计时的选择。通常,实现AP都会保证最终一致性,后面讲的BASE理论则是根据AP来扩展的,一些业务场景,例如:订单退款,今日退款成功,明日账户到账,只要用户可以接受一定时间内到账即可。
- CP:放弃可用性,追求一致性和分区容错性,我们的zookeeper其实就是追求的强一致性,比如跨行转账,一次转账需要等待双方银行系统都完成整个事务才算完成。
- CA:放弃分区容忍性,即不进行分区,不考虑由于网络不通或节点挂掉问题,则可以实现一致性和可用性。那么通常将不是一个标准的分布式系统。我们常用的关系型数据库就能满足CA.
总结
通过学习上面的CAP理论的相关知识,CAP是一个已经被证实的理论:一个分布式系统最多只能满足三项中的两项,可以作为我们进行架构设计、技术选型的考量标准。对于大型互联网应用场景,节点众多,部署分散,集群规模越来越大,节点故障和网络故障是常态,要保证N个9的服务可用性,达到良好的响应性能来提高用户体验,一般是保证AP,舍弃C强一致性,保证最终一致性。
BASE理论
- 理解强一致性和最终一致性:CAP理论告诉我们分布式系统中,只能满足其中两项,实际应用中使用AP较多,AP舍弃了一致性,但并不表示不要一致性,而是允许在一定时间内,可以不一致,但是还是要保证最终一致性;
- BASE理论:basically avaliable(基本可用)、soft state(软状态)、eventally consistent(最终一致性)。BASE理论是AP的一个扩展,通过牺牲强一致性获得可用性,当出现故障时,允许部分不可用但要保证核心功能可用,允许数据一定时间内不一致的,但最终达到一致状态。满足BASE理论的事务,我们称之为“柔性事务”。
- 基本可用:分布式系统出现故障时,允许损失部分功能,但需要保证核心功能可用。例如电商网站交易付款出现问题了,但商品详情仍然能正常浏览;
- 软状态:由于不要求强一致性,所以BASE理论允许系统中出现中间状态,这个状态不影响系统可用性,例如订单中的“支付中”,“数据同步中”等状态,待数据最终一致性时改为“成功”状态;
- 最终一致性:最终一致性是指经过一段时间后,所有节点的数据都将会一致。例如订单中的“支付中”状态,最终会变成“支付成功”或者“支付失败”,使得订单状态与实际交易结果达成一致,但需要一定时间的延迟、等待。
以上是 分布式事务基础理论(二) 的全部内容, 来源链接: utcz.com/z/516046.html