系统架构师考试笔记之高并发队列的学习

消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制手段。最终一致性等一系列的功能,成为异步RPC的主要手段之一。

消息队列被处理的过程相当于流程 A被处理。我们这里以一个实际的模型来计论下,如如用户下单成功时给用记发短信,如果没有这个消息队列,我们会选择同步调用发短信的接口。

并等等短信息发送成功,这时候假设短信接口实现出现问题,或者短信调用超时了,又或者短信发送达到了上限,我们是选择重试几次还是放弃,还是先择把这个放到数据库

过一段时间再看看呢,不管怎么样,实现都很复杂。

我们可以将发短信放在消息队列里,消息队列按照一定的顺序挨个处理队列里的消息,当处理到发送短信的任务时,通知短信服务发送消息,如果出现之前出的现的问题,那么把这个消息重新放到消息队列中。

消息队列的好处:

1.成功完成了一个异步解耦的过程。短信发送时只要保证放到消息队列中去就可以了,接着后面的事情就行。一个事务只关心本质的流程,需要依赖其他事情但是不是那么要的时候,有通知即可,无需等待结查。每个成员不必受其他成员影响,可以更独立自主,只通过一个简单的容器来联系。

对于我们的订单系统,订单最终支付成功之扣可以需要给用户发送短信积分什么的,但其实这已经不是我们系统的核心流程了。如果外部系统偏慢,那么主流程的时间会加很多,用户肯定不希望点击支付过了几分钟才看到结果。那么我们只需要通知短信系统“我们支付成功了”,不一定非要等待它处理完成。

2.保证最终一致性,通过在队列中存放任务保证它最终一定会执行。

最终一致性指的是两个系统的状态保持一致,要么都成功,要么都失败。当然有个时间限制,理论上越快越好,但实际上在各种异常的情况下,可以会有定延迟达到最终一致状态,但最后两个系统的状态是一样的。

业界有一些为“最终一致性”而生的消息队列。

 

 

你可能感兴趣的:(Java,数据结构算法)