微服务怎么保证对2个(多个)数据库表的修改保证事务性?
来源:6-7 【勤于思考,夯实学习成果】阶段练习题

慕婉清6092296
2020-12-08
老师,请问这种微服务每个微服务如果有自己的数据库的话,如何保证事务性呢?比如说优惠券系统当用户用掉了优惠券后,在Redis里status:used 要加入该优惠券信息,再MySQL里也得修改statis: used. 如果在MySQL改失败了,那会不会造成数据的不一致性?
写回答
1回答
-
同学你好:
你这里所说的是分布式事务的问题,因为 Redis 和 MySQL 或者是多个 MySQL 服务在完成一个工作时,由于不是一个事务,所以,使用 MySQL 本地事务是解决不了这个问题的。
通常这类问题的做法是使用“分布式事务”解决方案,可以看看:两阶段提交、三阶段提交、本地事务表等等解决方案的理论。
我在课程中使用 kafka 的方案来解决,其实就是本地事务表的方式去解决的,如果消息消费失败或者丢失,你需要做一些补偿性的任务。
欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!
212020-12-10
相似问题