国外摄影网站,武昌做网站报价,宁慈建设网站,淮安网站建设价位目录 1 消息队列MQ1.1 MQ简介1、什么是MQ2、MQ的优势流量削峰应用解耦异常处理数据分发分布式事务 3、消息中间件的弊端4、常用的MQ 1.2 MQ中几个基本概念1.3 MQ的通信模式1.4 消息的发布策略1.5 常用消息中间件协议1、AMQP协议2、MQTT协议3、OpenMessage协议4、kafaka协议 1 消… 目录 1 消息队列MQ1.1 MQ简介1、什么是MQ2、MQ的优势流量削峰应用解耦异常处理数据分发分布式事务 3、消息中间件的弊端4、常用的MQ 1.2 MQ中几个基本概念1.3 MQ的通信模式1.4 消息的发布策略1.5 常用消息中间件协议1、AMQP协议2、MQTT协议3、OpenMessage协议4、kafaka协议 1 消息队列MQ
1.1 MQ简介
1、什么是MQ
MQ全称是Message Queue直译过来叫做消息队列。MQ本质上是一个队列遵循先进先出的原则而队列存放内容为message主要是作为分布式应用之间实现异步通信的方式。是一种跨进程的通信机制用于上下游传递消息。
它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能成为异步RPC的主要手段之一。现在主流的消息队列有ActiveMQ、RabbitMQKafkaRocketMQ等。
2、MQ的优势
流量削峰
流量消峰当流量超过处理上限时正常情况下超过上限的流量不做处理。而MQ可以把多出来的一部分流量放入消息队列做缓冲。
举个例子假设某订单系统每秒最多能处理一万次订单也就是最多承受的10000qps正常情况下下单一秒后就能返回结果。但是在高峰期如果有两万次下单操作系统是处理不了的只能限制订单超过一万后不允许用户下单。如果使用消息队列做缓冲则可以取消这个限制把一秒内下的订单分散成一段时间来处理这时有些用户还可以下单但是可能会在十几秒后才能收到下单成功的操作返回结果会有一段时间的延迟但是仍可以进行下单操作。
应用解耦
以电商应用为例应用中有订单系统、库存系统、物流系统、支付系统。
耦合用户创建订单后如果耦合调用库存系统、物流系统、支付系统任何一个子系统出了故障都会造成下单操作异常。
加入MQ后当转变成基于消息队列的方式后系统间调用的问题会减少很多比如物流系统因为发生故障需要几分钟来修复。在这几分钟的时间里物流系统要处理的内存被缓存在消息队列中用户的下单操作可以正常完成。当物流系统恢复后继续处理订单信息即可中单用户感受不到物流系统的故障提升系统的可用性。
异常处理
有些服务间调用是异步的例如 A 调用 BB 需要花费很长时间执行但是 A 需要知道 B 什么时候可以执行完以前一般有两种方式1A 过一段时间去调用 B 的查询 api 查询2A 提供一个 callback api B 执行完之后调用 api 通知 A 服务。
以上两种方式都不是很优雅使用消息队列可以很方便解决这个问题A 调用 B 服务后只需要监听 B 处理完成的消息当 B 处理完成后会发送一条消息给 MQMQ 会将此消息转发给 A 服务。这样 A 服务既不用循环调用 B 的查询 api也不用提供 callback api。同样B 服务也不用做这些操作A 服务还能及时的得到异步处理成功的消息。
数据分发
MQ支持发布订阅机制。支持上下游的一对一、一对多、或者广播模式并且都可以根据规则选择分发的对象。这样一份上游数据众多下游系统中可以根据规则来选择是否接收这些数据。
分布式事务
事务 Transaction是一种特殊的执行程序一般具有四个特性
a原子性要么成功要么失败c一致性宏观视角下的全局视角一致性i隔离性并发事务互不相干d持久性事务提交后变更永久生效
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。例如在大型电商系统中下单接口通常会扣减库存、减去优惠、生成订单 id, 而订单服务与库存、优惠、订单 id 都是不同的服务下单接口的成功与否不仅取决于本地的 db 操作而且依赖第三方系统的结果这时候分布式事务就保证这些操作要么全部成功要么全部失败。本质上来说分布式事务就是为了保证不同数据库的数据一致性。 例如一个用户下单的整个流程MQ在这其中保证的作用
生产者的逻辑
1、订单入库2、消息记录入库3、发送消息采用确认模式4、mq收到消息之后给生产端一个确认消息5、生产端监听这个确认消息6、根据监听结果操作消息表的状态7、定时任务定时去操作消息状态为1未发送的记录就是那些没有监听到结果的记录进行重新发送
消费者的逻辑
1、将收到消息的消息入库2、处理消息失败消息记录的状态就为未处理3、处理消息成功修改消息记录的状态为处理成功4、收到相同的消息id的消息直接丢弃5、定时任务去操作那些未处理并且已经经过一段时间的消息6、针对那些一直处理失败的且很长一段时间都没办法处理成功的消息交由人工或者其他途径处理
3、消息中间件的弊端
消息中间件带来诸多好处的同时也会引入很多的弊端
系统可用性降低系统可用性在某种程度上降低比如要考虑消息丢失、消息中间件宕机等问题。系统复杂性提高引入消息中间件之后业务需要考虑消息被重复消费、消息丢失、消息传递顺序等问题。一致性问题消息队列的异步机制确实可以提高系统响应速度但消费者没有正确消费可能会引入一致性问题。
4、常用的MQ
ActiveMQ 优点单机吞吐量万级时效性 ms 级可用性高基于主从架构实现高可用性缺点官方社区现在对 ActiveMQ 5.x 维护越来越少高吞吐量场景较少使用 Kafaka 简单描述主要应用在大数据领域有百万级 TPS 的吞吐量在数据采集、传输、存储的过程中发挥着举足轻重的作用。目前已经被 LinkedInUber, Twitter, Netflix 等大公司所采纳优点 性能优越吞吐量高单机写入 TPS 约在百万条/秒时效性 ms 级可用性非常高分布式一个数据多个副本少数机器宕机不会丢失数据导致服务不可用有Web管理界面日志收集功能成熟在大数据领域的日志采集中被大规模使用 缺点 Kafka 单机超过 64 个队列/分区Load 会发生明显的飙高现象发送消息相应时间变长消费失败不支持重试支持消息顺序一旦有一旦宕机会造成消息乱序社区更新较慢 使用场景Kafka 主要特点是基于Pull 的模式来处理消息消费追求高吞吐量适合日志收集和传输。适合产生大量数据的互联网服务的数据收集业务大型公司建议可以选用如果需要日志采集功能首选 kafka 。 RocketMQ 简单描述RocketMQ是阿里的开源产品使用Java语言实现被阿里巴巴广泛应用在订单交易充值流计算消息推送日志流式处理binglog 分发等场景。优点 单机吞吐量十万级,可用性非常高分布式架构扩展性好消息可以做到 0 丢失支持 10 亿级别的消息堆积不会因为堆积导致性能下降MQ功能完善同时由于的Java开源的所以可以根据自己公司需求进行定制 缺点 客户端语言只支持Java和C但是C不成熟社区活跃度一般迁移系统时需要修改大量代码使用场景多用于金融互联网等对可靠性要求很高的场景尤其是电商里面的订单扣款以及业务削峰在大量交易涌入时后端可能无法及时处理的情况。 RabbitMQ 简单描述2007 年发布是一个在 AMQP(高级消息队列协议)基础上完成的可复用的企业消息系统是当前最主流的消息中间件之一优点 由于 erlang 语言的高并发特性性能较好吞吐量到万级健壮、稳定、易用、跨平台、支持多种语言 如Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等支持 AJAX 文档齐全社区活跃度高更新频率高 缺点商业版需要收费学习成本高使用场景性能好时效性微秒级社区活跃度也比较高管理界面用起来十分方便如果数据量量不大中小型公司优先选择功能比较完备的 RabbitMQ
1.2 MQ中几个基本概念
队理管理器queue mr是MQ系统当中最上层的一个管理器由它为我们提供基于队列的消息服务
消息messages在MQ中把应用程序交由MQ传输的数据某个应用向应用程序发出的请求处理等都可以称做消息。消息又包括两部分
消息描述符message header,消息头如 消息的优先级生命周期消息ID消息体message body,就是用户的数据部份又为分永久性的和非永久性消息
队列queue存放消息的地方队列中的消息直到被应用程序消费之后再结束消息的生命周期。队列又可分为多种类型
本地队列 普通本地队列应用程序通过API对其进行读写操作的队列传输队列又叫存储转发队列。比如当某个消息交给MQ系统发送到远程主机而此时网络发生故障MQ将把消息放在传输队列中暂存当网络恢复时再发往远端目的地 远程队列目的队列在本地的定义它类似一个地址指针指向远程主机上的某个目的队列注意不真正占用磁盘存储空间模板队列是一个模板当实际需要新增队列时打开一个模板队列MQ就会自动生成一个动态队列动态队列可以指定该动态队列为临时队列或者是永久队列临时队列可以在关闭的同时进行删除而永久队列则可以永久保留别名队列。。。
通道MQ系统中队列管理器之间传递消息的管道
1.3 MQ的通信模式
MQ可以在内存或者磁盘上队列中存储消息直到被应用程序读取。应用程序可以通过MQ独立的执行不需要彼此之间有其他联系也不需要等待接收程序接收此消息。在分布式计算环境中为了集成分布式应用开发者需要对异构网络环境下的分布式应用提供有效的通信手段。为了管理需要共享的信息对应用提供公共的信息交换机制是重要的。常见的有以下几种
点对点 - 点对点方式是最为传统和常见的通讯方式它支持一对一、一对多、多对多、多对一等多种配置方式支持树状、网状等多种拓扑结构。多点广播 - 多点广播可以使用一条 MQ 指令将单一消息发送到多个目标站点并确保为每一站点可靠地提供信息。发布/订阅 (Publish/Subscribe) - 该模式是将消息按照特定的主题甚至内容进行分发用户或应用程序可以根据主题或内容接收到所需要的消息。 特点该模式突破目的队列地理位置的限制。可以让发送者不必关心接收者的目的地址而接收者也不必关心消息的发送地址而只是根据消息的主题进行消息的收发。 集群 (Cluster) - 集群类似于一个域 (Domain)集群内部的队列管理器之间通讯时不需要两两之间建立消息通道而是采用集群 (Cluster) 通道与其它成员通讯。 特点简化了系统配置。同时集群中的队列管理器之间能够自动进行负载均衡
1.4 消息的发布策略
之前了解到MQ是一种常用的异步通信机制。它可以帮助系统的不同组件在无需直接相互通信的情况下实现数据的传输和处理。消息队列的核心概念之一是消息分发策略Message Dispatching Strategy它决定了在发送方发送消息到消息队列后消息如何被接收方从队列中取出并处理。 消息分发策略是指消息在队列中如何被分配给接收方的规则。常见的消息分发策略有以下几种
先来先服务First-Come, First-ServedFCFS按照消息到达队列的顺序进行分发先到者先出。最短作业优先Shortest Job FirstSJF优先分发队列中处理时间最短的消息。优先级调度Priority Scheduling根据消息的优先级进行分发优先级高的消息先被处理。轮询调度Round Robin按照顺序轮流分发队列中的消息。随机分发Random Scheduling随机选择队列中的消息进行分发。
1.5 常用消息中间件协议
1、AMQP协议
AMQP协议Advanced Message Queuing Protocol—高级消息队列协议一个提供统一消息服务的应用层标准高级消息队列协议是应用层协议的一个开放标准为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息并不受客户端/中间件不同产品不同开发语言等条件的限制。 特点分布式事务支持、消息的持久化支持、高性能和高可靠的消息处理优势 应用RabbitMQ、ActiveMQ
2、MQTT协议
MQTTMessage Queuing Telemetry Transport消息队列遥测传输协议是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议该协议构建于TCP/IP协议上由IBM在1999年发布。 特点以极少的代码和有限的带宽为连接远程设备提供实时可靠的消息服务轻量、结构简单、传输快、不支持事务、没有持久化设计 应用在物联网、小型设备、移动应用等方面有较广泛的应用RabbitMQ通过插件可以支持该协议
3、OpenMessage协议
OpenMessage协议是由阿里、雅虎和滴滴出行、 Stremalio等公司共同参与创立的分布式消息中间件、流处理等领域的应用开发标准。 特点结构简单解析速度快支持事务和持久化设计
4、kafaka协议
Kafaka协议基于TCP/IP的二进制协议。消息内部是通过长度来分割由些基本数据类型组成。 特点结构简单、解析速度快、无事务支持、有持久化设计 文章转载自: http://www.morning.tsnmt.cn.gov.cn.tsnmt.cn http://www.morning.qrwjb.cn.gov.cn.qrwjb.cn http://www.morning.ptmsk.cn.gov.cn.ptmsk.cn http://www.morning.qlwfz.cn.gov.cn.qlwfz.cn http://www.morning.bmmhs.cn.gov.cn.bmmhs.cn http://www.morning.fmrd.cn.gov.cn.fmrd.cn http://www.morning.yggdq.cn.gov.cn.yggdq.cn http://www.morning.ggcjf.cn.gov.cn.ggcjf.cn http://www.morning.sqmlw.cn.gov.cn.sqmlw.cn http://www.morning.trtxt.cn.gov.cn.trtxt.cn http://www.morning.spftz.cn.gov.cn.spftz.cn http://www.morning.mmjyk.cn.gov.cn.mmjyk.cn http://www.morning.ywtbk.cn.gov.cn.ywtbk.cn http://www.morning.plnry.cn.gov.cn.plnry.cn http://www.morning.xtrzh.cn.gov.cn.xtrzh.cn http://www.morning.nlglm.cn.gov.cn.nlglm.cn http://www.morning.trsdm.cn.gov.cn.trsdm.cn http://www.morning.prgyd.cn.gov.cn.prgyd.cn http://www.morning.kcyxs.cn.gov.cn.kcyxs.cn http://www.morning.jwxnr.cn.gov.cn.jwxnr.cn http://www.morning.xqltq.cn.gov.cn.xqltq.cn http://www.morning.qxlxs.cn.gov.cn.qxlxs.cn http://www.morning.krtcjc.cn.gov.cn.krtcjc.cn http://www.morning.mslsn.cn.gov.cn.mslsn.cn http://www.morning.hslgq.cn.gov.cn.hslgq.cn http://www.morning.nnhfz.cn.gov.cn.nnhfz.cn http://www.morning.ksgjn.cn.gov.cn.ksgjn.cn http://www.morning.mgmqf.cn.gov.cn.mgmqf.cn http://www.morning.tqrbl.cn.gov.cn.tqrbl.cn http://www.morning.wxgd.cn.gov.cn.wxgd.cn http://www.morning.trbxt.cn.gov.cn.trbxt.cn http://www.morning.fqzz3.cn.gov.cn.fqzz3.cn http://www.morning.sqnrz.cn.gov.cn.sqnrz.cn http://www.morning.xrlwr.cn.gov.cn.xrlwr.cn http://www.morning.qwqzk.cn.gov.cn.qwqzk.cn http://www.morning.bwznl.cn.gov.cn.bwznl.cn http://www.morning.zzjpy.cn.gov.cn.zzjpy.cn http://www.morning.bmqls.cn.gov.cn.bmqls.cn http://www.morning.xfxqj.cn.gov.cn.xfxqj.cn http://www.morning.rnqyy.cn.gov.cn.rnqyy.cn http://www.morning.rcjwl.cn.gov.cn.rcjwl.cn http://www.morning.xkyst.cn.gov.cn.xkyst.cn http://www.morning.xmtzk.cn.gov.cn.xmtzk.cn http://www.morning.paxkhqq.cn.gov.cn.paxkhqq.cn http://www.morning.mqwnp.cn.gov.cn.mqwnp.cn http://www.morning.yrsg.cn.gov.cn.yrsg.cn http://www.morning.kbyp.cn.gov.cn.kbyp.cn http://www.morning.wyrkp.cn.gov.cn.wyrkp.cn http://www.morning.snbrs.cn.gov.cn.snbrs.cn http://www.morning.wdlg.cn.gov.cn.wdlg.cn http://www.morning.gqhgl.cn.gov.cn.gqhgl.cn http://www.morning.btnmj.cn.gov.cn.btnmj.cn http://www.morning.fwjfh.cn.gov.cn.fwjfh.cn http://www.morning.rjnrf.cn.gov.cn.rjnrf.cn http://www.morning.bplqh.cn.gov.cn.bplqh.cn http://www.morning.rpzqk.cn.gov.cn.rpzqk.cn http://www.morning.ryjqh.cn.gov.cn.ryjqh.cn http://www.morning.pwfwk.cn.gov.cn.pwfwk.cn http://www.morning.lcxzg.cn.gov.cn.lcxzg.cn http://www.morning.wdpt.cn.gov.cn.wdpt.cn http://www.morning.rykgh.cn.gov.cn.rykgh.cn http://www.morning.pwxkn.cn.gov.cn.pwxkn.cn http://www.morning.lthpr.cn.gov.cn.lthpr.cn http://www.morning.wncb.cn.gov.cn.wncb.cn http://www.morning.jkdtz.cn.gov.cn.jkdtz.cn http://www.morning.jjwt.cn.gov.cn.jjwt.cn http://www.morning.yongkangyiyuan-pfk.com.gov.cn.yongkangyiyuan-pfk.com http://www.morning.lfpzs.cn.gov.cn.lfpzs.cn http://www.morning.mzskr.cn.gov.cn.mzskr.cn http://www.morning.jwdys.cn.gov.cn.jwdys.cn http://www.morning.qclmz.cn.gov.cn.qclmz.cn http://www.morning.gmysq.cn.gov.cn.gmysq.cn http://www.morning.fkwp.cn.gov.cn.fkwp.cn http://www.morning.hqbnx.cn.gov.cn.hqbnx.cn http://www.morning.gnwpg.cn.gov.cn.gnwpg.cn http://www.morning.gl-group.cn.gov.cn.gl-group.cn http://www.morning.dyxzn.cn.gov.cn.dyxzn.cn http://www.morning.rnmmh.cn.gov.cn.rnmmh.cn http://www.morning.w58hje.cn.gov.cn.w58hje.cn http://www.morning.ttshf.cn.gov.cn.ttshf.cn