消息队列是使用场景:异步解耦 削峰填谷

什么是消息队列?(类比古代皇帝处理事务,设内阁,分级处理)

阿里云消息服务MNS (Message Service)是一款简单、高效、可靠、安全、便捷、可弹性扩展的分布式消息通知服务。MNS能够帮助应用开发者在他们应用的分布式组件上自由的传递数据、通知消息,构建松耦合系统。

消息队列模型

1.队列模型(QUEUE):提供高可靠、高并发的一对一消费模型,及队列中的每一条消息都只能被一个消费者消费

消息队列训练营总结_松耦合


2.主题模型(Topic):提供一对多的订阅模型,支持消息通知

消息队列训练营总结_松耦合_02


什么是消息队列MNS

阿里云消息队列MNS,定位轻量RocketMQ,提供轻量模型、清凉HTTP RESTful协议,运维轻量、计费轻量,具备易集成等特点

消息队列训练营总结_松耦合_03


与自建队列相比,MNS具备1+2+3+N的特性,即一轻、二谈、三可靠的特点,自建队列依赖内存

消息队列训练营总结_数据_04


小知识消息队列MNS同样支持订阅发布模型

推送模式的好处是即时性能较好,但需暴露客户端地址来接收服务端的消息推送。有些情况下有的信息,例如企业内网,无法暴露推送地址,希望改用拉取(Pull)的方式。虽然消息服务MNS不直接提供这种消费模型,但可以结合主题和队列来实现一对多的拉取消息消费模型。

解决方案

通过创建订阅,让主题将消息先推送到队列,然后由消费者从队列拉取消息。这样既可以做到一对多的广播消息,又可避免暴露消费者的地址。

特性总结:

轻量队列

首先第一个特性是轻量队列,MNS定位是RocketMQ轻量版(Message Service,MNS),提供更简单,轻量的消息队列,聚焦消息领域核心能力构建。MNS提供轻量Queue/Topic资源模型,简单易用无复杂模型概念;同时提供轻量HTTPRESTful接口,原生支持 HTTP协议对平台无依赖;此外,支持多种语言SDK,C++、Java、C#、Python、PHP、golang(第三方)、Node.js(第三方)

Serverless

第二个特性是支持Serverless 弹性,MNS是标准的Serverless 化产品,可处理近乎无限的并发请求,无需感知或预先配置任何集群信息,拆箱即用;同时采用后付费计费方式,无需预留任何实例资源,只为实际使用量付费。

安全稳定

第三个特性是安全稳定,

1)首先稳定性方面数据三重备份,可靠性达十个9 ( 99.99999999%) ;

2)其次服务可用性高达99.95%;可以做到始终可写(Always Writable) ;

3)同时提供多层次安全防护和防DDoS攻击;

4)此外,可以做到多用户隔离机制,每个用户独立命名空间;全面支持 RAM:主子账号,临时AK;支持 HTTPS,VPC访问等,全方位的保障安全和稳定。

高级特性支持

第四个特性是支持高级特性,可自定义消息延迟,定时消息,消息体大小,消息生命周期,标签过滤,重试即死信等高级特性。提供健全的消息产品方案帮助开发者在应用的分布式组件之间自由地传递数据、通知消息,从而构建松耦合系统。这部分的最佳实践会在下一讲中为大家着重展开。超大信息传输

消息服务MNS的队列的消息大小最大限制是64 KB,这个限制基本能够满足在正常情况下消息作为控制流信息交换通道的需求。但是,在某些特殊场景下,消息数据比较大时,就只能采用消息切片的方式。

下面是不做消息切片,通过OSS来实现传递大于64KB的消息的解决方案。

解决方案

生产者在向消息服务MNS发送消息前,如果发现消息体大于64 KB,则先将消息体数据上传到OSS。

生产者把数据对应的Object信息发送到消息服务MNS。

消费者从消息服务MNS队列里读取消息,判断消息内容是否为Oss的Object信息。

判断消息内容是OSS的Object信息。则从OSS下载对应的Object内容,并作为消息体返回给上层程序。

消息队列训练营总结_消息队列_05


事务消息

一些业务场景需要保证本地操作和消息发送的事务一致性,即消息发送成功,本地操作成功。如果消息发送成功,本地操作失败,那么发送成功的消息需要回滚。操作流程如图所示。解决方案

消息发送成功,事务操作成功时操作步骤如下所示:

1.生产者发送一条事务准备消息到事务消息队列。

2.生产者发送操作日志消息到操作日志队列,日志中包含步骤1消息的消息句柄。

3.生产者执行本地事务操作成功。

4.生产者请求修改消息延迟时间,使消息对消费者可见。

5.生产者向操作日志队列确认操作日志,删除日志消息。

6.消费者从事务消息队列中接收事务消息。

7.消费者处理事务消息。

8.消费者请求删除事务消息。

消息队列训练营总结_消息队列_06

应用场景
一、交易信息解耦
交易系统是电商最核心的系统,为了保证主站业务的连续性,必须采用分布式的架构设计,对各个系统间进行解耦
核心价值:
高可用松耦合架构设计
通过上、下游业务系统的松耦合设计,即便下游子系统〔如物流、积分等)出现不可用甚至宕机,都不会影响到核心交易系统的正常运转。
灵活适应业务的快速增长
应业务要求新增业务系统时,不会影响基础的技术架构改动,也不会影响其他系统间的正常运转。

二、大容量场景削峰填谷
在满足业务特殊时期,放纸系统超负荷甚至崩溃,或请求大量失败影响用户体验。
核心价值:
超高流量脉冲处理能力
MNS超高性能的消息处理能力可以承接流量脉冲而不被击垮,在确保系统可用性同时,因快速有效的请求响应而提升用户的体验。
海量消息堆积能力
确保下游业务在安全水位内平滑稳定的运行,避免超高流量的冲击。
合理的成本控制
通过削弱填谷可控制下游业务系统的集群规模,从而降低投入成本。

三、用户信息注册
表单注册等系统同步转异步,实现异步通知;用户注册成功后,需要发送注册成功邮件、新用户积分、优惠券等,加入MNS,可以提升主流程用户注册流程的响应速度,而发送通知等非主流程或非重要任务可以异步集中处理,同时还可以将任务聚合然后批量处理。
核心价值
减少请求、提升效率和系统井行能力,提高系统吞吐量
MNS通知功能,可以在后端服务处理完成任务时,回调通知用户。进而减少用户、web前端和后端服务之间大量不必要的轮询请求。
设计运营通知
消息推送通知是运营方法中使用频率较高的一种。它可以在某个时间节点提醒用户进行某项操作,比如上新活动推送、有趣新闻内容提醒、或派送优惠券通知等,增强用户黏性。

Markdown 已选中 3117 字数 81 行数 当前行 81, 当前列 78

HTML 2513 字数 70 段落