zoukankan      html  css  js  c++  java
  • mq简单入门了解以及面试题记录

    (1)什么是mq?

    • MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。
    • 系统之间不需要直接去相互调用,比如rpc技术,它们通过消息发送来传递
    • 系统通过队列来通信。

    (2)使用mq的三种常见场景,即为什么要使用mq这个技术?还可以说mq有哪些优点好处?

    1. 系统耦合度过高,代码维护费时费力。

      • 场景:多个系统需要A系统去发送一个数据,导致A系统需要分别对每个系统去调用它们的api接口,
        1. 还得考虑接口的入参,
        2. 还有考虑容错重发机制。即其他系统挂掉,调用api接口失败。
        3. 如果某些系统不需要传递的数据了,a系统还必须取消对api接口的调用。
        4. 如果数据的类型改变了。
      • 解决方式:使用mq消息队列。把a系统发送数据-作为消息的生产者。其他各个系统作为消息的消费者。a系统只需要把消息传递到mq队列。需要数据的消费者直接去mq里进行消息的获取消费即可。pub/sub模型。
        image
    2. 同步高延时

      • 场景:在一个功能里,分为几个耗时的同步顺序执行的操作。并且这些操作允许异步处理。
        image
      • 解决方式:
        image
    3. 削峰填谷

      • 场景:在请求量过高,且大量的对数据库进行操作。在数据库qps过低,满足不了这种高并发访问环境下,就很有可能mysql宕机挂掉。
        image
        image
      • 解决方式:
        image

    (3)mq的缺点?mq会出现什么问题?

    • 系统可用性降低:原本是几个系统间的相互调用,加入mq,如果mq挂掉,整个系统就是崩掉了。
      image
    • 系统复杂性变高:消息的重复消费问题。消息丢失问题。消息传递的顺序性。
      image
    • 会出现一致性问题:A系统处理完成功返回响应。但是其他消费系统有可能处理数据失败。这就有可能会出现数据不一致问题。
      image

    (4)几种常见的mq中间件有什么区别,优缺点聊聊。
    image
    image
    image
    image
    image
    image
    image

    (5)解决引入mq可用性降低问题,或者说如何保证mq的高可用(HA)?

    (6)重复消费问题怎么解决?或者说如何保证消息的幂等性?

    • rabbitMQ保证消息幂等性:乐观锁保证数据库层面修改操作,或者使用消息记录的唯一标识,消费消息之前根据业务提供的key查redis缓存,如果不存在,就消费消息,消费消息成功后使用唯一key存入redis中,做记录。否则如果存在,则不消费。
      image
    • kafka保证消息幂等性:其实跟上面的rabbitMQ类似,都是要在一个地方存储该消息的消费记录。

    (7)消息丢失问题怎么解决?或者说如何保证消息的可靠性传输?

    (8)怎么保证消息的顺序性?

    • rabbitMQ:
      • 单队列(完全有序):一个队列对应一个消费者,并且需要保证顺序性的消息send给同一个队列。
      • 多队列(部分有序):首先保证有序的消息必须发送给同一个队列。不保证有序的情况使用多个队列。其次一个队列对应一个消费者
    • kafka:https://zhuanlan.zhihu.com/p/372469047
      • 就是使用一定的策略对需要保证有序性的消息发送给同一个partition,在发送给消费者之后,再使用相同的策略,把消息发送给同一个内存队列,该内存队列只交由一个线程去执行。这样就保证了一致性。
        image

    (9)如何解决消息队列的延时和失效问题?消息队列满了该怎么处理?消息积压怎么处理?
    image
    image
    image
    也可以通过死信队列,处理延时和失效问题(重新入队列,或者即时处理,或者记录到数据库延后处理。)

  • 相关阅读:
    Vue的router和route的区别
    对cookie进行编解码用到的函数escape,unescape
    动态控制按钮的禁用和启用
    追踪算法总结
    MATLAB imread读取imwrite保存图片前后矩阵数据不一样
    图像质量评价和视频质量评价(IQA/VQA)
    c++ 使用torchscript 加载训练好的pytorch模型
    Transformer(self attention pytorch)代码
    tensorflow 单机多GPU训练时间比单卡更慢/没有很大时间上提升
    python+selenium爬取关键字搜索google图片
  • 原文地址:https://www.cnblogs.com/rbwbear/p/15539595.html
Copyright © 2011-2022 走看看