微服务怎么保证对2个(多个)数据库表的修改保证事务性?

来源:6-7 【勤于思考,夯实学习成果】阶段练习题

慕婉清6092296

2020-12-08

老师,请问这种微服务每个微服务如果有自己的数据库的话,如何保证事务性呢?比如说优惠券系统当用户用掉了优惠券后,在Redis里status:used 要加入该优惠券信息,再MySQL里也得修改statis: used. 如果在MySQL改失败了,那会不会造成数据的不一致性?

写回答

1回答

张勤一

2020-12-10

同学你好:

    你这里所说的是分布式事务的问题,因为 Redis 和 MySQL 或者是多个 MySQL 服务在完成一个工作时,由于不是一个事务,所以,使用 MySQL 本地事务是解决不了这个问题的。

    通常这类问题的做法是使用“分布式事务”解决方案,可以看看:两阶段提交、三阶段提交、本地事务表等等解决方案的理论。

    我在课程中使用 kafka 的方案来解决,其实就是本地事务表的方式去解决的,如果消息消费失败或者丢失,你需要做一些补偿性的任务。


    欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!

2
1
慕婉清6092296
非常感谢!
2020-12-10
共1条回复

Spring Cloud微服务实战 打造企业级优惠券系统

微服务,SpringCloud,SpringBoot面试、毕设、

1203 学习 · 487 问题

查看课程