如题,在日常开发中有这样一种场景:某次业务涉及资源a b c的变更,通过http请求进行交互。但为了保障业务一致性需要把对abc的变更封装在事务中保障原子性,要么全部执行成功,要么全部不执行。对于变更发起方(我)并不会直接操作数据库,求问这种场景如何优雅实现事务原子性?
1 Like
2PC,Saga,TCC这些方案查查看,也许有思路,或者找找有没有现成的事务管理框架
简单做的话就是锁+回滚。
先给涉及到的资源请求锁定,等所有资源都返回锁定之后,就依次提交修改请求,如果都成功了就释放锁;如果有一个失败了就给已经操作的资源发送撤销请求,都撤销成功了就释放锁,如果有撤销失败就报错。
当然实际设计还要做重试机制、性能优化等等。
seata分布式事务?XA、AT、SAGA、TCFC
使用本地消息表+MQ的组合比直接使用Seate等要更加灵活处理