注:前提是知道什么是消息队列。不懂的去搜索各种消息队列入门(activeMQ、rabbitMQ、rocketMQ、kafka)

1、为什么要使用MQ?(MQ的好处:解耦、异步、削峰)

(1)解耦:主要解决系统间的耦合度

场景是系统A会产生用户ID:userId,要把userId通过调用系统B\C\D的接口传给他们做业务处理。若添加新系统,也需要此userId,则要再加一个接口调用。耦合严重。

解耦的做法就是:在系统A与系统BCD之间,增加消息队列MQ,系统A产生userId后,将其放入MQ,系统BCD通过监听MQ,来消费userId。

以上,通过MQ,发布和订阅消息的pub/sub模型。

原耦合模型:用户请求--->A---->BCD;               现解耦模型:用户请求---->A--->MQ---->BCD;

(2)异步:主要解决请求的耗时

场景是用户发送请求到系统A,系统A执行完本地SQL(耗时100ms)后,还要调用BCD三个系统的接口,假设三次调用都耗时200ms。那么,总共一次请求耗时700ms。一旦调用接口变多,耗时会变得更长。

使用MQ解决耗时长的办法就是,在系统A与系统BCD之间分别增加MQ,系统A将数据消息写入MQ(耗时5ms),成功就返回并提示用户,剩余的BCD系统自己监听MQ并做相应业务操作。那么,这个请求耗时也就是100+5 = 105ms。

模型跟解耦一样。

(3)削峰:主要解决并发请求百万级时系统挂了

MYSQL处理能力有限,大概最高2000/秒

场景:某秒杀活动,同一时间大量用请求全怼过来了(100万请求),不用MQ的话系统就被打死了(数据库处理不过来了)

模型是:   用户同时的100万请求--->系统A----每秒5000个请求--->  mysql

使用MQ:将用户请求先放入MQ,有多少放多少,系统A每次去拿2000个,并请求MySQL资源,系统不会被打死

模型是:用户100万请求--->全写入MQ---> 系统A每次去MQ消费2000条 --->mysql

2、MQ的缺点

(1)系统可用性降低:ABCD四个系统,忽然加一个MQ进来,维护变多,万一忽然挂了,影响下游多系统

(2)系统复杂性升高:怎么保证MQ里的消息没有被重复消费?消息丢失了怎么处理?消息传递的顺序性怎么保证?

(3)一致性问题:异步里面,A处理完直接返回成功了,但是最后一个系统D写入失败了,咋整

3、activeMQ、rabbitMQ、rocketMQ、kafka的区别

高并发系统:消息队列MQ的更多相关文章

  1. 大数据高并发系统架构实战方案(LVS负载均衡、Nginx、共享存储、海量数据、队列缓存)

    课程简介: 随着互联网的发展,高并发.大数据量的网站要求越来越高.而这些高要求都是基础的技术和细节组合而成的.本课程就从实际案例出发给大家原景重现高并发架构常用技术点及详细演练. 通过该课程的学习,普 ...

  2. 为什么会需要消息队列(MQ)?

    为什么会需要消息队列(MQ)? #################################################################################### ...

  3. 消息队列一:为什么需要消息队列(MQ)?

    为什么会需要消息队列(MQ)? #################################################################################### ...

  4. 详解RPC远程调用和消息队列MQ的区别

    PC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制. RPC框架 知名度较高的有Thrift(FB的).dubbo(阿里的). RP ...

  5. 消息队列 MQ 入门理解

    功能特性: 应用场景: 消息队列 MQ 可应用于如下几个场景: 分布式事务 在传统的事务处理中,多个系统之间的交互耦合到一个事务中,响应时间长,影响系统可用性.引入分布式事务消息,交易系统和消息队列之 ...

  6. 消息队列mq总结(重点看,比较了主流消息队列框架)

    转自:http://blog.csdn.net/konglongaa/article/details/52208273 http://blog.csdn.net/oMaverick1/article/ ...

  7. 消息队列MQ简介

    项目中要用到RabbitMQ,领导让我先了解一下.在之前的公司中,用到过消息队列MQ,阿里的那款RocketMQ,当时公司也做了简单的技术分享,自己也看了一些博客.自己在有道云笔记上,做了一些整理,但 ...

  8. 消息队列mq总结

    一.消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构.目前使用较多的消息队列有ActiveMQ,RabbitM ...

  9. java面试记录三:hashmap、hashtable、concurrentHashmap、ArrayList、linkedList、linkedHashmap、Object类的12个成员方法、消息队列MQ的种类

    口述题 1.HashMap的原理?(数组+单向链表.put.get.size方法) 非线程安全:(1)hash冲突:多线程某一时刻同时操作hashmap并执行put操作时,可能会产两个key的hash ...

随机推荐

  1. 火狐的一个bug

    发现这个bug是因为最近眼睛不太好,所以网页大小都是正常大小的140% 就发现火狐游览器好多网页上的输入框与按钮对不齐 测试代码 <!DOCTYPE html> <html lang ...

  2. 严重 [RMI TCP Connection(3)-127.0.0.1]

    学习Servlet时碰到的一个bug. Connected to server [2017-01-08 04:40:33,100] Artifact jspRun:war exploded: Arti ...

  3. Codeforces_846

    A.简单dp. #include<bits/stdc++.h> using namespace std; ],dp[][] = {}; int main() { ios::sync_wit ...

  4. POJ_2479_DP

    http://poj.org/problem?id=2479 从前向后保存起点到每一点的最长串,从后向前保存尾点到每一点的最长串. 然后枚举中断点,找前后和最大值就行了. #include<io ...

  5. Scala函数式编程(五) 函数式的错误处理

    前情提要 Scala函数式编程指南(一) 函数式思想介绍 scala函数式编程(二) scala基础语法介绍 Scala函数式编程(三) scala集合和函数 Scala函数式编程(四)函数式的数据结 ...

  6. Generator - Python 生成器

    Generator, python 生成器, 先熟悉一下儿相关定义, generator function 生成器函数, 生成器函数是一个在定义体中存有 'yield' 关键字的函数. 当生成器函数被 ...

  7. PyTorch可视化——tensorboard、visdom

    一.pytorch与tensorboard结合使用 Tensorboard Tensorboard一般都是作为tf的可视化工具,与tf深度集成,它能够展现tf的网络计算图,绘制图像生成的定量指标图以及 ...

  8. PHP 中 new static 和 new self 的区别

            今天老大在公司 问了一下  new static  和 new self 的区别 公司十个程序 竟然没有一个回答上来 后面画面自补 ... 本屌丝回家后 就百度了解了下 这二者区别 : ...

  9. 使用 pyenv 管理不同的 Python 版本

    1. pyenv 的安装 $ yum install git -y $ yum install gcc make patch gdbm-devel openssl-devel sqlite-devel ...

  10. chkcongfig 命令

    chkconfig   命令主要用来  更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig ...