分布式:分布式事务的Cap与Base理论Season2:其三
Posted 漫步君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式:分布式事务的Cap与Base理论Season2:其三相关的知识,希望对你有一定的参考价值。
首先我们先回顾一下关系型数据库(mysql、Oracle)中的ACID原理:
原子性Atomicity:是指事务是一个不可在分割的工作单元,事务中的操作要么都发生,要么都不发生;
一致性Consistency:一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏,即事务前后数据的完整性必须保持一致;
隔离性Isolation:多个用户并发访问数据库时,数据库为每个用户开启的事务不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离;
持久性Durability:一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何的影响。
分布式事务产生的背景:
在微服务环境下,会因为会根据不同的业务会拆分成不同的服务,比如:会员服务、订单服务、商品服务等,让专业的人做专业的事,每个服务都有自己独立的数据库和Redis,并且是独立运行、互不影响、
服务于服务之间通讯采用RPC远程调用技术,但是每个都有自己独立的数据源,即自己独立的本地事务,两个服务于相互通讯的时候,两个本地事务互不影响,从而产生分布式事务问题。
传统项目大部分情况下不会产生分布式事务,但是在项目中如果用到了多数据源技术时就会产生分布式事务问题。
微服务环境下会根据不同的业务拆分成不同的服务,每个服务都有独立的数据库,互不影响,相互通讯采用RPC远程调用技术。
本地事务的有效范围是在同一个JDBC连接中,使用同一个事务管理器。
如果是调用接口时出现了异常,是不属于分布式实务问题的,因为可以通过人为控制手动抛出异常使得进行事务回滚。
CAP帽子原理:
由于对系统或者数据进行了拆分,我们的系统不再是单机系统,而是分布式系统,针对分布式系统的CAP原理包含如下三个要素:
Consistency一致性:在分布式系统中所有的数据备份在同一时刻具有相同的值,所有节点在同一时刻读取的数据都是最新的数据副本。
Availability可用性:好的响应性能,完全的可用性是指在任何故障模型下,服务都会在优先的时间内完成并进行响应
Partitiontolerance分区容忍性:尽管网络上有部分消息丢失,但系统仍然可以继续工作。
CAP原理是指:这是哪个要素最多只能同时实现两点不可三者兼顾。因此在进行分布式架构设计时,必须做出取舍。而对于分布式数据系统,分区容忍性是基本要求,否则就是去了价值,因此设计分布式数据系统就是在一致性和可用性之间取得一个平衡。
对于大多数的Web应用,其实并不需要过分强调一致性,因此牺牲一致性换取高可用性,是目前多数分布式数据库产品的方向(但也保证了最终一致性)。
选择 |
说 明 |
CA |
放弃分区容错性,加强一致性和可用性,其实就是传统的单机数据库的选择 |
AP |
放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式系统设计时的选择,例如很多NoSQL系统就是如此 |
CP |
放弃可用性,追求一致性和分区容错性,基本不会选择,网络问题会直接让整个系统不可用 |
Base理论是指:Basically Available(基本可用)、Soft-state(软状态/柔性事物)、EventualConsistency(最终一致性)。是基于CAP定义演化而言,是对CAP中一致性和可用性进行权衡后的一个结果
核心思想是即使无法做到强一致性,但每个业务可以根据自身的特点,采用适当的方式来使得系统达到最终一致性。
1.基本可用:是指分布式系统在出现故障的时候,允许损失部分可用性,保证核心可用(不是不可用)。如:搜索引擎0.5秒返回查询结果,但由于故障,2秒后才响应查询;或者因为网页访问过多,对部分用户采用降级的方式。
2.软状态:软状态是指允许系统存在中间状态,并且该中间状态不会影响系统整体的可用性,即允许系统在不同节点间进行副本同步的时候可以存在延迟。
3.最终一致性:系统中所有的数据副本经过一定时间后,最终能达到一致的状态,不需要实时保证系统数据的强一致性。最终一致性是弱一致性的一种特殊情况。
BASE理论面向的是大型高可用、可扩展的分布式系统,通过牺牲强一致性来获得可用性。
传统数据库常用设计理念的ACID就是强一致性的一种体现。
以上是关于分布式:分布式事务的Cap与Base理论Season2:其三的主要内容,如果未能解决你的问题,请参考以下文章