欢迎关注文章系列 ,关注我
《提高能力,涨薪可待》
《面试知识,工做可待》
《实战演练,拒绝996》
也欢迎关注微信公众号【Ccww笔记】,原创技术文章第一时间推出
若是此文对你有帮助、喜欢的话,那就点个赞呗,点个关注呗!面试
假设你有个系统A,这个系统A会产出一个核心数据,如今下游有系统B和系统C须要使用这个数据。数据库
首先想到最简单,系统A就是直接调用系统B和系统C的接口发送数据给他们就行了安全
可是如今要是来了系统D、系统E、系统F、系统G,等等,十来个其余系统都须要这份核心数据呢? 微信
这是可能会出现开发人员最头疼的、尴尬的问题?异步
先是来一我的找他要求发送数据给一个新的系统H,系统A的同窗要修改代码而后在那个代码里加入调用新系统H的流程。
一会那个系统B是个陈旧老系统要下线了,告诉系统A的同窗:别给我发送数据了,接着系统A再次修改代码再也不给这个系统B。性能
那咱们如今该怎么作呢?系统的耦合性那么高,这真是牵一发而动全身,小需求须要大改动,何须呢?23d
如今咱们主角要来了,可使用MQ消息中间件,让咱们系统之间耦合度下降。cdn
这样能达到一次编译没必要改,谁爱谁去改,反正我不改。中间件
总结:经过 MQ 消息中间件的使用,重构系统之间的耦合,让系统具有高度的可扩展性。blog
假设你有一个系统调用链路,是系统A调用系统B,通常耗时20ms;系统B调用系统C,通常耗时200ms;系统C调用系统D,通常耗时2s
20ms + 200ms + 2000ms(2s) = 2220ms,
也就是2秒多的时间。可是实际上,链路中的系统A调用系统B,系统B调用系统C,这两个步骤起来也就220ms。
这时候主角大佬又慢慢的过来了,这都搞不定,不是很简单吗?
实现思路就是系统A -> 系统B -> 系统C,直接就耗费220ms后直接成功了。
而后系统C就是发送个消息到MQ中间件里,由系统D消费到消息以后慢慢的异步来执行这个耗时2s的业务处理。经过这种方式直接将核心链路的执行性能提高了10倍。
![]()
总结:
假设你有一个系统,平时正常的时候每秒可能就几百个请求,系统部署在8核16G的机器的上,正常处理都是OK的,每秒几百请求是能够轻松抗住的。 好比秒杀活动
在秒杀活动在高峰期一会儿来了每秒钟几千、万请求,弹指一挥间出现了流量高峰。
![]()
若是时候出现机器宕机,公司损失但是大大的,这是你是否是该准备好被老板痛骂,甚至可能要say goodbye
可能想到的解决的方式,线上部署了不少台机器,一多制胜的方法:
可是,假设除了秒杀活动达到瞬时高峰,其它时间基本为每秒就几百请求,若是你线上部署了不少台机器,就是为了此次秒杀活动,这有点浪费机器资源。
因此这时,MQ大哥又出现了,不怕,这不是还有我吗?
总结:削峰从本质上来讲就是更多地延缓用户请求,以及层层过滤用户的访问需求,听从“最后落地到数据库的请求数要尽可能少”的原则。
系统A要发送一个消息到多个系统,若是此时每增长一个系统,系统A都须要经过修改源码来增长接口,此时耦合很是高,可是若是中间使用消息队列的话,系统只须要发送一次到消息队列,别的系统就能复用该信息,当增长或删除系统调用接口的时候,不须要额外的更新代码。
用户调用一个接口的时候,可能该接口调用了别的方法。例如:用户注册的时候,后台可能须要调用:查询数据库,插入数据库,发送邮件,发送用户指南等等...
可是用户可能并不须要后台将全部的任务执行完毕,那么此时在初入数据口后面加入mq队列,用户就能很快获得注册成功的响应而去作一些别的事情。mq的机制又能保证最终的一致性,因此使用起来很安全很稳定。
何为削峰,就是当系统压力过大的时候,让系统压力减少。如何作?
好比,平时可能数据库的读写每秒几百,在流量高峰期,系统的访问达到了每秒10000。此时因为加入了消息队列,因此不会出现激增的访问致使系统奔溃。
削峰并不会让用户的等待时间减小,因此通常会跟异步搭配来使用
最后MQ还有其余场景,通知、数据分发等等,能体现使用MQ中间件的好处。
也欢迎关注微信公众号【Ccww笔记】,原创技术文章第一时间推出
![]()