作者: 周新宇&陈涛&李凯

阿里云 RocketMQ 轻量版(MNS)音讯行列是一个轻量、牢靠、可扩展且彻底保管的分布式音讯行列服务。MNS 能够协助运用开发者在他们运用的分布式组件上更轻量的传递数据、告诉音讯,构建松耦合体系。无需办理开支,并且模型简略,拆箱即用,自动横向扩容,无需办理分区等杂乱的逻辑运维,是一款 Serverless 音讯行列产品。

厚积薄发--一文带您了解阿里云 RocketMQ 轻量版消息队列(MNS)

MNS 重点聚集在基准音讯行列的中心才能建造,MNS 经过多年迭代与打磨,尽管内部极为杂乱,但一向尽力坚持其在客户端的简略易用,环绕轻量和集成两个命题,着力建造更易用的音讯行列产品。

中心优势

MNS 环绕轻量音讯行列,供给一系列的轻量级才能。为企业和开发者下降音讯产品的杂乱度,削减运维开支,供给更易上手的音讯行列服务。

轻量模型

MNS 供给 1:1 和 1:N 两种轻量模型,可依据场景自行选择需求的模型方法,学习成本低,上手快。无需理解杂乱的概念模型,无需故意学习,几分钟即可快速上手。

MNS 模型轻量主要体现在资源的操作方面,创立和删去等都装备有极简的 API,一起与数据链路的 API 属于同一个 SDK,便利用户像收发音讯那样进行资源的创立。相反,很多云产品资源的 API 都选用了新的管控 SDK,运用门槛较高。

此外,MNS 的模型和资源是一一对应的,比如运用行列模型仅需求创立一个 Queue,十分易于上手和运用,而其他一些同类型产品,关于同一个模型会有实例、主题、行列、分区等多个资源。

轻量协议

选用 HTTP RESTful 规范协议,接入便利,跨网络才能强,天然具有支撑多言语拜访的才能。官方 SDK 掩盖各大干流言语,包括 C++,C#,.Net,Python,PHP 和 Java,社区奉献也有用 Go,Node 等 。

一起拜访协议简略通用,即使不想依靠云产品供给 SDK ,也能够很简略经过简略的编码来拜访 API,接入成本低,开发功率高。

轻量计费

厚积薄发--一文带您了解阿里云 RocketMQ 轻量版消息队列(MNS)

MNS 是 Serverless 轻量计费,相较于依照实例付费,MNS 供给愈加轻量的 Serverless 计费方法。依照恳求量和资源占用状况付费,用多少付多少,无需为额定预留资源买单;一起供给每个月具有 2000 万次 API 免费调用额度。这种彻底后付费的定价方法可认为企业节约很多闲置资源。

轻量运维

MNS 能够依据运用状况进行弹性扩展,因而,无需担心容量规划和预装备。每个行列的音讯数量不限,并且规范行列能供给简直无限的吞吐量(QPS 范围内);供给 Serverless 化弹性服务,高效快捷,无需对资源做预留,随取随用,实时扩缩;更适合产品集成与瞬时行列场景。

一起 MNS 供给完善的音讯监控音讯告警等才能,支撑高牢靠性和高稳定性,消除办理和运维时的杂乱性和研制开支。

根本模型

MNS 是一个融合了点对点(P2P)和发布订阅(Pub/Sub)两种消费模型的消费体系,其中 MNS 的「行列」是 P2P 消费模型的完结,「主题」是 Pub/Sub 消费模型的完结。

MNS 也是业界鲜有的一起供给两种混合消费模型的云产品,用户能够经过「行列」或许「主题」来完结大部分对音讯体系的需求。

行列(P2P 模型)

行列模型供给高牢靠、高并发的1对1消费模型,即行列中的每一条音讯都只能够被某一个顾客消费。行列就像一家旋转寿司店。寿司店中有多个寿司师傅(出产者)在制造精美的寿司,每一份寿司都是共同的,顾客(顾客)能够从传送带上拿取中意的寿司进行食用(消费)。

