RocketMQ 消息收发弹性--生产集群如何解决大促场景消息收发的弹性&降本诉求|学习笔记

简介: 快速学习 RocketMQ 消息收发弹性--生产集群如何解决大促场景消息收发的弹性&降本诉求

开发者学堂课程消息队列 RocketMQ 5.0 云原生架构升级课程RocketMQ 消息收发弹性--生产集群如何解决大促场景消息收发的弹性&降本诉求学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/1234/detail/18400


Rocket MQ消息收发弹性--生产集群如何解决大促场景消息收发

 

主要内容:

一、产品介绍:什么是消息收发弹性

二、产品使用及限制:消息收发弹性的使用及限制

三、使用方式及演示:结合业务场景的最佳使用方式

 

今天分享阿里云Rocket MQ5.0场景消息收发功能并且通过该功能生产集群是如何解决大促场景消息收发的弹性以及降本诉求本次介绍将从产品介绍、产品使用及限制、使用方式及演示等三个方面进行介绍在介绍Rocket MQ5.0的实例的消息收发弹性之前,先从整体上介绍一下阿里的策略。

 

一、产品介绍:什么是消息收发弹性

image.png 

通常认为业务方往往存在预期外的突发业务热点和毛刺流量为了应对这些突发热点常规扩容的是无法及时应对的,服务存在不确定性的风险。因此为了应对突发流量,设计了一套处理机制,首先是黄色部分,这部分相当于需要满足规格内的预期流量这是毋庸置疑的,因为每个规格是对应的一个预期内的GPS上限。然后要应对弹性区间内的突发流量,为了应对这个突发流量,需要做到可以随时开启的弹性能力。最后就是要对完全超过弹性上限的流量进行限流,来保证服务的稳定可靠针对弹性区间的突发流量的集群,如果是通过常规扩容的方式,则需要更多的时间,在这段时间之内业务会受损,若仅仅是为了这部分突发流量,就把资源控到一个比较大的规,并不划算使用5.0实例的消息收发弹性能力可以弹性区的突发流量收到秒级响应的,并且针对大数据的预期内的短期的突发流量可以是做到按量收费,更加实惠因为仅仅用户真正使用到了弹性区间内的一部分流量才会进行收费。

image.png 

接下来具体介绍5.0消息收发弹性能力的实例,这个能力最直观的感受其实就是在5.0实例行业有一个自适应弹性的TPS这一部分可以看到在收发TPS弹性的旁边有额外自适应的弹性TPS,用户可以通过对部分进行设置就可以快速低成本的应对大促短时间内的突发流量不直接升级规则提高标准而使用弹性TPS来满足发流量的场景的原因是,此处假设一个大促场景,比如说在今晚的0点有大促活动,如果使用社区收发彩信功能,那这些用户完全可以提前几天就把性功能打开,等到大促结束流量恢复之后把这个功能关闭,实际上不关闭也不会有什么问题,因为如果没有使用的话就不进行收费,使用之后才会收费

但是如果通过升级规格提升标准TPS来处理突发流量,同样是提前几天就把规则给升高那么在大促前这几天实际上是按照高规格进行收费的,但是又无法使用高规格的TPS故此用户实际上是花了更多的钱并且造成了资源的浪费。即使是用户为了避免自己过度浪费,在大促当天0点之前升级规则,这也会出现问题,一个是用户需要付出的额外的精力来关注Rocket MQ进行按时分配,实例的分配是一个非常消耗资源的操作,并且耗时时间会很长没有办法做到开箱即用秒级生效这样的话可能会对用户的业务造成一些有损的影响,使用消息弹性功能的话,可以秒成效,开箱即用的,而且是弹性也是弹性收费的。但是弹性TPS也不是一个解决问题万能的,它也是有上限的。可以看到在上图所示,它上限其实基本上是在标准TPS的基础上有一半的弹性TPS。也就是说如果用户预估自己的业务流量,即使是标准TPS加上弹性TPS仍然无法满足的话,此时只能通过升级规则进行扩容处理,这种情况下使用消息收发弹性功能是满足不了的消息收发发弹性还是会进行扩容弹性,仅仅因为弹性的计算节点已经没有办法满足这个需求,需要扩容存储来满足这种需求,所以需要配规则,这部分的原理后面有详细介绍还有用户可能会问,日常TPS在2500左右,可不可以购买图里的实例,还是购买一个2000标准TPS的实例,但是若把弹性功能打开,弹性有1000,实际上是可以满足消息发送3000 TPS的这样的场景下,其实建议直接使用标准发送消息TPS大于2500的实例,因为弹性TPS部分的使用会有额外收费。如果一天24个小时都在大量的使用弹性TPS,基本上不能直接使用更高规格的实例,这样才会更加实惠。

image.png 

接下来介绍5.0实例如何具体实现消息收发弹性能力的,并且在扩容的场景下对比传统自建的基础上具有的优势。

