美文网首页MQ
01-MQ消息队列

01-MQ消息队列

作者: 紫荆秋雪_文 | 来源:发表于2021-07-04 08:40 被阅读0次

    一、什么是MQ

    MQ(Message Queue)本质是个队列,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务

    二、为什么要用MQ

    1、流量消峰

    例如在正常情况订单系统最多可以处理一万次订单,但是在高峰期,如果有两万次下单情况下订单系统是处理不了的。
    • 方式一,只能限制订单超过一万以后不允许用户下单,这样体验较差
    • 方式二,使用消息队列做缓冲,无需限制用户下单,把一秒内下的订单分散成一段时间来处理,这会造成用户延时收到订单成功操作,但是这比方式一要好一些

    2、应用解耦

    以电商引用为例,应用中有订单系统、库存系统、物流系统、支付系统。用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个系统出现了故障,都会造成下单操作异常。 image.png
    • 使用消息队列应用解耦,上述系统间不会直接调用而是通过消息队列,如果某个系统停止一段时间并不会阻塞其他系统业务,而该系统的消息也不会丢失,当该系统重启后还可以继续处理堆积的消息任务


      image.png

    3、异步处理

    有些服务间调用是异步的,例如 A 调用 B,B需要花费很长时间执行无法立即给 A 响应,但是 A 需要知道 B 的执行响应
    • 方式一,A过一段时间再去调用 B 的查询 API 查询
    • 方式二,A提供一个 CallBack API,B 执行完之后调用 API 通知 A
    • 方式三,使用消息队列,可以很方便解决这个问题,A 调用 B 服务后,只需要监听 B 处理完成的消息就可以了,当 B 服务执行完毕后,发送一条消息给 MQ,A 会监听到MQ中的消息 image.png

    三、MQ的分类

    1、ActiveMQ

    优点:单机吞吐量万级,时效性ms级,可用性高,基于主从架构实现高可用性,消息可靠性较低的概率丢失数据
    缺点:维护越来越少

    2、kafka

    大数据的杀手锏,以其百万级TPS的吞吐量名声大噪,迅速成为大数据领域宠儿

    优点
    • 性能卓越,单机写入TPS约在百万条/秒,最大的优点,就是吞吐量高
    • 时效性 ms 级可用性非常高
    • kafka是分布式的
    • Web管理界面 kafka-Manager
    • 在日志领域比较成熟
    缺点
    • 单机超过 64 个队列/分区,load会发生明显的飚高现象,队列越多,load越高,发送消息响应时间变长
    • 消息失败不支持重试
    • 支持消息顺序,但是宕机后就会产生消息乱序

    3、RocketMQ

    RocketMQ 出自阿里巴巴的开源项目,使用Java实现

    优点
    • 单机吞吐量十万级,可用性非常高,分布式架构,消息可以做到0丢失
    缺点
    • 支持的客户端语言不多
    • 社区活跃度一般

    4、RabbitMQ

    2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可服用的企业消息系统,是当前最主流的消息中间件之一

    优点
    • 由于erlang语言的高并发特性,性能较好
    • 吞吐量万级
    • 功能比较完备,健壮,稳定,易用,跨平台,支持多语言
    • 社区活跃度高
    缺点
    • 商业版需要收费

    相关文章

      网友评论

        本文标题:01-MQ消息队列

        本文链接:https://www.haomeiwen.com/subject/eplmultx.html