RabbitMQ的简介

RabbitMQ相关介绍

消息中间件MQ
MQ全称为MessageQueue,消息队列(MQ)是一种应用程序对应程序的通信方法。其基本结构是一种先进先出的队列
在这里插入图片描述
主要的作用:1.异步处理 2.解耦服务 3.流量削峰
1.异步处理
用户注册后需要发送注册邮件或注册短信,传统的做法是串行的方式和并行的方式。
串行方式:注册信息写入数据库后,发送邮件再发送短信,当三个任务完成后返回给客户端。
在这里插入图片描述
并行方式:将注册信息写入数据库后,发送邮件的同时,发送短信,以上三个任务完成后,返回给客户端,并行的方式能提高处理的时间。
在这里插入图片描述
假设三个业务节点分别使用50ms,串行方式使用时间150ms,并行使用时间100ms。虽然并行已经提高了处理时间,但是,前面说过,邮件和短信对我正常的使用网站没有任何影响,客户端没有必要等着其发送完成才显示注册成功,应该是写入数据库后就返回.
消息队列
引入消息队列后,用户的响应时间等于写入数据库的时间+写入消息队列的时间
在这里插入图片描述
传统模式的缺点:
• 一些非必要的业务逻辑以同步的方式运行,太耗费时间。
中间件模式的的优点:
• 将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度

2.解耦服务
传统的模式系统间的耦合性太强:如下图所示,系统A再代码中直接调用系统B和系统C的代码,如果将来接入D系统,系统A还要修改代码,过于麻烦
在这里插入图片描述
引入中间件模式后,将消息写入消息队列,需要 消息的系统从消息队列中订阅,而此时系统A不需要做任何改动
在这里插入图片描述

3.流量削峰
流量削峰一般在秒杀活动中应用广泛
场景: 秒杀活动,一般会因为流量过大,导致应用挂掉,为了解决这个问题,一般在应用前端加入消息队列。
传统模式
如订单系统,在下单的时候就会往数据库写数据。但是数据库只能支撑每秒1000左右的并发写入,并发量再高就容易宕机。低峰期的时候并发也就100多个,但是在高峰期时候,并发量会突然激增到5000以上,这个时候数据库肯定卡死了。
在这里插入图片描述
传统模式的缺点: 并发量大的时候所有请求直接涌向数据库,造成数据库连接异常
中间件模式 消息被MQ存储起来,然后系统就可以就按照自己的消费能力来消费。
在这里插入图片描述
中间件的优点 系统A慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取队列中的消息,再生产中,允许高峰期的积压
流量削峰(削峰填谷)使用MQ之后,限制消费消息的速度为1000,但这样一来,高峰期产生的数据必定会积压在MQ中。高峰就会被掉了。但是高峰过去后,产生的消息 速度下降,而消费消息的速度变,这个时期消费积压在MQ中下消息叫做填谷

QPS和PV , UV , PR
QPS:每秒查询率,是指一个特定服务器在规定的时间内处理流量的多少
QPS= 并发量/平均响应时间
原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间。
公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS) 。
机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器

PV(page view),即页面浏览量,或点击量;通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。
对pv的解释是,一个访问者在24小时(0点到24点)内到底看了你网站几个页面。这里需要强调:同一个人浏览你网站同一个页面,不重复计算pv量,点100次也算1次。说白了,pv就是一个访问者打开了你的几个页面。
pv的计算:当一个访问者访问的时候,记录他所访问的页面和对应的IP,然后确定这个IP今天访问了这个页面没有。如果你的网站到了23点,单纯IP有60万条的话,每个访问者平均访问了3个页面,那么pv表的记录就要有180万条。

uv(unique visitor),指访问某个站点或点击某条新闻的不同IP地址的人数。
在同一天内,uv只记录第一次进入网站的具有独立IP的访问者,在同一天内再次访问该网站则不计数。独立IP访问者提供了一定时间内不同观众数量的统计指标,而没有反应出网站的全面活动。

PR值,即PageRank,网页的级别技术,用来标识网页的等级/重要性。级别从1到10级,10级为满分。PR值越高说明该网页越受欢迎(越重要)。

AMQP和JMS
AMQP是一种高级消费队列协议(Advance Message Queuing Protocol),即一种binary wire-level protocol(链接协议)。这与JSM有本质的区别,AMPQ不从API层进行限定,而是直接定义网络交换数据的格式
JMS(java消息服务javaMessageService)应用程序接口,一个Java平台中面向消息中间件(MOM)的API,用于两个应用程序之间,或分布式系统中发送消息,进行异步通信。

AMQP和JMS的区别
JMS是定义统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交换格式
JMS限定了必须使用java语言;AMQP只是协议不限定实现方式,是跨语言的
JMS规定了两种消息模式;AMQP的消息模式更加丰富

RabbitMQ的简介

RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。
RabbitMQ官方地址:http://www.rabbitmq.com/
RabbitMQ提供了6种模式:简单模式,work模式,Publish/Subscribe发布与订阅模式,Routing路由模式,Topics主题模式,RPC远程调用模式(远程调用,不太算MQ;暂不作介绍);
官网对应模式介绍:https://www.rabbitmq.com/getstarted.html
在这里插入图片描述

AMQP,即 Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。2006年,AMQP 规范发布。类比HTTP。
2007年,Rabbit 技术公司基于 AMQP 标准开发的 RabbitMQ 1.0 发布。RabbitMQ 采用 Erlang 语言开发。Erlang 语言由 Ericson 设计,专门为开发高并发和分布式系统的一种语言,在电信领域使用广泛。
RabbitMQ 基础架构如下图
在这里插入图片描述
RabbitMQ 中的相关概念

Broker:接收和分发消息的应用,RabbitMQ Server就是 Message Broker

Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个vhost,每个用户在自己的 vhost 创建 exchange/queue 等

Connection:publisher/consumer 和 broker 之间的 TCP 连接

Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的 channel 进行通讯,AMQP method 包含了channel id 帮助客户端和message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销

Exchange:message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到queue 中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)

Queue:存储消息的容器,消息最终被送到这里,等待 consumer 取走

Binding:exchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key。Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值