-----消息中间件------

  1. 消息队列—典型场景(异步处理
    1.1 重要作用
    • 解耦 ) 模块只关心自己的核心流程,而依赖该模块执行结果的其他模块如果做的不是很重要的事,有通知即可,无须等待结果, 关心的是通知, 而非结果。
    • 流量削峰 ) 在分布式系统中, 经常出现摸个基础服务不可用造成整个系统不可用的情况, 这种现象称为(“服务雪崩效应” ),从而导致整个系统不可用。当访问量剧增时,为了保证服务的正常使用,有的会考虑扩展更多的服务器,增加系统处理并发请求的能力。 但是,突发流量并不常见,为峰值流量投入大量的资源,无疑是巨大的浪费。 使用 消息对列 先将短时间的高并发请求持久化,然后逐步处理,从而削平高峰器的并发流量,改善系统的性能。
    • (日志收集),日志是开发和运维中非常重要的一部分,可以用来跟踪,定位问题.随着业务的发展,功能越来越多,产生的日志也越来越多,对大量日志的实时获取每个系统当前的状态,变得越来越迫切。 此时,利用消息队列产品在接收和持久化消息方面的高性能,引入消息对列快速接收日志消息,避免因写入日志某些故障导致哦系统阻塞,请求延时等。一般会搭建一个日志收集系统,统一收集业务日志数据。
    • 事务最终一致性) 分布式事务,业界曾经有个处理分布式事务的规范--------XA, XA —主要定义 (全局事务管理器(Transaction Manager) 和 局部资源管理器(Resource Manager)之间的接口, XA 接口是双向的系统接口,在事务管理器及一个或多个资源管理器之间形成通信桥梁, XA 引入事务管理器充当全局事务的协调者的角色,事务管理控制着全局事务,管理事务生命周期,并协调资源。适合传统项目偶尔跨库操作的情况,但是每个事务操作都设计系统间的多次通信,协调性能很差,不适合高性能高并发场景。
      可以借助消息队列实现,通过(事件表)来解数据库操作和消息队列操作在同一事务中。

  1. 消息队列需解决问题:
  • 消息堆积: 消费者生产者模式,一旦某个时段消费者消费进度不及生产进度,导致消息在处理中心堆积得不到释放,给消息队列设置一个阈值,超过阈值,消息不再放入处理中心,以防止系统资源耗尽,机器宕机,整个消息队列不可用。
  • 消息持久化: 如果消息到达处理中心不处理就直接转给消费者,那么消息中心就失去了存在的意义,无法满足流量削峰等需求,常规做法先将消息暂存,然后再投递,若要保证服务器宕机不丢消息,需要将消息持久化将消息存到本地文件,分布式文件系统,数据库系统中等。
  • 可靠投递: 可靠投递及不允许消息丢失,消息丢失一般发生在1. 生产者到处理中心,2. 处理中心到消费者,3. 持久化消息
  • 消息重复: 某些消息队列,为了保证消息的可靠投递,把消息持久化到本地,然后发送给消费者。定时轮询待发送的消息,可能存在重复消息的情况。
  • 严格有序: 保证消息的有序消费。
  • 集群: 高可用,排除单点故障引起系统不可用。

猜你喜欢

转载自blog.csdn.net/qq_16183731/article/details/103339959