分布式事务:
事务的英文解释:a business deal or action, such as buying or selling something 交易 业务 买卖
事务的4个特性:原子性,隔离性,一致性,持久性;
单个节点的单个数据库的事务是容易控制的,但是当流程复杂时,涉及多个小的流程操作,这些小的流程操作分布在不同的节点,用不同的数据库;确保这个大流程执行成功的唯一条件就是小流程全部执行成功,否者就失败,同时要确保这些不同节点的数据库中数据正确(也即 一致性);
复杂的大流程进行事务控制的思路 :‘两阶段提交’
消息事务+最终一致性
所谓消息事务即是基于消息中间件的的两阶段提交,本质上是对消息中间件的特殊利用,它是把本地事务和发送消息放到一个事务中,保证本地事务成功和发送消息成功就都成功,否则就都失败。
基于消息中间件的两阶段提交往往用在高并发场景下,将一个分布式事务拆成一个消息事务(A系统的本地操作+发消息)+B系统的本地操作,其中B系统的操作由消息驱动,只要消息事务成功,那么A操作一定成功,消息也一定发出来了,这时候B会收到消息去执行本地操作,如果本地操作失败,消息会重投,直到B操作成功,这样就变相地实现了A与B的分布式事务。原理如下:
虽然上面的方案能够完成A和B的操作,但是A和B并不是严格一致的,而是最终一致的,我们在这里牺牲了一致性,换来了性能的大幅度提升。当然,这种玩法也是有风险的,如果B一直执行不成功,那么一致性会被破坏,具体要不要玩,还是得看业务能够承担多少风险。
领取专属 10元无门槛券
私享最新 技术干货