后端工程师的高阶面经
邓明
前 Shopee 高级工程师,Beego PMC
6888 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
后端工程师的高阶面经
15
15
1.0x
00:00/00:00
登录|注册

22|消息队列:消息队列可以用来解决什么问题?

你好,我是大明。
从今天开始我们要学习一个新的主题——消息队列。一直以来,消息队列都是业界用于构建高并发、高可用系统的利器。即便是简单的业务开发,也可以通过消息队列的解耦、异步特性来提高性能和可用性。
消息队列和数据库、缓存并列为面试中最热门的三个中间件。消息队列本身的知识也很多,理论和实践结合紧密,也是面试中的难题。所以在消息队列这个主题下,我会带你学习最热门的面试点,确保你可以在面试中保持竞争优势。今天我们就先来学习第一个面试主题:消息队列的使用场景。

前置知识

消息队列最鲜明的特性是异步、削峰、解耦。也有人说这是消息队列的使用场景、用途,并且额外加了几个,比如日志处理和消息通讯。但是实际上,日志处理和消息通讯可以看作是消息队列的具体落地案例。比如日志处理同时利用了消息队列异步、解耦和削峰的特性。
消息通讯是指即时通讯之类的工具,比如说你使用的微信、QQ 都是通讯工具。通讯工具主要利用的是异步和解耦特性,不过要是你觉得你的通讯工具会有高并发的收发消息场景,也可以看作是削峰。
基本上一切消息队列的应用场景,都是围绕异步、解耦和削峰三个特性来设计的。反过来也可以说,如果你有一些需要异步、解耦和削峰的需求,那么消息队列就是最合适的工具。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