行列是 MNS 的尖端资源,也是音讯的存储实体,有完好的阿里云资源的生命周期,以及完善的权限控制机制。环绕行列有三个中心概念:

  • 出产者(Producer):出产者担任将音讯发送到指定的行列上,一个行列承受分布式的出产者并发投递音讯。

  • 行列(Queue):行列模型对应的物理资源,也是音讯的存储实体,MNS 经过一个分布式的存储集群来供给行列的分布式存储才能。

  • 顾客(Consumer):顾客担任从指定的行列经过轮询的机制获取音讯,一个行列承受分布式的顾客并发地消费音讯,一起确保同一条音讯在可见时刻内只会被一个顾客消费。

主题(Pub/Sub 模型)

主题模型供给一对多的发布订阅模型,支撑音讯告诉。主题就像一份报纸,多个读者到邮局订阅了这份报纸。当报纸推出最新一期时,读者(包括邮局的合作伙伴)能够选择以下方法来获取:

  • 让邮局投递员将报纸都投递(推送)到家里(特定的地址)。

  • 去就近的报刊亭(订阅点)自行获取报纸(报纸会先被邮局投递员集中送到各个报刊亭)。

主题是 MNS 的另一个尖端资源,其也具有音讯的存储才能,对应的 Topic 资源具有完好的阿里云资源的生命周期,以及完善的权限控制机制。环绕主题也有三个中心概念:

  • 出产者(Producer):出产者除了能够把音讯发送至行列,也能够把音讯发送到主题上,主题也承受分布式的出产者并发投递音讯。

  • 主题(Topic):主题模型对应的物理资源相同具有音讯的存储才能。

  • 订阅(Subscription):可认为每个主题创立多个订阅,每个订阅将收到 Topic 上的完好音讯,订阅的下流能够是多种类型的订阅者,用户往往经过订阅的才能将主题中的音讯扇出至多个行列。

功用特性

MNS 作为一款老练的音讯产品,面向主题和行列供给了多种功用特性,能够深入到运用的架构当中,协助用户下降事务流程开发的杂乱度,让事务专注于事务逻辑的开发。比如多种音讯类型的支撑,便利用户快速完结守时、优先级相关的事务逻辑。

多种音讯类型的支撑

MNS 行列支撑普通音讯、推迟音讯、优先音讯这 3 种音讯类型。

普通音讯是最根底的音讯类型,当一条普通音讯发送到了 MNS 之后,这一条音讯就会在行列中等候用户的拉取进行音讯的消费。

关于推迟音讯,用户能够在发送的时分指定希望这条音讯的推迟时刻,当到了设定的推迟时刻后,那么就能够消费到这条音讯。一起,在发送了推迟音讯之后,除了能够获取到音讯的一些根本特点之外,还能够获取到一个音讯句柄,当希望提前取消掉这条推迟音讯的时分,咱们能够运用这个音讯句柄进行 Delete。Delete 往后,这条音讯就不会再投递出来。经过推迟音讯,用户能够轻松的完结一个分布式的推迟调度体系,在具有高精度推迟的一起,完结超高的可扩展性和可用性。

关于优先音讯,咱们在发送音讯的时分能够指定音讯的优先级,优先级的取值范围为 1 到 16。优先级的取值越小,那么这条音讯的优先级就越高。需求留意的是,优先音讯并不确保音讯的次序性,优先级越高的音讯具有更简略被消费的或许性,并不意味着优先级低的音讯必定会在优先级高的音讯消费完结之后才能够被消费。

高效的长轮训机制

关于 音讯行列 MNS 来说 ,用户需求自动进行音讯的拉取,假如拉取的频率过低,那么就会导致音讯的推迟;相对应的,假如拉取的频率过高,那么又会带来过多无效的API调用。

为处理这个问题,MNS 行列供给了长轮训的机制,能够在必定程度上削减无效 API 的调用,一起确保音讯的及时性。当用户拉取音讯的时分,能够设置这次恳求拉取音讯的 waitseconds,客户端则会以设置的时刻挂一个长轮训恳求到服务端。假如在长轮训期间发现有音讯能够被消费,就会立即回来;假如没有,就会最多等候长轮训时刻完毕之后回来。但需求留意的是,虽然咱们能够运用长轮训来削减无效的 API 调用,但整体上仍是需求必定的音讯拉取的并发度,以确保音讯的及时性。

灵敏的音讯生命周期办理

厚积薄发--一文带您了解阿里云 RocketMQ 轻量版消息队列(MNS)

