首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >消息队列在使用中的注意事项

消息队列在使用中的注意事项

作者头像
netkiller old
发布2018-03-05 16:05:09
发布2018-03-05 16:05:09
1.4K00
代码可运行
举报
文章被收录于专栏:NetkillerNetkiller
运行总次数:0
代码可运行

消息队列在使用中的注意事项

异步不是万能的,实现异步重要的手段,消息队列在使用中也是有很多注意事项的。

消息队列的瓶颈

消息队列至少有三处容易出现瓶颈,我们一经典的发布/订阅模式为例。分析一下都可能存在哪些瓶颈。

发布 ---> 队列 ---> 订阅

  1. 入队瓶颈,发布消息队列,处理太慢,发布端堵塞应用程序。
  2. 队列持久化瓶颈,队列持久化是需要写入磁盘的,大量的密集IO操作
  3. 出队瓶颈,(茶壶煮饺子,有嘴倒不出)出队瓶颈还包括订阅端的处理能力,
  4. 如果订阅端的处理能力跟不上,也会出现瓶颈。

发布端常见问题

发布端问题表现在入队速度影响了发布端应用程序的性能,例如

代码语言:javascript
代码运行次数:0
运行
复制
runtime {
    task1();
    task2();
    publish();
    task3();
    task4();
}



loop {
    task1();
    task2();
    publish();
    task3();
    task4();
}

上面伪代码 publish()将阻塞 task3()与task4(),必须等待publish()执行完成才能继续运行。

这样的情况是 发布数量 > 入队的速度, 影响发布端的性能

队列持久化

消息的持久化,既影响入队速度,也影响出对速度,入队是写磁盘操作,出对是修改或者删除操作。 在队列同时进行入队与出队的操作是,还涉及到各种“锁”,例如线程锁与文件锁等等。 最终结果是消息队列性能骤降。

订阅端性能

订阅端的处理能力也影响到队列的堆积程度。如果订阅端处理速度过慢,我们就会发现消息在队列中堆积。

代码语言:javascript
代码运行次数:0
运行
复制
loop {
    function sub_callback(){
        task1();
        task2();
        task3();
        task4();
    }
}

订阅端改进,将队列交给线程处理

代码语言:javascript
代码运行次数:0
运行
复制
threads[max_connet] {
    function sub_callback(){
        task1();
        task2();
        task3();
        task4();
    }
}

总结

我们要尽量做到发布,队列与订阅之间的平衡,才能发挥消息队列的优势。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Netkiller 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 消息队列在使用中的注意事项
    • 消息队列的瓶颈
      • 发布端常见问题
      • 队列持久化
      • 订阅端性能
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档