# 中间件:通过消息队列分担系统压力
作者:Tom哥
公众号:微观技术
博客:https://offercome.cn (opens new window)
人生理念:知道的越多,不知道的越多,努力去学
随着分布式系统架构的盛行,除了之前的同步调用
方式外,基于消息机制
的异步调用
方式能发挥出更大的吞吐量,越来越受架构师的青睐。
# 应用场景
# 1、应用解耦
传统模式下系统间的耦合性太强,不同的系统之间通过同步调用完成业务逻辑。但是相互依赖,风险会比较高,比如图中 B系统如果宕机,那么A系统就会受到影响。
我们可以考虑将一些非核心逻辑从A系统中剥离,在A系统完成业务动作后,发送一个异步消息。其他业务系统如果关注这个动作,可以通过 发布/订阅
方式监听消息,完成后续处理。
优化后的流程图:
其中,E 系统是后来新加入的业务系统,这种模式的好处是之前代码不用改动,降低了系统风险,满足软件设计原则的开闭原则。
# 2、异步
我们看个新用户注册的例子,一般来讲,用户注册成功后会收到一个消息提醒。
注册保存逻辑比较简单,校验通过后直接写数据库,假如耗时50ms;邮件比较慢一些,耗时 400 ms。那前台接口给用户返回的总耗时是 400+50 = 450 ms
我们发现邮件通知的耗时比较大,如果能将其剥离,那么注册接口的总耗时会大幅降低。
优化后主流程只有注册用户和发送消息两部分,整体耗时 50 + 5 = 55 ms。后续的邮件和短息完全都是走异步消息逻辑,当然也可以是多线程并行处理。