zoukankan      html  css  js  c++  java
  • 【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配置来决定
  • 相关阅读:
    (双指针 二分) leetcode 167. Two Sum II
    (双指针) leetcode 485. Max Consecutive Ones
    (双指针) leetcode 27. Remove Element
    (String) leetcode 67. Add Binary
    (数组) leetcode 66. Plus One
    (N叉树 BFS) leetcode429. N-ary Tree Level Order Traversal
    (N叉树 递归) leetcode 590. N-ary Tree Postorder Traversal
    (N叉树 递归) leetcode589. N-ary Tree Preorder Traversal
    (N叉树 DFS 递归 BFS) leetcode 559. Maximum Depth of N-ary Tree
    (BST 递归) leetcode98. Validate Binary Search Tree
  • 原文地址:https://www.cnblogs.com/liuqiangdong/p/13300178.html
Copyright © 2011-2022 走看看