什么是事务?
事务就是指一个完整的操作单元,在这个操作单元内的所有操作要么全部成功,要么全部失败。
本地事务
这里讲的本地事务可以认为是数据库提供的一种事务机制,数据库事务在执行时只要其中任何一个操作失败,都会导致整个事务回滚。主要包含四大特性ACID。
- 原子性(Atomicity):一个事务中的所有操作,要么全部完成,要么全部失败。
- 一致性(Consistency):在一个事务执行之前和执行之后的数据库必须处于一致性的状态。
- 隔离性(IsoLation):不同的事务同时操作相同的数据时,事务间不受相互影响。
- 持久性(Durability):只要事务成功结束,当前事务对数据库所有的操作必须完整的永久保存。
分布式事务
分布式事务指事务的参与者、支持事务的服务器、资源服务器、事务管理器分别位于不同的分布式系统中不同的节点上。简单来说,就是一个大的操作单元由若干个小的操作单元组成,这些小的操作单元分布式在不同的服务器上,并且属于不同的应用,分布式事务就是需要保证这若干个小的操作要么全部成功,要么全部失败。由于这些小的操作不在一个服务器上,就无法使用数据库事务机制来保证操作的一致性,需要借助中间件来完成,如Redis,Srata等。
分布式事务的场景
订单和库存的关系是一个很好的事务案例,在微服务架构中,常常会把订单和商品拆成两个不同的服务。在用户操作下单时,需要调用订单微服务生成一条订单,同时还有调用商品微服务扣减商品的库存,在这个操作中必须要保证数据的一致性。