精华内容
下载资源
问答
  • 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为:当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候。 消息队列主要解决了应用...

    一、消息队列(MQ)概述

    消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为:当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候。

    消息队列主要解决了应用耦合、异步处理、流量削锋等问题。

    当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,而部分数据库如Redis、Mysql以及phxsql也可实现消息队列的功能。

    二、消息队列使用场景

    消息队列在实际应用中包括如下四个场景:

    • 应用耦合:多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败;
    • 异步处理:多应用对消息队列中同一消息进行处理,应用间并发处理消息,相比串行处理,减少处理时间;
    • 限流削峰:广泛应用于秒杀或抢购活动中,避免流量过大导致应用系统挂掉的情况;
    • 消息驱动的系统:系统分为消息队列、消息生产者、消息消费者,生产者负责产生消息,消费者(可能有多个)负责对消息进行处理;

    下面详细介绍上述四个场景以及消息队列如何在上述四个场景中使用:

    2.1 异步处理

    具体场景:用户为了使用某个应用,进行注册,系统需要发送注册邮件并验证短信。对这两个操作的处理方式有两种:串行及并行。

    (1)串行方式:新注册信息生成后,先发送注册邮件,再发送验证短信;

    在这种方式下,需要最终发送验证短信后再返回给客户端。

    (2)并行处理:新注册信息写入后,由发短信和发邮件并行处理;

    在这种方式下,发短信和发邮件 需处理完成后再返回给客户端。

    假设以上三个子系统处理的时间均为50ms,且不考虑网络延迟,则总的处理时间:

    串行:50+50+50=150ms
    并行:50+50 = 100ms

    若使用消息队列:

    并在写入消息队列后立即返回成功给客户端,则总的响应时间依赖于写入消息队列的时间,而写入消息队列的时间本身是可以很快的,基本可以忽略不计,因此总的处理时间相比串行提高了2倍,相比并行提高了一倍;

    2.2 应用耦合

    具体场景:用户使用QQ相册上传一张图片,人脸识别系统会对该图片进行人脸识别,一般的做法是,服务器接收到图片后,图片上传系统立即调用人脸识别系统,调用完成后再返回成功,如下图所示:

    该方法有如下缺点:

    • 人脸识别系统被调失败,导致图片上传失败;
    • 延迟高,需要人脸识别系统处理完成后,再返回给客户端,即使用户并不需要立即知道结果;
    • 图片上传系统与人脸识别系统之间互相调用,需要做耦合;

    若使用消息队列:

    客户端上传图片后,图片上传系统将图片信息如uin、批次写入消息队列,直接返回成功;而人脸识别系统则定时从消息队列中取数据,完成对新增图片的识别。
    此时图片上传系统并不需要关心人脸识别系统是否对这些图片信息的处理、以及何时对这些图片信息进行处理。事实上,由于用户并不需要立即知道人脸识别结果,人脸识别系统可以选择不同的调度策略,按照闲时、忙时、正常时间,对队列中的图片信息进行处理。

    2.3 限流削峰

    具体场景:购物网站开展秒杀活动,一般由于瞬时访问量过大,服务器接收过大,会导致流量暴增,相关系统无法处理请求甚至崩溃。而加入消息队列后,系统可以从消息队列中取数据,相当于消息队列做了一次缓冲。

    该方法有如下优点:

    1. 请求先入消息队列,而不是由业务处理系统直接处理,做了一次缓冲,极大地减少了业务处理系统的压力;
    2. 队列长度可以做限制,事实上,秒杀时,后入队列的用户无法秒杀到商品,这些请求可以直接被抛弃,返回活动已结束或商品已售完信息;

    2.4 消息驱动的系统

    具体场景:用户新上传了一批照片, 人脸识别系统需要对这个用户的所有照片进行聚类,聚类完成后由对账系统重新生成用户的人脸索引(加快查询)。这三个子系统间由消息队列连接起来,前一个阶段的处理结果放入队列中,后一个阶段从队列中获取消息继续处理。

    该方法有如下优点:

    • 避免了直接调用下一个系统导致当前系统失败;
    • 每个子系统对于消息的处理方式可以更为灵活,可以选择收到消息时就处理,可以选择定时处理,也可以划分时间段按不同处理速度处理;
    展开全文
  • 异步编程开发是程序员在学习软件开发的时候需要掌握的一种编程开发方法,而今天我们就一起来了解一下,异步编程的使用场景和作用都有哪些。 使用场景 针对某些客户端的请求,在服务端可能需要针对这些请求做一些...

    异步编程开发是程序员在学习软件开发的时候需要掌握的一种编程开发方法,而今天我们就一起来了解一下,异步编程的使用场景和作用都有哪些。

    异步编程的使用场景和作用都有哪些

    使用场景

    针对某些客户端的请求,在服务端可能需要针对这些请求做一些附属的事情,这些事情其实用户并不关心或者用户不需要立即拿到这些事情的处理结果,这种情况就比较适合用异步的方式处理这些事情。

    作用

    缩短接口响应时间,使用户的请求快速返回,用户体验更好。

    避免线程长时间处于运行状态,这样会引起服务线程池的可用线程长时间不够用,进而引起线程池任务队列长度增大,从而阻塞更多请求任务,使得更多请求得不到技术处理。

    线程长时间处于运行状态,可能还会引起系统Load、CPU使用率、机器整体性能下降等一系列问题,甚至引发雪崩。异步的思路可以在不增加机器数和CPU数的情况下,有效解决这个问题。

    常见做法

    一种做法,是额外开辟线程,这里可以采用额外开辟一个线程或者使用线程池的做法,在IO线程(处理请求响应)之外的线程来处理相应的任务,在IO线程中让response先返回。

    如果异步线程处理的任务设计的数据量非常巨大,那么可以引入阻塞队列BlockingQueue作进一步的优化。具体做法是让一批异步线程不断地往阻塞队列里扔数据,然后额外起一个处理线程,循环批量从队列里拿预设大小的一批数据,来进行批处理(比如发一个批量的远程服务请求),这样进一步提高了性能。

    另一种做法,是使用消息队列(MQ)中间件服务,MQ天生就是异步的。一些额外的任务,可能不需要我这个系统来处理,但是需要其他系统来处理。这个时候可以先把它封装成一个消息,扔到消息队列里面,通过消息中间件的可靠性保证把消息投递到关心它的系统,然后让这个系统来做相应的处理。

    比如C端在完成一个提单动作以后,可能需要其它端做一系列的事情,但是这些事情的结果不会立刻对C端用户产生影响,那么就可以先把C端下单的请求响应先返回给用户,返回之前往MQ中发一个消息即可。而且这些事情理应不是C端的负责范围,所以这个时候用MQ的方式,来解决这个问题合适。

    展开全文
  • MQ 有哪些使用场景

    2020-05-26 22:18:19
    需要新增发送微信消息模块,从 MQ 中读取任务,发送消息即可。无需改动注册模块的代码,这样注册模块与发送模块通过 MQ 解耦。 流量削峰:秒杀和抢购等场景经常使用 MQ 进行流量削峰。活动开始时流量暴增,用户的...
    • 异步处理:用户注册后,发送注册邮件和注册短信。用户注册完成后,提交任务到 MQ,发送模块并行获取 MQ 中的任务。
    • 系统解耦:比如用注册完成,再加一个发送微信通知。只需要新增发送微信消息模块,从 MQ 中读取任务,发送消息即可。无需改动注册模块的代码,这样注册模块与发送模块通过 MQ 解耦。
    • 流量削峰:秒杀和抢购等场景经常使用 MQ 进行流量削峰。活动开始时流量暴增,用户的请求写入 MQ,超过 MQ 最大长度丢弃请求,业务系统接收 MQ 中的消息进行处理,达到流量削峰、保证系统可用性的目的。
    • 日志处理:日志采集方收集日志写入 kafka 的消息队列中,处理方订阅并消费 kafka 队列中的日志数据。
    • 消息通讯:点对点或者订阅发布模式,通过消息进行通讯。如微信的消息发送与接收、聊天室等。

     

     


    【Java面试题与答案】整理推荐

     

    展开全文
  • 异步和单线程

    2018-09-05 22:38:37
    同步和异步的区别是什么?...同步阻塞代码执行,异步不会阻塞程序进行(alert是同步,setTimeout是异步),以下场景需要异步:1在可能发生等待的情况;2等待过程中不能像alert一样阻止程序运行,所以“等...

    同步和异步的区别是什么?分别去一个同步和异步的例子

    一个关于setTimeout的笔试题

    前端使用一步的场景有哪些

    什么是异步?(对比同步) 前端使用异步的场景,为什么? 异步和单线程(js是单线程语言)?

    同步阻塞代码执行,异步不会阻塞程序进行(alert是同步,setTimeout是异步),以下场景需要异步:1在可能发生等待的情况;2等待过程中不能像alert一样阻止程序运行,所以“等待的情况都需要异步”:

    定时任务:setTimeout,setInterval

    网络请求:Ajax请求,动态<img>加载

    事件绑定

    console.log(100)
    setTimeout(() => {
        console.log('200')
    });
    console.log(300)

    异步和单线程

    异步的拿出去放一边,所有的都执行结束之后再执行。单线程一个一个来,一个时间只能做一件事为了不阻塞,用异步

     

    展开全文
  • rabbitmq 的使用场景哪些

    千次阅读 2020-07-11 23:53:19
    跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列。就像我们除了打电话(同步)以外,还需要发短信,发电子邮件(异步)的通讯方式。 ②. 多个应用之间的耦合,由于消息是平台无关和语言无关的,而且...
  • Spark 是一种与 Hadoop 相似的开源集群计算环境,是专为大规模数据处理而设计的快速通用的计算引擎,现已形成一个高速发展应用广泛的生态系统,主要应用场景如下:  1. Spark是基于内存的迭代计算框架,适用于需要...
  • 同步和异步

    千次阅读 2018-09-25 15:19:05
    前端使用异步场景哪些?(需要等待) 定时任务:setTimeout,setInterval 网络请求:ajax请求,动态&lt;img&gt;加载 事件绑定 //ajax请求代码 console.log('start') $.get('./data1.json',functio....
  • js中的同步和异步

    千次阅读 2018-04-08 10:16:56
    前端使用异步场景哪些 知识点: 什么是异步(对比同步) 前端使用异步场景 异步和单线程 同步和异步的区别? 是否发生了阻塞,例子ajax的同步和异步请求。 使用场景? 是否需要等待执行。 定时任务...
  • JS-异步和单线程

    2018-10-15 20:56:28
    问:什么时候需要异步? 答:事件可能会发生等待的时候(例如alert可能会发生等待) 问:有哪些场景会发生等待? 答: 定时任务:settimeout() setinverval() 网络请求:ajax、动态&lt;img&gt;标签 事件绑定...
  • rmi: 采用JDK标准的rmi协议实现,传输参数和返回参数对象需要实现Serializable接口,使用java标准序列化机制,使用阻塞式短连接,传输数据包大小混合,消费者和提供者个数差不多,可传文件,传输协议TCP。...
  • 在实施异步框架落地的过程中有哪些需要注意的地方? 本文从以下几个方面结合真实项目异步改造经验对异步编程进行分析,希望能给大家一些客观认识: 使用RxJava异步改造后的效果 什么是异步编程?异步实现原理 异步...
  • (2)rmi: 采用 JDK 标准的 rmi 协议实现,传输参数和返回参数对象需要实现Serializable 接口,使用 java 标准序列化机制,使用阻塞式短连接,传输数包大小混合,消费者和提供者个数差不多,可传文件,传输协议 TCP...
  • 单线程和异步 JS是单线程语言,只能同时做一件事;浏览器和nodejs已支持JS启动进程,如Web Worker;...异步的应用场景哪些? 1、网络请求,如ajax图片加载 2、定时任务,如setTimeout ...
  • 在实施异步框架落地的过程中有哪些需要注意的地方? 本文从以下几个方面结合真实项目异步改造经验对异步编程进行分析,希望能给大家一些客观认识: 使用 RxJava 异步改造后的效果 什么是异步编程,异步实现原理 ...
  • 前端使用异步场景哪些 知识点: 什么是异步(对比同步) 前端使用异步场景: 定时任务:setTimeout, setInterval 网络请求:ajax请求,动态&lt;img&gt;加载 事件绑定 异步与单线程 1. 什么...
  • 队列的分类与应用场景

    千次阅读 2017-03-19 23:52:51
    本文目的不是讲解各种队列算法,而是在应用层面讲述使用队列能解决哪些场景问题。 应用场景 异步处理:使用队列的一个主要原因是进行异步处理,比如用户注册成功后需要发送注册成功邮件/新用户积分/优惠券等等、...
  • Java架构师需要掌握的技术: 1、熟练使用各种框架,并知道它们实现的原理。 2、jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码; 3、池技术,什么对象池,连接池,线程池……Java反射技术,写框架必备的...
  • 它只需要计算一次就可以得知哪些节点需要更新。也就是说,如果更改了N个状态,其实只需要发送一个信号就可以将DOM更新到最新。例如: <pre><code>javascript this.message = '更新完成&#...
  • 点击上方蓝色字关注我们~1.Dubbo 支持哪些协议,每种协议的应用场景,优缺点?dubbo:单一长连接和NIO异步通讯,适合大并发小数据量的服务调用,以及消费者远大于提供者。传输协议TCP,异步,Hessian序列化;rmi:...
  • 前言 时间是程序里最复杂的因素 编写 Web 应用的时候,一般来说,我们大多时候处理的都是同步的、线性的业务逻辑。...哪些是并发场景哪些是竞态场景,我们有什么对策么?注意提提神!以下全程需...
  • 要想用Node.js首先需要知道它到底是什么, 有哪些优缺点. 然后我们才能知道到底 Node.js 适合哪些应用场景. Node.js 维基百科:“Node.js 是谷歌 V8 引擎、libuv平台抽象层 以及主体使用 Javscript 编写的核心库三...
  • 要想用Node.js首先需要知道它到底是什么, 有哪些优缺点. 然后我们才能知道到底 Node.js 适合哪些应用场景. Node.js 维基百科:“Node.js 是谷歌 V8 引擎、libuv平台抽象层 以及主体使用 Javscript 编写的核心...
  • 在最近的工作的里面有同事问到我说,为什么我们需要一个Message Queue,Message Queue可以在哪些地方用,经过一些整理,大概能找到这些点,假如你有这方面的要求,也可以考虑使用Message Queue。 异步通信 很多时候...
  • kafka、activemq、rabbitmq、rocketmq都有什么区别以及适合哪些场景? 1.消息队列的常见使用场景吧,其实场景有很多,但是比较核心的有3个:解耦、异步、削峰 解耦:A系统发送个数据到BCD三个系统,接口调用发送,那...
  • 1、Dubbo 支持哪些协议,每种协议的应用场景,优缺点? dubbo: 单一长连接和NIO异步通讯,适合大并发小数据量的服务调用,以及消费者远大于提供者。传输协议TCP,异步,Hessian序列化。 rmi: 采用JDK标准的rmi协议...
  • LoRaWAN采用异步的ALOHA协议,需要定期的唤醒终端,终端可根据具体应用场景需求进行或长或短的休眠。    蜂窝网络的设计理念是为了提高频谱的利用率,相应地牺牲了节点成本和电池寿命。LoRa...
  • 场景:很难做静态化,像做一个微博那样的东西,并发...分清楚哪些数据是实时读写,哪些数据是异步读写;(区分数据实时还是异步的方法:) 2.数据的存储方案;mysql擅长的是关系数据和数据统计,高并发访问时瓶颈; ...
  • 跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列。就像我们除了打电话(同步)以外,还需要发短信,发电子邮件(异步)的通讯方式。 ②. 多个应用之间的耦合,由于消息是平台无关和语言无关的,而且...
  • 何时需要异步2.前端使用异步的场景3.面试解答1.同步和异步的区别是什么?分别举一个同步和异步的例子2.一个关于setTimeout的笔试题3.前端使用异步的场景哪些4.其他(日期、Math、各种常用API) JavaScript异步和单...
  • dubbo知识点总结 持续更新

    千次阅读 多人点赞 2019-10-17 20:49:21
    Dubbo 支持哪些协议,每种协议的应用场景,优缺点?  dubbo: 单一长连接和 NIO 异步通讯,适合大并发小数据量的服务调用, 以及消费者远大于提供者。传输协议 TCP,异步,Hessian 序列化;  rmi: 采用 JDK ...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 148
精华内容 59
关键字:

哪些场景需要异步