若左图所示,传统自建集群它是一个存储机资源部分的架构,在这种架构下捕捉是一个很重的数据,可以看到同时需要处理客户端的请求,需要负责消息的读取和写入,需要同时负责计算和存储两方面的功能。那这样的话,就是作为的一个状态结构,那如果想要扩容的话,就需要很重的操作时间也会比较慢,而且在很多时候并不需要真的把握存储能力扩容,仅仅是为了应对短时间的高TPS的请求计算能力的。

此时为了满足这种短时间的高速TPS请求,将其中一个辅助扩容实际上随着扩容出来的存储能力是被浪费掉的。再来看一下右的5.0实例的结构首先可以看到5.0实例的架构是一个存储计算分离的模式用户的客户端仅仅计算节点计算节点才会创作节点之间的消息的读取写入或者存储的部分。

客户端并不会直接访问存储节点,消息收发性功能实际上就是意味着client的弹性得益于存储计算分离的架构,可以快速低成本的扩容计算层的点。计算层的节点作为工作的应用扩容的过程十分便捷,并且依赖于阿里云云厂商拥有大量资源池的前提下配送到资源的材质扩容。

Rocket MQ 5.0消息收发弹性能力一方面依赖于阿里云作为云厂商的弹性能力和自身的存储分离的方案才得以实现的。也就是说在大促这种短时间大量突发流量的场景下,实际上大部分是不需要扩容存储节点,此时就可以通过开通消息收发弹性功能的能力来满足需求

 

二、产品使用及限制:消息收发弹性的使用及限制

image.png 

接下来讲解产品的使用限制,消息收发弹性功能仅仅是支持专业版和铂金版,标准版实例是不支持,并且可以看到图所示专业版的单机规格也是不支持消息收发弹性功能,因为这个单机版实际上是给用户作为一个测试验证的测试实例,并不建议用户在上面生产业务,因为它是单机版的,没有办法生产业务。而且可以看到不同规格的实例弹性TPS上限也是不同的,基本上是在标准TPS的基础上额外会有一半的弹性TPS。面这张图展示的是标准版的弹性TPS上限,如图所示,其他规格的弹性上限小伙伴们可以自行参照官网文档在这里面就不具体列出收费的标准之前也介绍过,是额外计费的而且计费是按照小时进行收费的,计费的具体方式是超过标准TPS的部分流量乘以使用时长乘以弹性规格的使用单价计算得出而且可以看到针对不同版本的实例,在不同地域,它的单价实际上会有一些略微的差别

image.png 

用户可能担心使用此部分弹性TPS会不会有一些稳定性的风险,因为毕竟是在基础标准的TPS之外额外提供的能力,这样给人一种感觉,就是对于实例,如果使用消息收发弹性的功能,是不是因为这个实例已经是处在一种超出额外预算的状态关于这个问题,实际上是不需要担心的,因为对于不同的规格都已经经过了线上的压缩验证,实际上超出了标准TPS的这个弹性TPS是享受一样的稳定性,为期三个月的保障同时可以看到5.0实例的三个版本,标准版,专业版,铂金版,它的稳定性SIV是啊逐渐升高的,弹性TPS的部分是与实例整体稳定性IOS是满足实例整体性SIV的。不会因为使用了弹性GPS它的稳定性就会下降,是不会这样的。

 

三、使用方式及演示:结合业务场景的最佳使用方式

image.png

最后进行操作消息收发弹性能力,进而验证这个功能因为Rocket MQ 5.0实例依然支持使用Rocket MQ 4.0实例交叉访问,所以在这里分别提供了一个一点叉客户端和五点叉客户端的测试代码的实例。可以看到这个程序才写了两千个线程的线程池,并且通过rob limit 的根据输入参数设置了每秒最大的发送设备条数。在程序中会打印发送失败的原因,并且每秒会统计一下总共发送的消息量,根据这个功能,可以验证是不是能达到预期想要的一秒中发送的消息TPS。

image.png 

此处已经购买好了一个专业版的实例而且此实例默认是不会开启消息收发弹性能力的。如果要开启的话,需要在实例消息的页面点击开启弹性,进入到实例修改页面,点开消息弹性的按钮。具体要注意的是在这里可以调整收发信息请求的占比,因为一条消息可能会被多个股东订阅,那这样的话发送一条消息被三个股东订阅,那它的发送消费比例就是1:3,就意味着如果有一条消息写入会有三个消息的消费就有三次消费,那整体的TPS就是4,也就是一条消息对应4个TPS。用户可以根据自己的业务场景以及是如何使用这个消息的,自定义消息收发的占比。现在先不开启弹性能力,可以看到发送TPS上限是2000,此时先尝试发送2300 GPS时会出现的问题。

image.png

可以看到现在基本上每秒成功发送在2200左右,然后其实很多消费都是公司发线路上去可以看到报错信息里面会打印出限流阈值。示的是标准TPS标准发送TPS是2000,但是能够跑到差不多2200左右,因为不会限制的很严格,会预留一定的空间,避免边界情况,例如一个用户就偶尔超了一点点的这种情况是不希望对用户造成业务影响,所以会预留一定的空间。

image.png 

