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. apache 解析漏洞(CVE-2017-15715)

    在p牛博客最近更新的文章,传送门,感觉很有意思,自己在自己本地测试了一下 0x01 正则表达式中的 '$' apache这次解析漏洞的根本原因就是这个 $,正则表达式中,我们都知道$用来匹配字符串结尾 ...

  2. ubuntu+将主机编译的库链接到虚拟环境Python中

    这里且以opencv为例: cd ~/.virtualenvs/YOUR_ENV/lib/python3.5/site-packages/ ln -s /usr/local/lib/python3.5 ...

  3. JPG学习笔记3(附完整代码)

    #topics h2 { background: rgba(43, 102, 149, 1); border-radius: 6px; box-shadow: 0 0 1px rgba(95, 90, ...

  4. taro render html

    taro render html html = `<h1 style='color: red'>Wallace is way taller than other reporters.< ...

  5. vue页面切换过渡

    <!--<transition name="slide-left">--> <router-view></router-view>& ...

  6. Nginx之Location匹配规则

    概述 经过多年发展,nginx凭借其优异的性能征服了互联网界,成为了各个互联网公司架构设计中不可获取的要素.Nginx是一门大学问,但是对于Web开发者来说,最重要的是需要能捋的清楚Nginx的请求路 ...

  7. SQL Server中DELETE和TRUNCATE的区别

    ​DELETE和TRUNCATE语句之间的区别是求职面试中最常见的问题之一.这两条语句都可以从表中删除数据.然而,也有不同之处. 本文将重点讨论这些差异,并通过实例加以说明. TRUNCATE DEL ...

  8. synchronized语法

    synchronized( ){ } synchronized 关键字是加锁的意思,用它来修饰方法就表示给该方法加了锁,从而达到线程同步的效果;用它来修饰代码块就表示给该代码块加了锁,从而达到线程同步 ...

  9. docker轻量级监控-sysdig

    sysdig Sysdig = system(系统)+dig(挖掘).Sysdig 是一个开源系统发掘工具,用于系统级别的勘察和排障,可以把它看作一系列Linux系统工具的组合,主要包括: strac ...

  10. weblogic弱口令+后台getshell

     https://www.cnblogs.com/bmjoker/p/9822886.html利用docker环境模拟了一个真实的weblogic环境,其后台存在一个弱口令,并且前台存在任意文件读取漏 ...