• 【MQ】消息队列


    特点介绍

    消息队列是一种“先进先出”的数据结构

    1234qqq.jpg

    其中应用场景包药包含三个方面

    一、应用解耦

    系统的耦合性高,容错率就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用,都会造成下单操作异常,影响用户使用体验。

    去.jpg

    使用消息队列解耦合,系统的耦合性就会提高了。比如物流系统发生故障,需要几分钟才能来修复,在这段时间内,物流系统要处理的数据被缓存到消息队列中去,用户的下单操作正常完成。当物流系统回复后,补充处理存在消息队列中的订单消息即可,终端系统感知不到物流系统发生过几分钟故障。

     

    二、流量消峰

    6.jpg

    应用系统如果遇到系统请求流量的瞬间猛增,有可能会将系统压垮。有了消息队列可以将大量请求缓存起来,分散到很长一段时间处理,这样可以大大提高系统的稳定性和用户体验。

     

    7.jpg

    一般情况,为了保证系统的稳定性,如果系统负载超过阈值,就会阻止用户请求,这会影响用户体验,而如果使用消息队列将请求缓存起来,等待系统处理完毕后通知用户下单完毕,这样总比不能下单体验要好。

    处于经济考量目的:

    业务系统正常时段 QPS如果是1000,流量最高峰是10000,为了应对流量高峰配置高性能的服务器显然不划算,这时可以使用消息队列应对峰值流量消峰。

     

    三、数据分发

    8.jpg

    通过消息队列可以让数据在多个系统之间进行流通,数据的产生不需要关心谁来使用数据,只需要将数据发送到消息队列,数据使用方直接在消息队列中直接获取数据即可

    9.jpg

    MQ的优缺点

    优点:解耦、消峰、数据分发

    缺点:

    • 系统可用性降低

         系统引入的外部依赖过多,系统稳定性越差。一旦MQ宕机,就会对业务造成影响。

    • 系统复杂性提高

          MQ的加入增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用

    • 一致性问题

         A系统处理完业务,通过MQ分给B、C、D三个系统发消息数据,如果B系统、C系统处理成功,D系统处理失败

    RocketMQ角色介绍

    • Producer:消息发送者(发信者)
    • Consumer:消息接收者(收信者)
    • Broker:暂存和传输消息(邮局)
    • NameServer:管理Broker(邮局的管理结构)
    • Topic:区分消息的种类

        一个发送者可以发送消息给一个或者多个Topic;

        一个消息的接收者可以订阅一个或者多个Topic消息

    • Message  Queue:相当于是Topic的区分,用于并行发送好而接收消息

    11.jpg集群特点

    • NameServer是一个无状态节点,节点之间无任何信息同步
    • Broker分为Master和Slave,一个Master可以对应多个Slave,但一个Slave只能对应一个Master。Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokeID来定义,BrokerID为0表示Master,非0表示Slave。每个Broker与NameServer集群中的所有节点建立长连接,定时注册Topic信息到所有NameServer
    • Producer与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer获取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。
    • Consumer与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer获取Topic路由信息,并向提供Topic服务的Mater、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以向Master订阅信息,也可以从Slave订阅消息,订阅规则由Broker配置来决定
  • 相关阅读:
    MySql--密码查看或修改
    javaweb学习--Servlet开发(一)
    javaweb学习--http协议
    Vue.js学习笔记(一)
    javascript事件处理
    javascript时间的相关操作
    代理模式(Proxy)
    单例模式(Singleton)
    ArrayBlockingQueue和LinkedBlockingQueue队列
    自增(++)和自减(--)运算符
  • 原文地址:https://www.cnblogs.com/liuqiangdong/p/13300178.html
Copyright © 2020-2023  润新知