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

MQ 架构与细节的更多相关文章

  1. 为什么要用消息队列 及 自己如何设计一个mq架构

    1. 解耦:如左图, 系统a因为业务需求需要调用系统b,后续因为业务需求可能需要改代码调用系统c,甚至还要考虑被调用的系统挂了访问超时的问题.耦合性太高! 如右图, 系统a产生一条数据发送到消息队列里 ...

  2. 社区布道师揭秘消息中间件技术内幕,撰写MQ架构设计与实现原理

    RocketMQ是什么 RocketMQ是由阿里捐赠给Apache的一款分布式.队列模型的开源消息中间件,经历了淘宝双十一的洗礼. RocketMQ的特性 RocketMQ基本概念 Client端 P ...

  3. 新型I/O架构引领存储之变(四)

    新型I/O架构引领存储之变(四) 作者:廖恒 应对挑战--商务及技术考量 本文前面的部分分析了砖块模式与生俱来的总拥有成本(TCO)过高的问题.为了战胜这一挑战,超大规模数据中心的运营者须要从两个不同 ...

  4. 干净的架构The Clean Architecture

    干净的架构The Clean Architecture 这是著名软件大师Bob大叔提出的一种架构,也是当前各种语言开发架构.干净架构提出了一种单向依赖关系,从而从逻辑上形成一种向上的抽象系统. 我们经 ...

  5. 消息中间件 MQ

    复制粘贴于:https://blog.csdn.net/wqc19920906/article/details/82193316 一.消息中间件相关知识 1.概述 消息队列已经逐渐成为企业IT系统内部 ...

  6. 常用MQ及其原理

    mq为了解决什么问题?1.异步通信   有些业务不想也不需要立即处理消息.消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它.想向队列中放入多少消息就放多少,然后在需要的时候再去 ...

  7. web架构延变

    在现代的软件系统中,几乎所有的系统都使用到了数据库,不论是关系型数据,例如MySql.SQLite.Oracle.SQLServer等,还是非关系性数据,例如mongoDB.redis等.本文已web ...

  8. 消息中间件MQ详解及四大MQ比较

    一.消息中间件相关知识 1.概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手段之一.当今市面上有很多主流 ...

  9. 消息中间件(一)MQ详解及四大MQ比较

    一.消息中间件相关知识 1.概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手段之一.当今市面上有很多主流 ...

随机推荐

  1. Cortex-M3 内核中悬起标志位细节逻辑

    对于外设中断,如果通过NVIC_DisableIRQ(xxx)关闭对应NVIC里面的使能位,会导致对应中断Pend位置起,如果清除Pend位时不清外设的中断标志位将导致对应Pend位立刻再次置起.所以 ...

  2. tensorflow-gpu+"Failed to create session"

    成因: 未给系统指定相应使用的GPU 解决: 层面1: 针对单个程序: CUDA_VISIBLE_DEVICES=0 python main.py import os; os.environ['CUD ...

  3. web 前端工具: Gulp 使用教程

    1 1 1 Gulp 使用教程: 1 1 1 1 1 1 1 1 ERROR: ./app.js 当前目录路径: ./ 当前目录路径: ./ 1 1 1 1 1 参考资源: http://webpac ...

  4. GitHub in depth

    GitHub in depth GitHub 高级玩法 / 进阶教程 https://github.com/trending/dart?since=daily https://github.com/t ...

  5. DNS & TXT recode & Google Search Console

    DNS & TXT recode & Google Search Console domain name verification / 域名验证 demo DNS TXT recode ...

  6. GitHub Sponsors

    GitHub Sponsors https://github.com/sponsors https://github.com/sponsors/xgqfrms?preview=true https:/ ...

  7. react 遍历 object

    @observable obj = { name: "ajanuw", age: 22, }; @computed get list() { return _.toPairs(th ...

  8. git log的常用命令

    git config --global alias.lg "log --graph --oneline --pretty='%Cred%h%Creset -%C(yellow)%d%Cblu ...

  9. 2021年-在windwos下如何用TOMACT发布一个系统(完整配置案列)

    2021年新年第一篇:博主@李宗盛-关于在Windwos下使用TOMCAT发布一个系统的完成配置案列. 之前写过关于TOMCAT的小篇幅文档,比较分散,可以作为对照与参考. 此篇整合在一起,一篇文档写 ...

  10. Warning: Cannot update during an existing state transition (such as within `render`). Render 报错

    原来 修改(不用在构造函数里面定义)