版权声明:原创不易,未经作者允许请勿随意转载!因个人能力和精力有限,难免有疏漏和不足之处,欢迎指正,谢谢~ https://blog.csdn.net/lijing742180/article/details/90549650
1、事务
- 事务
Transaction
,最初特指数据库事务,是数据库管理系统执行过程中的一个逻辑单元,由一个有限的数据库操作序列(数据读写)构成。 - 后面扩展为广义上的一组特定的操作集合,通常由高级数据库操纵语言或编程语言(如 SQL,C++ 或 Java)书写,并用形如
begin transaction
和end transaction
语句来界定。
最经典的事务场景有:银行转账,12306 购票等。
2、事务特性
严格来说,并非任意的对数据库的操作序列都是数据库事务,必须拥有 ACID 特性。
ACID:
- 原子性(Atomicity):
- 事务作为一个整体被执行,其中的所有操作要么全部都执行成功,要么都不执行。
- 任何一项操作失败,则整个事务失败,且其它已被执行的操作都被撤销并回滚。
- 一致性(Consistency):
- 事务应确保数据库的状态从一个一致性状态转变为另一个一致性状态。
- 一致性状态:指数据库中的数据应满足完整性约束。
- 隔离性(Isolation):
- 多个事务并发执行时,一个事务的执行不影响其他事务的执行。
- 事务的 4 种隔离级别:
READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
- 4 种级别的隔离性依次增强,但并发性能依次降低,实际开发中通常使用第 2 种
READ_COMMITTED
。
- 持久性(Durability):
- 已被成功提交的事务对数据库的修改应该永久保存在数据库中。
3、分布式事务
在单机数据库中很容易实现 ACID 特性,从而保证数据的严格一致性,但在分布式系统中却很难实现。
分布式事务:
- 在分布式系统中,发起事务的客户端、事务的操作对象、资源服务器等分别位于不同节点上,通常涉及对多个数据源或业务系统的操作。
- 需要解决的难题:
- 如何在数据一致性、系统可用性、分区容错性三者之间取得平衡?(即 CAP 理论)
- 目前,所有的分布式系统都不可能同时满足 CAP,最多只能同时满足其中的两项。
- CAP 理论:
- 一致性:
Consistency
多个节点上的副本数据始终保持一致 - 可用性:
Avaliability
系统服务一直处于可用状态,在用户能够容忍的时间内对每一个请求都能返回结果。 - 分区容错性:
Partition tolerance
在遇到任何网络分区故障(部分子网络故障)时,仍能对外提供正常服务
- 一致性:
4、BASE 理论
- 最初是由 eBay 架构师结合 CAP 理论及在大规模分布式系统实践中总结而来,是目前大多数分布式事务解决方案的核心理论。
- 核心思想是在无法做到系统强一致性的情况下,根据自身业务特点采用适合的方式达到最终一致性。
- 基本可用
Basically Avaliable
:- 在系统故障时,允许损失部分可用性,如响应时间增加、部分功能不可用(如常用的限流)等。
- 软状态
Soft state
:- 数据副本在不同节点之间同步时,允许存在延时
- 最终一致性
Eventually consistent
:- 系统中所有数据副本在一定时间的同步之后,最终能够达到一致状态,而不需要保证实时的强一致性。
总体来说,传统的事务使用 ACID 的强一致性模型,BASE 理论面向大型高可用可扩展的分布式系统,通过牺牲强一致性来获得更高的可用性,允许数据在一段时间内是不一致的,但最终要达到一致状态。
实际的分布式系统架构中,不同业务对数据的一致性要求是不同的,通常会将 ACID 特性和 BASE 理论结合使用。