解耦、削峰、异步的理解

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

现实世界的例子

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

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

送快递送出了烦心事

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

分为3步,

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

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

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

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

耦合:

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

同步影响性能

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

高峰期负载很高

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

接收方还有其他事情

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

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

该消息队列登场了

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

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

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

解偶

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

异步

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

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

削峰。

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

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

提高消费端性能

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

总结

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

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

  • 27
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值