RabbitMQ原理以及使用场景是什么

技术RabbitMQ原理以及使用场景是什么本篇文章给大家分享的是有关RabbitMQ原理以及使用场景是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一.

本文将与您分享RabbitMQ的原理和使用场景。边肖觉得挺实用的,所以分享给大家学习。希望你看完这篇文章能有所收获。话不多说,我们和边肖一起看看。

一. RabbitMQ 简介

MQ的全称是消息队列,消息队列(MQ)是应用程序之间的一种通信方式。应用程序通过读写队列中的消息(应用程序的数据)进行通信,而不需要专门的连接来链接它们。消息传递是指程序之间通过在消息中发送数据进行通信,而不是直接相互调用。直接调用通常用于远程过程调用等技术。排队是指应用程序通过队列进行通信。队列的使用消除了接收和发送应用程序同时执行的要求。

RabbitMQ是由Erlang语言开发的开源消息队列系统,基于AMQP协议实现。AMQP的主要特点是面向消息、面向队列、路由(包括点对点和发布/订阅)、可靠性和安全性。AMQP协议在企业系统中应用较多,在对数据一致性、稳定性和可靠性要求较高的场景中,性能和吞吐量要求位居第二。

二. RabbitMQ 使用场景

1. 解耦(为面向服务的架构(SOA)提供基本的最终一致性实现)

场景描述:用户下单后,订单系统需要通知库存系统。传统上,订单系统调用库存系统的接口。

RabbitMQ原理以及使用场景是什么

传统模式的缺点:

如果库存系统不可访问,订单库存减少将失败,导致订单失败。

订单系统和库存系统耦合

介绍消息队列

RabbitMQ原理以及使用场景是什么

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

库存系统:订阅订购消息,通过拉/推的方式获取订购信息。库存系统根据订货信息进行库存操作。

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

为了保证库存一定,队列大小可以设置为库存数量,也可以通过其他方式解决。

基于消息的模型关注的是“通知”而不是“处理”。

短信、邮件通知、缓存刷新等操作使用消息队列进行通知。

RabbitMQ原理以及使用场景是什么

消息队列与RPC的区别与比较;

RPC:异步调用,及时获取调用结果,结果一致性强,关心业务调用处理结果。

消息队列:两个异步RPC调用,将调用的内容转储到队列中,并选择正确的传递时间(移峰流控制)

2. 异步提升效率

场景描述:注册后,用户需要发送注册邮件和短信。传统的方法有两种:1。串行;2.并行模式

扩展:

异步工具:在实际项目中使用CompletionService提高系统性能的实践

(1)串行模式:注册信息成功写入数据库后,发送注册邮件,然后发送注册短信。以上三个任务全部完成后,返回客户端。

RabbitMQ原理以及使用场景是什么

(2)并行模式:注册信息成功写入数据库后,发送注册邮件和注册短信。完成以上三个任务后,返回客户端。与串行模式的区别在于并行模式可以提高处理时间。

RabbitMQ原理以及使用场景是什么

消息队列的引入将异步处理不必要的业务逻辑。改革后的架构如下:

6514.png" alt="RabbitMQ原理以及使用场景是什么">

3. 流量削峰

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

应用场景:系统其他时间A系统每秒请求量就100个,系统可以稳定运行。系统每天晚间八点有秒杀活动,每秒并发请求量增至1万条,但是系统最大的处理能力只能每秒处理1000个请求,于是系统崩溃,服务器宕机。

之前架构:大量用户(100万用户)通过浏览器在晚上八点高峰期同时参与秒杀活动。大量的请求涌入我们的系统中,高峰期达到每秒钟5000个请求,大量的请求打到MySQL上,每秒钟预计执行3000条SQL。但是一般的MySQL每秒钟扛住2000个请求就不错了,如果达到3000个请求的话可能MySQL直接就瘫痪了,从而系统无法被使用。但是高峰期过了之后,就成了低峰期,可能也就1万用户访问系统,每秒的请求数量也就50个左右,整个系统几乎没有任何压力。

