分布式系统的定义:一个用户的请求,由多个系统协同处理
思路:最终一致性 BASE理论(非实时一致性)
一.分布式事务的几种解决方案
1.基于数据库的XA/JTA协议的方式 --需要数据库厂商支持
2.异步校验数据的方式 --支付宝、微信等主动查询订单的状态、对账单的形式
3.基于可靠消息 (MQ)的解决方案 --异步场景、通用性强、扩展性强
4.TCC编程式解决方案--阿里等自己封装的DTX
二.消息队列中间件(MQ)
本质:存储数据,独立运行(类似java LinkedBolckQueue)
没有sql语句、强制结构化数据、强制事务 --功能简单,没数据库那么复杂 --性能比数据库高很多
mq如何可靠:
1.如何确保消息一定发送到Mq
1).mq有消息发送确认机制--发送者可以收到确认回执(ack)
2).保存发送mq消息的数据表,保存状态-- 收到回执,修改状态
3).定时检查消息表是否发送--未发送则重发
2.确保消息被正确消费
1).消息消费确认机制--给mq发送回执(ack)
2).未发送回执,mq会继续推送该消息
3).程序无法预知异常,需要手动干预(监控监控、短信、微信进行预警、手动干预)
网友评论