• 消息队列


    消息队列

    定义

    消息系统(message broker),我们也可以称消息队列:是一个中间程序模块,将发送方消息协议中的消息转换为接收方的消息协议。软件应用程序通过它交换消息,进行通信。

    为何使用消息系统

    解耦:异构系统或者应用程序之间共享传递数据。

    缓解系统瓶颈:在访问量剧增的情况下,应用仍然需要继续发挥作用,使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。

    提高可伸缩性:因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的,只要另外增加处理过程即可,例如添加consumer或者producer。不需要改变代码、不需要调节参数。扩展就像调大电力按钮一样简单。

    可恢复性:系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。

    其他丰富功能:例如,异步通信,排序保证,送达保证

    应用场景

    1.应用解耦

    场景说明:用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口。如下图:

     

    传统模式的缺点:

    1)假如库存系统无法访问,则订单减库存将失败,从而导致订单失败;

    2)订单系统与库存系统耦合;

    如何解决以上问题呢?引入应用消息队列后的方案,如下图:

     

    订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。

    库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。

    假如:在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦。

    2.流量削锋

    流量削锋也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。

    应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。

    可以控制活动的人数;

    可以缓解短时间内高流量压垮应用;

     

    用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面;

    秒杀业务根据消息队列中的请求信息,再做后续处理。

    3.日志采集

    日志处理是指将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题。架构简化如下:

     

    日志采集客户端,负责日志数据采集,定时写受写入Kafka队列;

    Kafka消息队列,负责日志数据的接收,存储和转发;

    日志处理应用:订阅并消费kafka队列中的日志数据;

    4.异步处理

    场景说明:用户注册后,需要发注册邮件和注册短信。

     

    引入消息队列,将不是必须的业务逻辑,异步处理。改造后的架构如下:

     

    常见消息系统

    Amazon Web Services (AWS) Simple Queue Service (SQS)

    Apache ActiveMQ

    Apache Kafka

    Apache Qpid

    Apache RocketMQ

    Celery

    Cloverleaf (E-Novation Lifeline)

    Comverse Message Broker (Comverse Technology)

    Enduro/X Transactional Message Queue (TMQ)

    Financial Fusion Message Broker (Sybase)

    Fuse Message Broker (enterprise ActiveMQ)

    Gearman

    HornetQ (Red Hat)

    IBM Integration Bus

    IBM Message Queues / IBM WebSphere MQ

    JBoss Messaging (JBoss)

    JORAM

    Microsoft Azure Service Bus (Microsoft)

    Microsoft BizTalk Server (Microsoft)

    NATS (MIT Open Source License, written in Go)

    Open Message Queue

    Oracle Message Broker (Oracle Corporation)

    QDB (Apache License 2.0, supports message replay by timestamp)

    RabbitMQ (Mozilla Public License, written in Erlang)

    Redis An open source, in-memory data structure store, used as a database, cache and message broker.

    SAP PI (SAP AG)

    Solace Systems Message Router

    Spread Toolkit

    Tarantool, a NoSQL database, with a set of stored procedures for message queues

    WSO2 Message Broker

  • 相关阅读:
    idea的tomcat配置
    idea设置类文件的头部信息
    设置idea注释颜色
    Idea设置字体
    python 全栈开发,Day11(函数名应用,闭包,装饰器初识,带参数以及带返回值的装饰器)
    python 全栈开发,Day10(动态参数,命名空间,作用域,函数嵌套)
    python 全栈开发,Day9(函数的初始,返回值,传参,三元运算)
    python 全栈开发,Day8(文件操作)
    python 全栈开发,Day7(元组转换,列表以及字典的坑,集合,关系测试,深浅copy,编码补充)
    python 全栈开发,Day6补充(is,小数据池,编码转换)
  • 原文地址:https://www.cnblogs.com/wangchaonan/p/10731475.html
Copyright © 2020-2023  润新知