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
  • 相关阅读:
    比原空投问答题库题解(一)
    RXD, tree and sequence IN HDU6065
    python爬虫——对爬到的数据进行清洗的一些姿势(5)
    hdu 5934 Bomb
    HDU 3360 National Treasures
    HDU 1845 Jimmy’s Assignment
    HDU 1528 Card Game Cheater
    HDU 1507 Uncle Tom's Inherited Land*
    HDU 1281 棋盘游戏
    WampServer出现You don’t have permission to access/on this server提示
  • 原文地址:https://www.cnblogs.com/ice-image/p/14550603.html
Copyright © 2011-2022 走看看