网站没有管理员权限设置,传奇高端网站设计制作,wordpress logo.svg,自己开公司 自己做网站吗前面集中谈了分布式缓存Redis系列#xff1a; 高并发架构系列#xff1a;分布式锁的由来、特点、及Redis分布式锁的实现详解 高并发架构系列#xff1a;Redis并发竞争key的解决方案详解 高并发架构系列#xff1a;Redis缓存和MySQL数据一致性方案详解 Redis的高可用详解… 前面集中谈了分布式缓存Redis系列 高并发架构系列分布式锁的由来、特点、及Redis分布式锁的实现详解 高并发架构系列Redis并发竞争key的解决方案详解 高并发架构系列Redis缓存和MySQL数据一致性方案详解 Redis的高可用详解Redis哨兵、复制、集群的设计原理以及区别 高并发架构系列Redis为什么是单线程、及高并发快的3大原因详解 如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题 今天我们开始分布式之消息队列之旅。 什么是消息队列 消息队列Message Queue简称MQ指保存消息的一个容器本质是个队列。 消息Message是指在应用之间传送的数据消息可以非常简单比如只包含文本字符串也可以更复杂可能包含嵌入对象。 消息队列Message Queue是一种应用间的通信方式消息发送后可以立即返回有消息系统来确保信息的可靠专递消息发布者只管把消息发布到MQ中而不管谁来取消息使用者只管从MQ中取消息而不管谁发布的这样发布者和使用者都不用知道对方的存在。 Producer消息生产者负责产生和发送消息到 Broker Broker消息处理中心。负责消息存储、确认、重试等一般其中会包含多个 queue Consumer消息消费者负责从 Broker 中获取消息并进行相应处理 现在常用的MQ组件有ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ,当然近年来火热的Kafka,从某些场景来说也是MQ当然kafka的功能更加强大。 虽然不同的MQ都有自己的特点和优势但是不管是哪种MQ都有MQ本身自带的一些特点下面咱们谈谈消息队列的的特点、优势、选型、以及应用场景。 为什么需要消息队列 在高并发分布式环境下由于来不及同步处理通过使用消息队列可以异步处理请求从而缓解系统的压力。 举一个订单系统的例子用户点击下订单会触发以下业务逻辑流程 扣减库存 生成相应的订单 发短信通知等等 在业务发展初期这些逻辑可能放在一起同步执行随着业务订单量增长需要提升系统服务的性能这时候可以将一些不需要立即生效的操作拆分出来异步执行比如发短信通知等这种场景就可以使用消息队列MQ。 本质还是通过异步来解决同步的系统压力所以我们在做架构设计的时候有一个原则能异步的就尽量不要同步。 消息队列的优点 1、屏蔽异构平台的细节发送方、接收方系统之间不需要了解双方只需认识消息。 2、异步消息堆积能力发送方接收方不需同时在线发送方接收方不需同时扩容削峰。 3、解耦防止引入过多的API给系统的稳定性带来风险调用方使用不当会给被调用方系统造成压力被调用方处理不当会降低调用方系统的响应能力。 4、复用一次发送多次消费。 5、可靠一次保证消息的传递。如果发送消息时接收者不可用消息队列会保留消息直到成功地传递它。 6、提供路由发送者无需与接收者建立连接双方通过消息队列保证消息能够从发送者路由到接收者甚至对于本来网络不易互通的两个服务也可以提供消息路由。 消息队列的特点 1.异步性 将耗时的同步操作通过以发送消息的方式进行了异步化处理。减少了同步等待的时间。 2.松耦合 消息队列减少了服务之间的耦合性不同的服务可以通过消息队列进行通信而不用关心彼此的实现细节只要定义好消息的格式就行。 3.分布式 通过对消费者的横向扩展降低了消息队列阻塞的风险以及单个消费者产生单点故障的可能性当然消息队列本身也可以做成分布式集群。 4.可靠性 消息队列一般会把接收到的消息存储到本地硬盘上当消息被处理完之后存储信息根据不同的消息队列实现有可能将其删除这样即使应用挂掉或者消息队列本身挂掉消息也能够重新加载。 消息队列的选型 1.ActiveMQ Apache出品最早使用的消息队列产品时间比较长了最近版本更新比较缓慢。 2.RabbitMQ RabbitMQ是erlang语言开发结合erlang语言本身的并发优势支持很多的协议AMQPXMPP, SMTP, STOMP也正是如此使的它变的非常重量级更适合于企业级的开发。性能较好但是不利于做二次开发和维护。 3.RocketMQ 阿里开源的消息中间件纯Java开发具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。 4.ZeroMQ 号称最快的消息队列系统尤其针对大吞吐量的需求场景。 扩展性好开发比较灵活采用C语言实现实际上只是一个socket库的重新封装如果做为消息队列使用需要开发大量的代码。 5.Kafka Kafka是Apache下的一个子项目是一个高性能跨语言分布式发布/订阅消息队列系统而Jafka是在Kafka之上孵化而来的即Kafka的一个升级版。 6.消息队列的详细比较 7.消息队列总结 消息队列的选型需要根据具体应用需求而定ZeroMQ小而美RabbitMQ大而稳Kakfa和RocketMQ快而强劲。 消息队列的应用场景 1.异步处理 消息队列的主要特点是异步处理主要目的是减少请求响应时间实现非核心流程异步化提高系统响应性能。 所以典型的使用场景就是将比较耗时而且不需要即时同步返回结果的操作作为消息放入消息队列。 2.应用解耦 使用了消息队列后只要保证消息格式不变消息的发送方和接收方并不需要彼此联系也不需要受对方的影响即解耦。 每个成员不必受其他成员影响可以更独立自主只通过消息队列MQ来联系。 举一个例子用户下订单流程下订单后会发生扣库存这个动作上游系统订单和下游系统扣库存就可以通过上图的消息队列MQ来联系扣库存异步化从而实现订单系统与库存系统的应用解耦。 3.流量削锋 流量削锋也是消息队列中的常用场景一般在秒杀或团抢活动中使用广泛。 应用场景秒杀活动一般会因为流量过大导致流量暴增应用挂掉。为解决这个问题一般需要在应用前端加入消息队列。 具体可以参考阿里P8架构师谈双11秒杀系统如何设计 4日志处理 日志处理是指将消息队列用在日志处理中比如Kafka的应用解决大量日志传输的问题。 5消息通讯 消息队列一般都内置了高效的通信机制因此也可以用于单纯的消息通讯比如实现点对点消息队列或者聊天室等。 你可能也喜欢: 消息中间件系列(九)详解RocketMQ的架构设计、关键特性、与应用场景消息中间件系列三主流的消息队列中间件有哪些 消息中间件系列一消息中间件介绍、典型使用场景、以及使用原则 消息中间件系列(二)Kafka的原理、基础架构、以及使用场景消息中间件系列(五)MQ消息队列的12点核心原理总结消息中间件系列六什么是流量削峰如何解决秒杀业务的削峰场景