引入MQ:100万用户在高峰期的时候,每秒请求有5000个请求左右,将这5000请求写入MQ里面,系统A每秒最多只能处理2000请求,因为MySQL每秒只能处理2000个请求。系统A从MQ中慢慢拉取请求,每秒就拉取2000个请求,不要超过自己每秒能处理的请求数量即可。MQ,每秒5000个请求进来,结果只有2000个请求出去,所以在秒杀期间(将近一小时)可能会有几十万或者几百万的请求积压在MQ中。

关于流量削峰:秒杀系统流量削峰这事儿应该怎么做?

这个短暂的高峰期积压是没问题的,因为高峰期过了之后,每秒就只有50个请求进入MQ了,但是系统还是按照每秒2000个请求的速度在处理,所以说,只要高峰期一过,系统就会快速将积压的消息消费掉。我们在此计算一下,每秒在MQ积压3000条消息,1分钟会积压18万,1小时积压1000万条消息,高峰期过后,1个多小时就可以将积压的1000万消息消费掉。

RabbitMQ原理以及使用场景是什么

三. 引入消息队列的优缺点

优点

优点就是以上的那些场景应用,就是在特殊场景下有其对应的好处,解耦、异步、削峰。

缺点

  •  系统的可用性降低

系统引入的外部依赖越多,系统越容易挂掉,本来只是A系统调用BCD三个系统接口就好,ABCD四个系统不报错整个系统会正常运行。引入了MQ之后,虽然ABCD系统没出错,但MQ挂了以后,整个系统也会崩溃。

  •  系统的复杂性提高

引入了MQ之后,需要考虑的问题也变得多了,如何保证消息没有重复消费?如何保证消息不丢失?怎么保证消息传递的顺序?

  • 一致性问题

A系统发送完消息直接返回成功,但是BCD系统之中若有系统写库失败,则会产生数据不一致的问题。

消息队列是一种十分复杂的架构,引入它有很多好处,但是也得针对它带来的坏处做各种额外的技术方案和架构来规避。引入MQ系统复杂度提升了一个数量级,但是在有些场景下,就是复杂十倍百倍,还是需要使用MQ。

以上就是RabbitMQ原理以及使用场景是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/112493.html

(0)

相关推荐

  • OGG ora-01403错误怎么处理

    技术OGG ora-01403错误怎么处理这篇文章给大家分享的是有关OGG ora-01403错误怎么处理的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。OGG运维中有一个经典错误-1403

    攻略 2021年11月17日
  • 抽象工厂

    技术抽象工厂 抽象工厂抽象工厂(Abstract Factory)
    Intent
    提供一个接口,用于创建相关的对象家族
    Class Diagram
    抽象工厂模式创建的是对象家族,也就是很多对象而不是一个

    礼包 2021年11月10日
  • javascript内存泄漏有哪些原因

    技术javascript内存泄漏有哪些原因本篇内容介绍了“javascript内存泄漏有哪些原因”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔

    攻略 2021年11月20日
  • 门里一个吕念什么,门里一个外字 怎么打出来

    技术门里一个吕念什么,门里一个外字 怎么打出来把那个字造出来链接上就可以 造字程序详解
    在文字录入工作中,我们经常会碰到有些方言、土语、人名、地名等生僻字或符号无法录入的问题,给工作带来了很多不便,不过没关系,Wi

    生活 2021年10月22日
  • Maven简介与Maven相关概念

    技术Maven简介与Maven相关概念 Maven简介与Maven相关概念目录Maven第一部分 Maven简介1 项目开发中的问题2 Maven概述Maven定义Maven的作用第二部分 Maven相

    礼包 2021年11月27日
  • k8s上的火花与k8s操作器上的火花的对比是怎样的

    技术spark on k8s与spark on k8s operator的对比是怎样的这期内容当中小编将会给大家带来有关spark on k8s与spark on k8s operator的对比是怎样的,文章内容丰富且以

    攻略 2021年12月15日