精华内容
下载资源
问答
  • 如何解耦异步为什么需要异步如何异步削峰为什么要削峰如何削峰 解耦 项目中为什么需要解耦? 讲一个真实的项目案例,项目是一个根据国际黄金行情进行实时交易的系统,分了两个微服务,一个是纸黄金实时交易系统,一...

    解耦

    项目中为什么需要解耦?

    讲一个真实的项目案例,项目是一个根据国际黄金行情进行实时交易的系统,分了两个微服务,一个是纸黄金实时交易系统,一个是实物黄金交易系统,两个系统都需要接收实时黄金行情数据,得到用户的交易价格,并且都有一个需求,能人工控制开市和闭市,也就是什么时候可以交易,什么不可以交易,那么这个时候就需要在后台管理系统进行控制,如果没有解耦,那么后台管理系统就需要直接通过dubbo调用纸黄金交易系统和实物黄金交易系统接口,告诉两个系统要开市还是要闭市,这样做的问题在于,如果因为公司业务的拓展,如果又增加一个其他的系统(例如实物白银交易系统),那我们怎么办,我们只能修改后台管理系统的代码,再调用实物白银交易系统的接口,告诉它开闭市,那么要是再多一个呢,中间又因为某一些原因,减少了一个系统呢,维护后台管理系统的同学可能要崩溃了,需要不停的修改代码,这就是没有解耦的极端的情况,无论是增加微服务还是减少都比较麻烦,系统越多越不好控制,越难维护,那我们怎么办?就是通过mq来进行解耦,下面是没有使用mq时的场景
    在这里插入图片描述

    如何解耦

    那么如何解耦?在后台管理系统和其他系统之间增加一层mq,无论是开市指令还是闭市指令,都直接发送到队列中,然后其他系统需要开闭市操作的就要订阅监听这个队列,这样无论是增加其他的业务系统还是减少业务系统,都不需要修改后台管理系统,负责后台管理系统的同学就轻松多了,其他的系统只要接收到指令进行相应的操作就可以了
    在这里插入图片描述

    异步

    为什么需要异步

    消息队列的主要特点是异步处理,主要目的是减少请求响应时间,实现非核心流程异步化,提高系统响应性能。

    所以典型的使用场景就是将比较耗时而且不需要即时(同步)返回结果的操作,作为消息放入消息队列。

    如何异步

    就像上面讲的为什么需要异步一样,我理解的异步主要是一些非核心的流程可以进行异步话,比如一个系统的注册方法,注册的时候,发短信通知,发邮件通知,也可能会发一些优惠券,那么就可以异步的处理这些操作,尤其是发短信,发邮件,如果是同步的,可能会因为短信服务,邮件服务出现问题导致注册失败,这些本来是锦上添花的操作却影响了主流程,如果使用异步处理,不仅缩短了相应时间,即使他们短暂的出现问题,也不会影响主流程,所以很多情况下,使用mq进行异步的处理还是非常有必要的
    下面是一般的做法,不仅发邮件和短信有可能影响主流程,也增加了主流程的相应时间
    传统的做法
    改造过之后的,接口的相应时间也会缩短
    改造后的流程图
    这里需要注意的是,需要考虑消息丢失造成的影响,也就是说不管什么原因,造成邮件服务和短信服务没有接收到消息,一般的做法是通过其他的分布式定时任务来定时的扫描,超过一定时间没有进行异步处理操作,如果在一定时间里没有处理发邮件和发短信,那么通过定时任务及时弥补,做到万无一失

    削峰

    为什么要削峰

    流量削锋也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。

    应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。

    如何削峰

    在这里插入图片描述
    在这里我们增加一个消息队列,这样的话不管你请求来多少,我先存入消息队列,然后我再让系统慢慢的处理你的请求(如右图),这样很好的减缓了数据库的访问压力。
    这里需要注意的是这里是一个队列上对应多个消费者,每个消费者每次只消费一条消息,是一个工作队列模式,这样才能有效控制一下子所有的请求都跑到数据库中,下一篇文章,可以更加深入的在研究讨论一下如果做削峰

    展开全文
  • 异步 解耦 解耦前: 削峰

    异步体现在异步消费消息;解耦体现在不用修改代码进行扩展

    异步

    同步发送:

    异步消费:

    解耦

    解耦前:

    解耦后:

    总结:通过MQ的发布-订阅模型,系统A和其他系统彻底解耦了

    削峰

    削峰前后:

    消息队列带来的问题:

    1、系统可用性降低:
    系统可用性在某种程度上降低,为什么这样说呢?在加入MQ之前,你不用考虑消息丢失或者说MQ挂掉等等的情况,但是,引入MQ之后你就需要去考虑了!

    2、系统复杂性提高:
    加入MQ之后,你需要保证消息没有被重复消费、处理消息丢失的情况、保证消息传递的顺序性等等问题!

    3、一致性问题:
    我上面讲了消息队列可以实现异步,消息队列带来的异步确实可以提高系统响应速度。但是,万一消息的真正消费者并没有正确消费消息怎么办?这样就会导致数据不一致的情况了

     

    展开全文
  • 解耦削峰异步的理解

    千次阅读 2020-07-19 19:36:50
    现实世界的例子 消息队列主要由以下作用:解耦削峰异步,其实还有一个作用是提高接收着性能。 我们以一个快递员送快递的栗子来描述下队列的作用。 送快递送出了烦心事 快递员给小明送快递分为几步? 分为3步, ...

    随着技术的发展分布式系统已经成为标配,分布式系统就存在着各式各样的进程间通信。消息对列实际上就是进程间通信方式的一种,是生产者消费者模式在分布式场景下的实现。

    现实世界的例子

    消息队列主要由以下作用:解耦,削峰,异步,其实还有一个作用是提高接收着性能。

    我们以一个快递员送快递的栗子来描述下队列的作用。

    送快递送出了烦心事

    快递员给小明送快递分为几步?

    分为3步,

    第一步把快递拿到小明家门口(省略了前n步,从小明家楼下开始)

    第二步敲门(类比编程世界的调用第三方接口)

    第三步小明开门拿走快递(第三方接口执行过程)

    好了上边是送快递最简单的三步,让我们想想,这简单的三步会有什么问题?

    耦合:

    快递员什么时候完成这一单或者是否能顺利完成,十分依赖于小明的相应速度。如果小明还没起床,听见敲门声再穿衣服开门,可能消耗很多时间。如果小明没在家呢?那就要配送失败了,如何判断配送失败呢?快递员需要判断等多久开门(超时时间),打电话判断是否在家(健康检查),最终郁闷的离开,下次再来一次(重试)。
    快递员直接与小明交互,对小明的状态强依赖,产生了耦合现象。那有办法避免这种耦合呢?

    同步影响性能

    快递员的配送速度收到小明的响应速度影响极大,有一两个需要长时间等待的快件,快递员的配送效率(吞吐率)会收到很大影响。

    高峰期负载很高

    双11,618,每次到购物节的时候,快递员都很烦躁。快递太多,来的比送得快,这可如何是好。
    小明也很烦躁,一天要收100个快递,可是家里的空间都满了,要边收拾出地方边进一件快递。

    接收方还有其他事情

    如果小明准备和女朋友告白,此时来了一阵敲门声,你好,快递。
    – 还双11,小明买了100件商品,明天不定时一件件送到,小明这一天都要搭进去了。

    接收快递也成为了一件烦心事,好想把其他事情处理完再收快递,也好想一块收100件快递。

    该消息队列登场了

    现在快递员和小明都很烦躁,这个时候有个叫X巢(没收广告费)的快递柜出现了,快递员可以把快递放到柜子里,发条短信通知小明过来取快递。小明看到短信可以先做自己的事情,有空的时候过来拿走快递。

    终于,我们再看到小明和快递员的时候每个人都笑容满面。

    这里的快递柜就相当于是编程世界的消息队列,让我们看看消息队列到底起到了什么作用。

    解偶

    此时,快递员只需要把快递放到柜子里,不需要关心小明是否在家,是否在睡觉。小明也不需要一直等待给快递员开门,两个人解耦了。

    异步

    快递员把快递放到柜子里发个信息就可以去送下一件,不需同步等待结果。

    这样每个快递的处理速度(响应时间)都变得极短,每天送的快递数量(吞吐量)也变多了。

    削峰。

    这次又到了双十一,小明还是一天要到100个快递,由于小明一天只能消化10个快递,剩下的就放在了柜子里,等10天后才拿完。

    快递员由于是异步送快递,双11根本不是事,这点吞吐量完全搞得定。

    提高消费端性能

    小明以前需要一件一件收取快递,现在放在了柜子(队列)里,那等攒够了10件去取一次(buffer->reduce),好省时间!其他时间都可以快快乐乐约会了。

    总结

    让我们再来总结一下异步消息队列的作用

    解耦,生产端和消费端不需要相互依赖
    异步,生产端不需要等待消费端响应,直接返回,提高了响应时间和吞吐量
    削峰,打平高峰期的流量,消费端可以以自己的速度处理,同时也无需在高峰期增加太多资源,提高资源利用率
    提高消费端性能。消费端可以利用buffer等机制,做批量处理,提高效率。

    展开全文
  • 消息队列作用(解耦异步削峰)图详解

    万次阅读 多人点赞 2020-05-16 16:41:40
    文章目录一、消息队列简介二、解耦三、异步四、流量削峰五、消息通讯六、日志处理七 .使用消息队列带来的一些问题 一、消息队列简介 百度百科 消息队列概念 MQ全称为Message Queue,消息队列(MQ)是一种应用...

    本篇是初次学习消息队列整理的一些笔记,分享给初学者,祝大家学有所获。



    一、消息队列简介

    • 百度百科

    在这里插入图片描述
    消息队列概念

    • MQ全称为Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。
    • 消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

    消息队列中间件是分布式系统中重要的组件,主要解决应用耦合异步消息流量削锋等问题


    二、解耦

    • 传统做法
      • 传统的做法是,订单系统调用库存系统的接口。如下图:
        在这里插入图片描述
      • 传统模式的缺点:假如库存系统无法访问,则订单减库存将失败,从而导致订单失败,订单系统与库存系统耦合

    如何解决以上问题呢?

    • 使用消息队列
      • 引入应用消息队列后的方案,如下图:
        在这里插入图片描述

      • 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功

      • 库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作

      • 在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦.


    在这里插入图片描述
    举个新例子:

    比如说某一个系统A要与其他系统打交道(即调用其中的方法),如果其它系统改变或者新增系统,那么A系统都会改变,这样的话耦合度比较高,比较麻烦。

    在这里插入图片描述
    使用消息队列来解决这个问题。

    我们A系统将产生的数据发入消息队列中,其它的系统再去消息队列来进行消费,那么其他系统的减少或者新增系统即与A系统关系不大了,这样来实现解耦的功能。

    在这里插入图片描述


    三、异步

    场景说明:用户注册后,需要发注册邮件和注册短信

    • 传统做法
      • a.串行:将注册信息写入数据库成功后,发送注册邮件,再发送注册短
        在这里插入图片描述
      • b.并行:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信
        在这里插入图片描述
    • 使用消息队列
      • 将不是必须的业务逻辑,异步处理。改造后的架构如下:
        在这里插入图片描述

    在这里插入图片描述
    举个新例子

    某一个用户使用系统A,但是A要调用系统B,C,D,但是每一个系统返回的时间是不一样的,你必须要等待全部返回后才可以响应用户。

    在这里插入图片描述

    如果我们这里采用消息队列,当用户发送请求后,我们把数据传给消息队列,然后再直接响应给用户我已经发送了信息。

    在这里插入图片描述


    四、流量削峰

    场景说明:商品秒杀业务,一般会因为流量过大,导致流量暴增,应用挂掉

    • 传统做法

      • 限制用户数量
    • 使用消息队列

      • 用户的请求,服务器接收后,首先写入消息队列,秒杀业务
        在这里插入图片描述

      • 假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面。


    举个新例子

    比如平常用户的请求我们会直接访问数据库,在大量用户过来的时候,这样的话我们会对数据库照常比较大的压力

    在这里插入图片描述
    在这里我们增加一个消息队列,这样的话不管你请求来多少,我先存入消息队列,然后我再让系统慢慢的处理你的请求(如右图),这样很好的减缓了数据库的访问压力。

    在这里插入图片描述


    五、消息通讯

    消息通讯是指,消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等

    • 使用消息队列实现点对点通信

      • 客户端A和客户端B使用同一队列,进行消息通讯
        在这里插入图片描述
    • 使用消息队列实现聊天室通信

      • 客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收。实现类似聊天室效果。
        在这里插入图片描述

    六、日志处理

    日志处理是指将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题

    • 使用消息队列完成日志处理
      • 日志采集客户端,负责日志数据采集,定时写受写入Kafka队列
      • Kafka消息队列,负责日志数据的接收,存储和转发
      • 日志处理应用:订阅并消费kafka队列中的日志数据
        在这里插入图片描述

    七 .使用消息队列带来的一些问题

    在这里插入图片描述
    1、系统可用性降低:
    系统可用性在某种程度上降低,为什么这样说呢?在加入MQ之前,你不用考虑消息丢失或者说MQ挂掉等等的情况,但是,引入MQ之后你就需要去考虑了!

    2、系统复杂性提高:
    加入MQ之后,你需要保证消息没有被重复消费、处理消息丢失的情况、保证消息传递的顺序性等等问题!

    3、一致性问题:
    我上面讲了消息队列可以实现异步,消息队列带来的异步确实可以提高系统响应速度。但是,万一消息的真正消费者并没有正确消费消息怎么办?这样就会导致数据不一致的情况了。


    The best investment is to invest in yourself

    在这里插入图片描述

    2020.05.16 记录辰兮的第66篇博客

    展开全文
  • 3.1高可用 无论是我们使用消息队列来做解耦异步还是削峰,消息队列肯定不能是单机的。试着想一下,如果是单机的消息队列,万一这台机器挂了,那我们整个系统几乎就是不可用了。 所以,当我们项目中使用消息队列,...
  • 解耦 不使用MQ时 A系统发送数据到B、C、D系统,但没有使用消息队列时候的耦合场景 当后面系统不断增加,比如 E,F系统的加入,以及D系统的移除 因为A系统和其它各种系统耦合起来,那么需要处理的事情会给出...
  • 愿打开此篇对你有所帮助 本文大量引用了CSDN博主:晨兮要努力的博客:消息队列作用(解耦异步削峰),目测是个小姐姐了。看这个文章还要有点设计模式的基础哈哈 以及参考了CSDN博客专家:ithuangqing的博客:...
  • 为什么要引入MQ消息中间件 ...能够削峰: 设置流量缓冲池,可以让后端系统按照自身吞吐能力进行消费,不被冲垮. 能够异步: 强弱依赖梳理能将非关键调用链路的操作异步化并提升整体系统的吞吐能力. MQ的处理.
  • RocketMQ | 解耦异步削峰原理解析

    千次阅读 2020-02-24 16:40:03
    而消息队列在削峰方面的思想就是,把大量的订单都放到消息队列里,挨个去处理,这样的结果可能是有的用户下单要等的久一些才能成功,但是好处就在于服 务器不会凉凉鸭,如果凉了,还卖啥? 一、 RocketMQ的组成 ...
  • 那么我们为什么要用MQ呢,他到底有什么好处呢,网上很多总结,大致有三点:应用解耦异步提速、削峰填谷。 应用解耦 假设12306系统是这样的,我们买票成功后,需要做以下几件事:调用库存系统扣减车
  • 3.1高可用 无论是我们使用消息队列来做解耦异步还是削峰,消息队列肯定不能是单机的。试着想一下,如果是单机的消息队列,万一这台机器挂了,那我们整个系统几乎就是不可用了。 所以,当我们项目中使用消息队列,...
  • 我们大家都知道作用有解耦、接口异步处理、流量削峰,那么我这里来举例说明下这3个概念分别是什么。 解耦 首先我们看下耦合较高的情况,谁愿意负责A系统?难道被累死么? 负责A系统的大兄弟自作主张引入MQ消息...
  • MQ消息队列的解耦、接口异步处理、削峰

    万次阅读 多人点赞 2018-12-13 20:02:43
    我们大家都知道作用有解耦、接口异步处理、流量削峰,那么我这里来举例说明下这3个概念分别是什么。 解耦 首先我们看下耦合较高的情况,谁愿意负责A系统?难道被累死么? 负责A系统的大兄弟自作主张引入MQ消息...
  • 使用RabbitMQ消息队列异步发送短信和邮件、订单异步处理【流量削峰】 软件架构 技术栈 序号 名称 1 SpringBoot 2 SpringMVC 3 Mybatis plus 4 RabbitMQ 5 SpringBoot Mail 特点: 邮件发送的封装 ...
  • 二、为什么拥有解耦异步削峰? (1)解耦 传统模式: 传统模式的缺点: 系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦! ...
  • 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。 目前在生产环境,使用较多的消息队列有...
  • 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦异步消息,流量锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。 目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,...
  • 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量锋等问题。实现高性能,高可用,可伸缩和最终一致性...异步处理,应用解耦,流量锋和消息通讯四个场景。 1.异步处理 场景说明:用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,539
精华内容 4,215
关键字:

解耦异步削峰