关于行列中的一条音讯,其会具有可见、不行见、删去这 3 种状况。当音讯发送到行列中后,这条音讯就处于可见的状况,等候顾客来拉取。当音讯被顾客拉取出来之后,音讯会进入一段“不行见时刻”,在这段“不行见时刻”里边,这条音讯是不会被再次的拉取出来。但假如在“不行见时刻”里边这条音讯没有被删去,那么这一条音讯就会再次的可见,并能够被顾客再一次的从行列中拉取出来。

除此之外,当有顾客消费到音讯,在处理的进程中突然出现问题,例如宕机,那么这一条音讯则会在“不行见时刻”完毕之后再一次的可见,能够被其他的顾客再次消费到。

这里或许就存在一个矛盾点,用户或许希望有顾客宕机之后,没有被正确处理的音讯能够尽快的由其他顾客消费下去,但又由于本身的事务处理时刻或许有时分较长,或许会超越行列上所装备的默认的“不行见时刻”,导致音讯的重复消费。那么,为处理这种场景,MNS 也为用户供给了能够在音讯维度修正某一条音讯的“不行见时刻”功用。

厚积薄发--一文带您了解阿里云 RocketMQ 轻量版消息队列(MNS)

当用户收到了一条音讯,发现这条音讯处理的时刻较长会超越行列所装备的“不行见时刻”的时分,用户能够经过音讯的句柄自动调用,修正这一条音讯的不行见时刻。例如上图,将这一条音讯的不行见时刻进行了延伸,留给了事务更多的处理时刻。当然,同之前的音讯消费相同,当这条音讯处理完结之后,也需求调用删去音讯的接口,进行音讯消费成功的承认。

音讯多订阅推送

厚积薄发--一文带您了解阿里云 RocketMQ 轻量版消息队列(MNS)

MNS 主题供给了一对多播送音讯的才能,咱们可认为一个主题创立多个订阅,路由到不同的 Endpoint。用户只需求将音讯发送到主题,就能够将这个一条音讯推送到多个订阅中去。

其次,在一对多播送音讯的才能的根底上,在订阅中,MNS 还支撑订阅带有特定标签的音讯。咱们在创立订阅的时分能够指定这个订阅所关怀的音讯的 Tag,这样当 MNS 进行音讯推送的时分,就会自动进行音讯的过滤,仅将这个订阅所关怀的 Tag 推送出去。

为了确保音讯投递的牢靠性,用户能够对每个订阅装备推送策略,能够指定运用退避重试策略或许指数衰减重试的策略。

关于退避重试策略,当音讯推送失利的时分,会重试 3 次,每一次的重试距离时刻为 10 到 20 秒的随机值。关于指数衰减重试,整体的重试时刻为 1 天,每次的重试时刻距离是指数递增的(1 秒,2 秒,4 秒,8 秒,…)。

最后,咱们还能够装备推送的音讯的格式,咱们能够在创立订阅的时分,指定推送格式为 XML、JSON 或许 SIMPLIFIED。关于 XML 和 JSON,推送给订阅的音讯内容,除了会包括发送到主题的音讯之外,还会添加例如 MessageID、TopicName、SubscriptionName 等特点。而关于 SIMPLIFIED,则是直接将发送到主题的音讯进行转发,不会添加额定的特点。

接入协议

MNS 以 HTTP 协议对外供给服务,包括近 30 个 RESTful 的 API,但中心事务场景往往运用 3 个左右的 API 就能够完结研制,十分易于上手。

另外,用户既能够直接依据 API 进行自行的封装,也能够直接运用官方所供给的的 SDK 进行集成。用户仅只需求依靠一个 SDK 就能够完结从服务的注册、资源的创立、再到音讯的收发。

在多言语 SDK 方面,MNS 供给了 8 种干流言语的 SDK,包括 Java、Python、C#、Node、PHP、C++、Go 等,一起也支撑选用 Java 范畴规范的 JMS SDK 接入 MNS。

适用场景解析

相较于 RabbitMQ,ActiveMQ,Kafka 等开源音讯行列,RocketMQ 轻量版 MNS 摒弃了十分杂乱的概念模型及臃肿繁多的协议,经过简略模型,通用的 HTTP RESTful 规范协议即可高效完结音讯范畴的典型场景。供给彻底免运维的音讯集成方案,明显下降开发和维护成本,提高新事务开发功率。