消息队列在构建高并发、高可用系统中扮演着重要角色,具有异步、削峰、解耦等特性,适用于日志处理、消息通讯、事件驱动架构等场景。在面试准备中,了解公司使用消息队列的优缺点,并准备相关案例是至关重要的。强调消息队列在解决异步、解耦和削峰需求方面的重要性。文章还介绍了消息队列的优点,包括性能、扩展性和可用性,以及事件驱动模式的优势。最后,提出了基于事件驱动的SAGA分布式事务方案,强调事件驱动在解决复杂业务问题方面的价值。整体而言,本文深入探讨了消息队列的重要性和应用场景,以及事件驱动模式的优势,为读者提供了深入了解和应用的指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端工程师的高阶面经》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(11)

  • 最新
  • 精选
  • 子休
    除了我这里列举的消息队列使用场景,你还见过哪些很有特点的使用消息队列的场景? 答:上家公司,我所在的中台基础服务组,实现了一个叫“事件中心”的微服务,核心功能之一就是使用消息队列作为事件传递和调用。相较于正常的消息传递,这个服务相当于把消息队列包了一层,可以提供比消息队列更多的功能,比如统计,审计等,因为代码是掌握在自己手中,可以做更多的事情。 面试中还有一个比较经典的问题,就是你为什么用 Kafka、RabbitMQ 或 RocketMQ,又或者说你为什么使用某一个中间件,这种问题该怎么回答呢? 答: 1. 先大致描述一下各种中间件的优点和缺点,这些基本都是随便搜搜就知道了。 2. 然后结合项目中的业务场景特点,说出自己的看法,比如这个中间件用在自己的业务里面会有什么益处,会有什么弊端等等。 3. 告诉面试官,自己在技术选型的时候,写了一些demo,在测试环境跑了下,结果如何如何,最后敲定了其中一个。之后,经过技术评审,大家认可了自己的看法,一致通过。 4. 选好中间件之后,选择一个业务组进行接入,通过充分测试之后,开始上线试运行,结果大致良好。只是中间出了一些小问题,由此可以引出一些你自己对这个中间件的常见问题的解决思路。比如消息丢失是怎么解决的?消息积压是怎么解决的。 5. 最后收尾的时候,如果可能的话,可以升华一下,自己对这个中间件的高维度认知。比如虽然你只是在这个公司用了消息队列来解决削峰解耦的事情,但是其实消息队列还可以用在很多地方。比如本文中提到的分布式事务。

    作者回复: 6666,你是懂面试的!

    2023-08-07归属地:上海
    2
    4
  • sheep
    面试官假若问:"我调用第三方业务,直接启动一个协程去调用,但是并不关心返回值,直接返回信息给用户了",怎么样回答,才能证明使用消息队列才是性能更好的方案呢。我想这里其实不关心返回值的话,其实也不用消息队列了吧

    作者回复: 协程你终究还是堵在了这台机器上,如果并发高的话,你这里协程就很有问题。 另外一个就是,引入消息队列,你的性能瓶颈就是消息队列的瓶颈,数十万上百万的 QPS 都没问题。但是你一台机器是开不出来数十万上百万的协程的。

    2023-11-28归属地:广东
    2
    2
  • 程序员花卷
    除了我这里列举的消息队列使用场景,你还见过哪些很有特点的使用消息队列的场景? 比如使用RocketMQ的事务消息来解决分布式事务的问题,保证数据的最终一致性。 具体场景就拿文中的例子来举例:扣减库存 和 创建保存订单这两个操作是位于不同的服务的,那么就涉及到了分布式事务的问题,大体思路是当缓存库存扣减完成之后,就发送事务消息到Broker,这个事务消息执行的业务就是创建并保存订单,事务消息发送成功之后就会执行本地事务,本地事务对应的业务操作就是扣减数据库库存,当本地事务执行完之后,如果成功就COMMIT,否则就ROLLBACK,让Broker真正投递事务消息,订单服务那边创建并保存订单。如果在创建并保存订单的过程中出了问题,那么就需要利用RocketMQ发送一条普通消息到商品服务,商品服务这边要做两个事情:一个是还原缓存库存,一个是还原数据库库存。这样就保证了最终一致性。 需要注意的问题: 1. 需要保证扣减商品库存、还原商品库存、创建并保存订单的幂等性 2. 如果订单创建并保存失败后服务就挂了,导致还原库存的消息没发出去,怎么办,针对这种情况可以设计一个异步检测的服务,使用一个下单业务记录表来记录下库存扣减和创建订单的业务,然后使用这个异步检测服务去定时扫描检查,但凡出现某个业务扣减过库存但是没创建保存过订单,那就将缓存库存和数据库库存还原回来,并记录下这个异常情况,方便后期核查!

    作者回复: 可以的,赞!

    2023-12-08归属地:云南
  • sheep
    ,“基本思路->秒杀场景”这里扣减库存时候订单服务不是已经通过消费消息队列,来进行创建订单了么。这里后续的“订单超时取消”,又是如何应用上的呢,是客户端又发了一个延时消息吗,来告诉指定订单30分后“未支付”则进行取消?

    作者回复: 创建订单的时候再发一个超时未支付的消息就行。

    2023-11-29归属地:广东
    2
  • sheep
    回答课后问题: 1. 使用消息队列来进行削峰,比如某项目就用kafka来缓解往ES插入数据的压力 2. 组内好像没有使用到消息队列,但是了解其他部门有使用,主要是在第三方业务服使用公用ES时候,使用kafka来缓解ES的压力吧,而且kafka的吞吐量会比其他消息队列好很多

    作者回复: 对!所以你可以考虑刷个 KPI。

    2023-11-28归属地:广东
  • KK
    请问一下老师,这个步骤是怎么实现提示用户支付的呀,通过API还是什么操作? “订单服务会从消息队列里面将请求拿出来,真正创建订单,并且提示用户支付”。

    作者回复: 可以通过回调,也可以再次借助消息队列。我猜测你是指前端怎么知道的吧?这个可以用websocket,而 APP 之类的也可以考虑用 gRPC。

    2023-11-01归属地:北京
    3
  • KK
    pulsar 与 kafka 会选择哪一个?

    作者回复: 我一般都是无脑选 Kafka,万一同事喷我,我也可以说我做的是最保守的选择。

    2023-10-31归属地:北京
    2
  • Geek8004
    轻问老师,秒杀系统里面需要用分布式锁锁住redis的库存吗?我理解不用分布式锁,因为redis在读写key的时候其实是单线程的.没有并发问题

    作者回复: 直接用 Redis 来扣减内存的话,不需要分布式锁。

    2023-08-30归属地:中国香港
    2
  • ZhiguoXue_IT
    对于大数据量的mq,大多数会选择kafka,高吞吐量,作者是如何认为的

    作者回复: 我认为无脑选 Kafka,哈哈哈哈。就这么说,就是虽然别的 MQ 有一些很方便的功能,但是总的来说并不构成强有力的选型理由。而 Kafka 社区支持,文档都非常成熟。 即便是从混职场的角度来说,选 Kafka 肯定没人敢说你选得不对。 就我个人来说,我其实觉得性能并不是决定性的选型因素,虽然重要,但是也没特别重要。

    2023-08-14归属地:北京
  • peter
    请教老师一个问题:kafka是用户大数据的消息队列,有没有这个说法?

    作者回复: 我没看懂,啥叫做用户大数据的消息队列?

    2023-08-07归属地:北京
    2
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部