美文网首页消息队列
消息队列作用

消息队列作用

作者: 刘凯_7013 | 来源:发表于2019-08-22 17:06 被阅读0次

    随着技术的发展分布式系统已经成为标配,分布式系统就存在着各式各样的进程间通信。消息对列实际上就是进程间通信方式的一种,是生产者消费者模式在分布式场景下的实现。

    现实世界的例子

    消息队列主要由以下作用:解耦,削峰,异步,其实还有一个作用是提高接收着性能。

    我们以一个快递员送快递的栗子来描述下队列的作用。

    送快递送出了烦心事


    快递员给小明送快递分为几步?

    分为3步,

    第一步把快递拿到小明家门口(省略了前n步,从小明家楼下开始)

    第二步敲门(类比编程世界的调用第三方接口)

    第三步小明开门拿走快递(第三方接口执行过程)


    好了上边是送快递最简单的三步,让我们想想,这简单的三步会有什么问题?


    • 耦合:

    快递员什么时候完成这一单或者是否能顺利完成,十分依赖于小明的相应速度。如果小明还没起床,听见敲门声再穿衣服开门,可能消耗很多时间。如果小明没在家呢?那就要配送失败了,如何判断配送失败呢?快递员需要判断等多久开门(超时时间),打电话判断是否在家(健康检查),最终郁闷的离开,下次再来一次(重试)。
    快递员直接与小明交互,对小明的状态强依赖,产生了耦合现象。那有办法避免这种耦合呢?

    • 同步影响性能

    快递员的配送速度收到小明的响应速度影响极大,有一两个需要长时间等待的快件,快递员的配送效率(吞吐率)会收到很大影响。

    • 高峰期负载很高

    双11,618,每次到购物节的时候,快递员都很烦躁。快递太多,来的比送得快,这可如何是好。
    小明也很烦躁,一天要收100个快递,可是家里的空间都满了,要边收拾出地方边进一件快递。

    • 接收方还有其他事情

    -- 如果小明准备和女朋友告白,此时来了一阵敲门声,你好,快递。
    -- 还双11,小明买了100件商品,明天不定时一件件送到,小明这一天都要搭进去了。

    接收快递也成为了一件烦心事,好想把其他事情处理完再收快递,也好想一块收100件快递。


    该消息队列登场了

    现在快递员和小明都很烦躁,这个时候有个叫X巢(没收广告费)的快递柜出现了,快递员可以把快递放到柜子里,发条短信通知小明过来取快递。小明看到短信可以先做自己的事情,有空的时候过来拿走快递。

    终于,我们再看到小明和快递员的时候每个人都笑容满面。

    这里的快递柜就相当于是编程世界的消息队列,让我们看看消息队列到底起到了什么作用。

    • 解偶

    此时,快递员只需要把快递放到柜子里,不需要关心小明是否在家,是否在睡觉。小明也不需要一直等待给快递员开门,两个人解耦了。

    • 异步

    快递员把快递放到柜子里发个信息就可以去送下一件,不需同步等待结果。

    这样每个快递的处理速度(响应时间)都变得极短,每天送的快递数量(吞吐量)也变多了。

    • 削峰。

    这次又到了双十一,小明还是一天要到100个快递,由于小明一天只能消化10个快递,剩下的就放在了柜子里,等10天后才拿完。

    快递员由于是异步送快递,双11根本不是事,这点吞吐量完全搞得定。

    • 提高消费端性能

    小明以前需要一件一件收取快递,现在放在了柜子(队列)里,那等攒够了10件去取一次(buffer->reduce),好省时间!其他时间都可以快快乐乐约会了。

    总结

    让我们再来总结一下异步消息队列的作用

    1. 解耦,生产端和消费端不需要相互依赖
    2. 异步,生产端不需要等待消费端响应,直接返回,提高了响应时间和吞吐量
    3. 削峰,打平高峰期的流量,消费端可以以自己的速度处理,同时也无需在高峰期增加太多资源,提高资源利用率
    4. 提高消费端性能。消费端可以利用buffer等机制,做批量处理,提高效率。

    相关文章

      网友评论

        本文标题:消息队列作用

        本文链接:https://www.haomeiwen.com/subject/xydwsctx.html