接下来设置好弹性实例,并且设计触发比改成4:5比发送占比改成40%

image.png

现在可以看到已经成功修改了

image.png

那现在再尝试发送2300的TPS,因为这个时候实例实际上应该是可以发送到2400的,还有1600的标准TPS发送和800信息TPS发送。现在已经成功发送300左右个TPS了,并且没有触发任何的限流场景,这已经意味着已经满足了之前的预期情况以上是本节课的全部内容,如果小伙伴们感兴趣的话,也可以自己根据弹性实例来进行验证

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
4天前
|
消息中间件 存储 运维
2024最全RabbitMQ集群方案汇总
本文梳理了RabbitMQ集群的几种方案,主要包括普通集群、镜像集群(高可用)、Quorum队列(仲裁队列)、Streams集群模式(高可用+负载均衡)和插件方式。重点介绍了每种方案的特点、优缺点及适用场景。搭建步骤包括安装Erlang和RabbitMQ、配置集群节点、修改hosts文件、配置Erlang Cookie、启动独立节点并创建集群,以及配置镜像队列以提高可用性和容错性。推荐使用Quorum队列与Streams模式,其中Quorum队列适合高可用集群,Streams模式则同时支持高可用和负载均衡。此外,还有Shovel和Federation插件可用于特定场景下的集群搭建。
44 2
|
4天前
|
消息中间件 RocketMQ
2024最全RocketMQ集群方案汇总
在研究RocketMQ集群方案时,发现网上存在诸多不一致之处,如组件包含NameServer、Broker、Proxy等。通过查阅官方文档,了解到v4.x和v5.x版本的差异。v4.x部署模式包括单主、多主、多主多从(异步复制、同步双写),而v5.x新增Local与Cluster模式,主要区别在于Broker和Proxy是否同进程部署。Local模式适合平滑升级,Cluster模式适合高可用需求。不同模式下,集群部署方案大致相同,涵盖单主、多主、多主多从等模式,以满足不同的高可用性和性能需求。
29 0
|
1月前
|
消息中间件 存储 Java
MQ线上消息乱序问题处理及场景详解
【11月更文挑战第22天】在现代分布式系统中,消息队列(MQ)作为核心组件,承担着异步处理、削峰填谷和系统解耦的重任。
61 1
|
2月前
|
消息中间件 前端开发 Java
java高并发场景RabbitMQ的使用
java高并发场景RabbitMQ的使用
124 0
|
4月前
|
消息中间件 存储 负载均衡
|
4月前
|
消息中间件 存储 负载均衡
"RabbitMQ集群大揭秘!让你的消息传递系统秒变超级英雄,轻松应对亿级并发挑战!"
【8月更文挑战第24天】RabbitMQ是一款基于AMQP的开源消息中间件,以其高可靠性、扩展性和易用性闻名。面对高并发和大数据挑战时,可通过构建集群提升性能。本文深入探讨RabbitMQ集群配置、工作原理,并提供示例代码。集群由多个通过网络连接的节点组成,共享消息队列,确保高可用性和负载均衡。搭建集群需准备多台服务器,安装Erlang和RabbitMQ,并确保节点间通信顺畅。核心步骤包括配置.erlang.cookie文件、使用rabbitmqctl命令加入集群。消息发布至任一节点时,通过集群机制同步至其他节点;消费者可从任一节点获取消息。
57 2
|
4月前
|
存储 C# 关系型数据库
“云端融合:WPF应用无缝对接Azure与AWS——从Blob存储到RDS数据库,全面解析跨平台云服务集成的最佳实践”
【8月更文挑战第31天】本文探讨了如何将Windows Presentation Foundation(WPF)应用与Microsoft Azure和Amazon Web Services(AWS)两大主流云平台无缝集成。通过具体示例代码展示了如何利用Azure Blob Storage存储非结构化数据、Azure Cosmos DB进行分布式数据库操作;同时介绍了如何借助Amazon S3实现大规模数据存储及通过Amazon RDS简化数据库管理。这不仅提升了WPF应用的可扩展性和可用性,还降低了基础设施成本。
96 0
|
4月前
|
消息中间件 API 数据安全/隐私保护
就软件研发问题之RocketMQ ACL 2.0加强集群组件间访问控制的问题如何解决
就软件研发问题之RocketMQ ACL 2.0加强集群组件间访问控制的问题如何解决
|
4月前
|
消息中间件 固态存储 RocketMQ
RocketMQ消息堆积常见场景与处理方案
文章分析了在使用RocketMQ时消息堆积的常见场景,如消费者注册失败或消费速度慢于生产速度,并提供了相应的处理方案,包括提高消费并行度、批量消费、跳过非重要消息以及优化消费代码业务逻辑等。
|
消息中间件 算法 Java
弥补延时消息的不足,RocketMQ 基于时间轮算法实现了定时消息!
弥补延时消息的不足,RocketMQ 基于时间轮算法实现了定时消息!
786 1
弥补延时消息的不足,RocketMQ 基于时间轮算法实现了定时消息!