前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >消息中间件系列第1讲:为什么要用消息队列?

消息中间件系列第1讲:为什么要用消息队列?

作者头像
陈树义
发布2019-02-13 17:07:00
9150
发布2019-02-13 17:07:00
举报
文章被收录于专栏:陈树义陈树义

消息队列中间件可以说是Java开发中最常使用的一块技术了,基本上上了规模的系统都会使用消息队列来优化系统架构。那么为什么要使用消息队列?我们使用消息队列来解决什么问题呢?

消息队列的优点

对于大多数系统来说,我们使用消息队列来做下面三件事情:解耦、削峰、异步。[1]

第一个作用:解耦。

在多个系统中,如果使用传统模式来做,那么使用传统模式将是这样的:

传统模式的缺点:系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码。如果将来D系统接入,系统A还需要修改代码,过于麻烦!

但是如果我们中间件改造一下,那么架构图如下:

使用消息中间件后,我们将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。

第二个作用:异步。

传统模式下我们出息消息使用串行的方式,一些非必要的业务逻辑以同步的方式运行,太耗费时间。

如果我们使用消息中间件方式,将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度。

第三个作用:削峰。

在传统架构中,遇到并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常中间件模

但如果使用了消息中间件,系统A慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。

除了上面说到的三大作用,其实消息队列还有其它作用,例如:可以持久化数据,保证消息之间的顺序等等。如果想了解更多消息队列的作用,可以参考文末资料[2]。

消息队列的缺点

说了这么多使用消息队列的好处,但其实消息队列也不是万能的,它也有一些缺点。

  • 系统复杂性增加。 一个系统如果直接将业务串行处理,那么只需要在一个系统中把代码写写写就好了。但如果引入消息队列,则要多考虑很多方面的问题,比如一致性问题、如何保证消息不被重复消费,如何保证保证消息可靠传输。因此,需要考虑的东西更多,系统复杂性增大。
  • 系统可用性降低。 你想啊,本来其他系统只要运行好好的,那你的系统就是正常的。现在你非要加个消息队列进去,那消息队列挂了,你的系统不是呵呵了。因此,系统可用性降低。

其实上面两个缺点导致的最终结果就是:系统研发成本增加。 引入消息队列后,你就必须要对大多数消息队列有个深入的理解,否则如何做技术选型呢?而消息队列本身也比较复杂,在短时间内无法完全理解。所以是否使用消息队列需要根据具体场景判断,而不是为了使用技术而用技术。

总结

本文讲了下面几个要点:

  • 消息队列的优点
  • 消息队列的缺点

看完之后,你应该能解答下面几个问题:

  • 我的系统到底要不要使用消息队列?

下篇,我们聊聊使用消息队列需要考虑的几个问题。

参考资料

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 消息队列的优点
  • 消息队列的缺点
  • 总结
  • 参考资料
相关产品与服务
消息队列 CMQ 版
消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档