热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

消息队列_消息队列01面试官对于消息队列的连环炮

篇首语:本文由编程笔记#小编为大家整理,主要介绍了消息队列01-面试官对于消息队列的连环炮相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了消息队列 01 - 面试官对于消息队列的连环炮相关的知识,希望对你有一定的参考价值。


1. 引子


消息队列分布式系统中重要的组件,一种存放消息的容器,主要作用有解耦、异步、削锋,是大型分布式系统不可缺少的中间件。


常见的消息队列有 ActiveMQ,RabbitMQ,RocketMQ,Kafka。


面试官先问了这样几个问题:






  1. 你们系统里为什么要使用消息队列?


  2. 既然使用了消息队列,说说他还有什么使用场景?


  3. 消息队列的优缺点是什么?





2. 为什么使用消息队列?


回答:甲方提供 EOS 充值服务,我方进行调用。出于解耦的目的,引入了消息队列。


回答的方向是:公司的 xxx 业务遇到了挑战,不用 MQ 会有麻烦,使用 MQ 之后带来了好处


3. 消息队列的使用场景?


消息队列的使用场景,消息队列有什么优点,消息队列有什么作用是等价的。


消息队列的作用主要有三个解耦、异步、削峰


解耦



B,C,D 系统需要使用 A 系统产生的关键数据。


无消息队列时



  • 系统 A 为系统 B、C、D 等提供各自的接口,导致系统 A 与它们紧密耦合


  • 添加系统 E 又需要接口,删除 B 系统原接口又没用了



有消息队列时



  • 系统 A 作为生产者,将消息发送到消息队列


  • 系统 B、C、D 作为消费者订阅消息


  • 新增消费者只需订阅消息,对原系统和业务没有影响



异步


消息队列 01 - 面试官对于消息队列的连环炮


为了更好的用户体验,用户请求数据时,响应时间不能太久。


无消息队列时



  • 用户请求 A 系统,A 系统需要等待 BCD 执行完成之后响应


  • 用户收到响应用时近 1 秒



用消息队列时



  • 用户请求 A 系统,A 系统将请求推到消息队列中,B、C、D 异步执行


  • 用户收到响应用时 200 毫秒



削峰


消息队列 01 - 面试官对于消息队列的连环炮


秒杀场景下,每秒有 5000 个请求,mysql 每秒最大处理 2000 条 sql。


无消息队列时



  • 用户请求数据直接写入数据库,高并发时数据库压力剧增,甚至奔溃


  • Mysql 宕机,整个系统都不能用了



有消息队列时



  • 用户请求数据先存入 MQ 中


  • 系统 A 每秒读取 2000 条数据进行处理


  • 每秒多出 3000 条未处理数据按场景稍后处理



4. 消息队列有什么缺点?


优点前面已经说过了,还需要讨论一下缺点。


为什么要问缺点是什么?


凡事都有两面性,如果只是考虑到消息队列的优点,而没有考虑缺点,这就是一个潘多拉的魔盒。打开魔盒,接踵而来的会是一系列的意外。


推广到引入其他技术亦然,只有考虑到缺点之后才可以采取额外的技术方案或者架构来规避这些缺点。


系统可用性降低



  • 系统引入的外部依赖越多,宕机的可能性就越大


  • 系统引入消息队列,就要考虑消息队列的可靠性


  • 比如原本只需要考虑 A,B,C,D 四个系统


  • 引入消息队列之后就需要考虑 A,B,C,D 四个系统外加消息队列



系统复杂度提高



  • 消息重复消费问题


  • 消息丢失问题


  • 消息传递顺序问题


一致性问题



  • A 系统处理完返回成功,即认为请求成功


  • 但是也存在 BC 系统写入成功,而 D 系统写入失败的情况


  • 这样的情况就是数据不一致


总结


面试官问到 MQ 的时候,希望考察我们在使用 MQ 的时候是否有过自己的思考。


没有完美的技术,任何技术都具有两面性,要考虑它的使用场景,并且对可能遇到的风险做到心中有数,提前预防。




思考


引入消息队列之后:




  • 如何保证高可用?


  • 如何避免消息的重复消费和消息丢失?


  • 如何保证消息的顺序执行?



请听下回。


欢迎关注,深页的学习与思考


推荐阅读
  • 收割机|篇幅_国内最牛逼的笔记,不接受反驳!!
    收割机|篇幅_国内最牛逼的笔记,不接受反驳!! ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 本文探讨了随着并发需求的增长,MySQL数据库架构如何从简单的单一实例发展到复杂的分布式系统,以及每一步演进背后的原理和技术解决方案。 ... [详细]
  • 一面问题:MySQLRedisKafka线程算法mysql知道哪些存储引擎,它们的区别mysql索引在什么情况下会失效mysql在项目中的优化场景&# ... [详细]
  • 58同城的Elasticsearch应用与平台构建实践
    本文由58同城高级架构师于伯伟分享,由陈树昌编辑整理,内容源自DataFunTalk。文章探讨了Elasticsearch作为分布式搜索和分析引擎的应用,特别是在58同城的实施案例,包括集群优化、典型应用实例及自动化平台建设等方面。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文探讨了2012年4月期间,淘宝在技术架构上的关键数据和发展历程。涵盖了从早期PHP到Java的转型,以及在分布式计算、存储和网络流量管理方面的创新。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • 字节跳动夏季招聘面试经验分享
    本文详细记录了字节跳动夏季招聘的面试经历,涵盖了一、二、三轮面试的技术问题及项目讨论,旨在为准备类似面试的求职者提供参考。 ... [详细]
author-avatar
紫凝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有