音讯播送(Fanout)场景解析

厚积薄发--一文带您了解阿里云 RocketMQ 轻量版消息队列(MNS)

  • 布景信息

轻量音讯行列 MNS 供给行列(Queue)和主题(Topic)两种模型,根本能满意大多数运用场景。行列供给的是1对1的共享音讯消费模型,选用客户端自动拉取(Pull)形式。

主题模型供给一对多的播送音讯消费模型,选用服务端自动推送(Push)形式。

推送形式的好处是即时性能较好,但需露出客户端地址来接纳服务端的音讯推送。有些状况下有的信息,例如企业内网,无法露出推送地址,希望改用拉取(Pull)的方法。虽然音讯服务 MNS 不直接供给这种消费模型,但能够结合主题和行列来完结一对多的拉取音讯消费模型。

  • 处理方案

经过创立订阅,让主题将音讯先推送到行列,然后由顾客从行列拉取音讯。这样既能够做到一对多的播送音讯,又可防止露出顾客的地址。

超大音讯传输(Claim Check)场景解析

厚积薄发--一文带您了解阿里云 RocketMQ 轻量版消息队列(MNS)

  • 布景信息

音讯服务 MNS 的行列的音讯大小最大约束是 64 KB,这个约束根本能够满意在正常状况下音讯作为控制流信息交换通道的需求。可是,在某些特殊场景下,音讯数据比较大时,就只能选用音讯切片的方法。

下面是不做音讯切片,经过 OSS 来完结传递大于 64 KB 的音讯的处理方案。

  • 处理方案

出产者在向音讯服务 MNS 发送音讯前,假如发现音讯体大于 64 KB,则先将音讯体数据上传到 OSS。

出产者把数据对应的 Object 信息发送到音讯服务 MNS。

顾客从音讯服务 MNS 行列里读取音讯,判别音讯内容是否为 OSS 的 Object 信息。

判别音讯内容是 OSS 的 Object 信息,则从 OSS 下载对应的 Object 内容,并作为音讯体回来给上层程序。

简略事务音讯场景解析

布景信息:一些事务场景需求确保本地操作和音讯发送的事务一致性,即音讯发送成功,本地操作成功。假如音讯发送成功,本地操作失利,那么发送成功的音讯需求回滚。操作流程如图所示:

厚积薄发--一文带您了解阿里云 RocketMQ 轻量版消息队列(MNS)

  • 处理方案

音讯发送成功,事务操作成功时操作进程如下所示:

  • 出产者发送一条事务预备音讯到事务音讯行列;
  • 出产者发送操作日志音讯到操作日志行列,日志中包括进程1音讯的音讯句柄;
  • 出产者执行本地事务操作成功;
  • 出产者恳求修正音讯推迟时刻,使音讯对顾客可见;
  • 出产者向操作日志行列承认操作日志,删去日志音讯;
  • 顾客从事务音讯行列中接纳事务音讯;
  • 顾客处理事务音讯;
  • 顾客恳求删去事务音讯。

音讯过滤(Message Filter) 场景解析

  • 布景信息

一些场景中需求依据音讯内容把音讯推送到不同的推送方针,为了达到这一功用,您能够创立多个主题,并为每个主题设置相应的推送方针,可是这样会添加额定的成本,并且添加了运维的杂乱度。为了防止这种状况,音讯行列 MNS 供给了音讯过滤标签功用。您能够只创立一个主题,并在创立订阅时设置不同的音讯过滤标签,结合音讯的音讯过滤标签,MNS 就能够把音讯推送到不同的推送方针中。

厚积薄发--一文带您了解阿里云 RocketMQ 轻量版消息队列(MNS)

  • 处理方案

图示例场景中,在主题 Topic 1 创立 3 个音讯过滤标签不同的订阅,Subscription 1、Subscription 2 和 Subscription 3。这 3 个订阅的推送方针分别是 Queue 1、Queue 2 和 Queue 3。

  • 音讯的音讯过滤标签和订阅的音讯过滤标签一致。音讯过滤进程如下:

音讯服务 MNS 将 Message 1 推送到行列 Queue 1;

音讯服务 MNS 将 Message 2 推送到行列 Queue 2。

  • 订阅没有音讯过滤标签。音讯过滤进程如下:

音讯服务 MNS 将 Message 1推送到行列 Queue 3;

音讯服务 MNS 将 Message 2 推送到行列 Queue 3;

音讯服务 MNS 将 Message 3 推送到行列 Queue 3。

客户事例及最佳实践

在线买卖 – 运用解耦 – 削峰填谷(典型场景 )

厚积薄发--一文带您了解阿里云 RocketMQ 轻量版消息队列(MNS)

  • 场景描述

淘宝/天猫主站最为中心的体系是买卖体系,每一笔买卖订单数据都会有几百个下流事务体系的相关,包括物流、购物车、积分、直充、阿里妈妈、流核算分析等,整个体系巨大并且杂乱,架构设计稍有不合理,将直接影响主站事务的连续性。

  • 异步解耦

如此杂乱且巨大的体系,若上、下流事务体系紧耦合,那么任意一个子体系不行用都将直接导致中心买卖体系不行用;

经过音讯行列完结上、下流事务体系松耦合,那么,即便下流子体系(如物流体系)出现不行用,也不会影响到中心买卖体系的正常运转;

  • 削峰填谷

经过音讯行列不仅能够起到体系间解耦的效果,更能在大促、秒杀等大型活动中起到削峰填谷的效果。

每年天猫双11清晨,确保中心买卖体系的事务处理才能始终为重中之重,每秒数十万笔的买卖订单处理才能,且逐年线性增加;然而相对的,各大物流体系、银行的付出体系的事务处理才能却有限,若不能进行流量缓冲将直接引发这些体系的崩溃。因而,利用音讯行列强壮的音讯堆积才能则能够很好的起到削峰填谷的效果,将体系压力悉数转移到音讯行列,从而释放物流、付出等体系的压力,确保事务的正常运转。

直播录制 – 合流 – 转码(Serverless 场景 )

场景描述:视频的直播录制,合流,转码是在线教育和在线直播范畴的刚需场景,经过 MNS 能够对 FC Serverless 资源进行在线调度,协助客户完结异步直播流录制,合流通码等杂乱场景。

厚积薄发--一文带您了解阿里云 RocketMQ 轻量版消息队列(MNS)

在线游戏场景

  • 场景描述

游戏场景存在很多强交互场景的数据流通,对音讯中间件的稳定性和端到端推迟要求极高,自建音讯中间件压力大、不稳定。游戏场景存在很多的指令传输以及守时任务,自建逻辑无法处理热点问题。

经过 MNS 能够完结从游戏网关指令到后台音讯协议的转换,一起 MNS 也支撑后台逻辑服、工会、战斗服之间的异步解耦拆分。

厚积薄发--一文带您了解阿里云 RocketMQ 轻量版消息队列(MNS)

总结

MNS 环绕轻量音讯行列,供给一系列的轻量级才能。为企业和开发者下降音讯产品的杂乱度,削减运维开支,供给更易上手的音讯行列服务。

作为阿里云 RocketMQ 的轻量版,填补了 RocketMQ 在轻量化和易用性的不足。尽管 MNS 版别伴随 RocketMQ 经过多年迭代与打磨,内部极为杂乱,但一向尽力坚持其在客户端的简略易用。为企业和开发者下降音讯产品的杂乱度,削减运维开支供给更易上手的音讯行列服务,是 MNS 的产品任务和愿景。


MNS 产品训练营活动炽热报名中

为了协助大家由浅入深的对阿里云音讯行列 MNS 有愈加全面的了解,一起希望音讯行列 MNS 能够协助大家处理日常工作和出产的问题,特推出音讯行列 MNS 产品训练营课程,课程中不仅有对产品简略形象的介绍,还有“首秀”的着手实践学习课程。

参加本次音讯行列 MNS 训练营,您能够学习并收成到:

  • 音讯行列 MNS 的根底概念及特性
  • 音讯行列 MNS 的最佳实践及事例
  • 基于 MNS,0 根底轻松构建 Web Client

除了学习层面的收成,活动期间,完结一切参营任务且考试经过的前 20 名同学可获得(若成绩相同按考试时刻次序排名),即可免费获得小米充电宝。活动时刻:8 月 10 日 – 8 月 31 日(工作日期间)。

点击此处,立即报名吧~