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
  • 相关阅读:
    科研第四天
    科研第三天
    科研的第一天
    django_1.6.8学习笔记——创建project
    第一个project,累哭的第一个app
    前记
    线性表——单链表小结(腾讯面试题)(4)
    一个考试模拟界面——先记录一下下ui上的东东
    源码0602-05-掌握-多值参数
    源码0602-03-掌握-XML解析-NSXMLParser
  • 原文地址:https://www.cnblogs.com/ice-image/p/14550603.html
Copyright © 2011-2022 走看看