zoukankan      html  css  js  c++  java
  • MQ 架构与细节

    MQ 架构与细节

    MQ 是什么?

    MQ:MessageQueue,消息队列的简称,用于进程间通信或同一进程的不同线程间的通信方式。

    什么时候该使用MQ?

    1. 数据驱动的任务依赖
    2. 上游不关心执行结果
    3. 上游关心执行结果,但执行时间很长

    MQ 是架构中常见的解耦利器:实时关注结果的用 RPC,任务依赖、上游不关心执行结果,异步执行结果返回时间很长,通常可以使用 MQ

    MQ 如何做到,消息必达?

    1. 消息落地
    2. 超时,重传,确认

    MQ 核心架构

    MQ 消息可靠投递

    消息重传可能导致收到重复的消息!

    必须要保证消息幂等!

    MQ 如何做到,消息幂等?

    什么是幂等性?

    使用同样的条件,一次请求和重复多次请求对系统资源的影响是一致的。

    对技术方案的启示是: 分布式系统设计中,设计必须考虑,底层重试时(并不一定是应用层发起的,有时候是TCP 层,有时候是链接池层,有时候是框架层,这些重试,并不是应用层能够控制的),系统不会异常,数据不会不一致。

    MQ 消息可靠投递,会不会有幂等性问题?

    上半场幂等的关键:inner-msg-id

    核心是消息去重

    下半场幂等的关键:unique-biz-id

    业务方通过全局唯一的业务 id 去自行保证

    业务幂等性,需要 MQ 和消息接收方配合完成!

    MQ 如何做到,削峰填谷?

    缓冲流量:将 MQ-server 给下游推送消息,升级为由下游主动去拉取 MQ-Server 里面的消息

    MQ 如何做到,消息延时?

    消息延时的业务场景

    场景:在一段时间之后,完成一个工作任务

    核心数据结构:

    1. 环形队列 queue
    2. 任务集合 Set
  • 相关阅读:
    NOI-01:查找最接近的元素 基本二分
    C#学习笔记之——数据库操作的相关类
    Lua学习笔记——环境安装(Windows和MacOS)和在MacOS安装时错误解决方法
    Ubuntu下对数据库的操作
    Git常用操作
    [Unity游戏开发]常用类之Time类
    [Unity游戏开发]四元数Quaternion
    [Unity游戏开发]常用类之Transform类
    [Unity游戏开发]常用类之Component类
    [Unity游戏开发]射线(Ray)
  • 原文地址:https://www.cnblogs.com/ice-image/p/14550603.html
Copyright © 2011-2022 走看看