主要内容:
1.异步:同一时间做多件事情(相比线程:无需调用接口)
2.削峰:防止流量暴增使系统挂机()
3.解耦:订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功 库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作
缺点:
1.中间件系统复杂性:例如消息重复消费、消息丢失、消息的顺序消费
2.数据一致性:相关数据保持对应一致,分布式事务
3.可用性:
重复消费:多个监听产生多次重发。
幂等:在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。
分场景进行强弱校验。
顺序消费:Hash取模法,让同一个订单发送到同一个队列中,再使用同步发送,只有同个订单的创建消息发送成功,再发送支付消息。这样,我们保证了发送有序。RocketMQ的topic内的队列机制,可以保证存储满足FIFO,RocketMQ仅保证顺序发送,顺序消费由消费者业务保证!!!(消费者多线程)
分布式事务、事务隔离级别、ACID:事务是恢复和并发控制的基本单位
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。 一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
分布式事务分类:2pc(两段式提交)、最终一致性 2PC:通过消息中间件协调多个系统,在两个系统操作事务的时候都锁定资源但是不提交事务,等两者都准备好了,告诉消息中间件,然后再分别提交事务。 最终一致性:1.业务主动方本地事务提交失败,业务被动方不会收到消息的投递; 2.只要业务主动方本地事务执行成功,那么消息服务一定会投递消息给下游的业务被动方,并最终保证业务被动方一定能成功消费该消息(消费成功或失败,即最终一定会有一个最终态)。