轻量消息队列(原 MNS)对超过限流阈值的请求执行限流策略,从而避免底层资源承受过高压力。
限流行为
当流量接近或达到限流阈值时,服务端会根据实时资源水位自动弹性调整限流阈值,在多数场景下,可动态支撑更高并发请求且用户无感知。若触发临时限流(如突发峰值激增、集群资源瓶颈等),系统将在自动扩容完成后恢复流量处理能力并同步提升限流阈值。
当触发限流报错时,系统将启动反压机制,此时超出阈值的请求会在服务端被暂时挂起约500毫秒后返回,避免系统因过载而影响整体性能和稳定性。
错误码
触发限流策略后,轻量消息队列(原 MNS)服务端会返回如下错误码信息。
HTTP状态码 | 错误码Code | 错误描述信息Message |
429 | TooManyRequests | The request is denied by cluster flow limiter for too many requests. |
限流阈值说明
队列消费模式下的异常行为限流策略
在标准的队列消费模式中,客户端在成功处理消息后,应在服务端删除该消息。如果客户端大量出现“只接收消息,但不发送删除消息请求”的非标准行为,系统将视其为异常消费,并触发限流机制以保障系统稳定性。限流后,客户端接收新消息的速度会大幅降低。
触发限流的阈值(满足任一条件即可):
持续时间:该异常行为持续超过 30 分钟。
消息数量:累计接收但未删除的消息总量达到 5,000 条。
流量速率:接收但未删除的瞬时速率超过 1,000 TPS。
大流量请求的限流策略
每个主账号每个地域限流阈值默认值:20000 TPS。如果流量已超过20000 TPS,可提交工单提高默认限流阈值。
请求次数计数说明如下:
每调用API接口1次,计为1次请求。
批量发送场景TPS叠加:当使用BatchSendMessage接口请求某队列时,BatchSendMessage的TPS = BatchSendMessage每秒实际请求次数×接口中的消息条数。例如,BatchSendMessage接口1秒中实际请求次数是100,接口中包含10条消息,则占用单个队列TPS=100×10 = 1000。
批量消费场景TPS叠加:当使用BatchReceiveMessage接口请求某队列时,BatchReceiveMessage的TPS = BatchReceiveMessage每秒实际请求次数×接口中的消息条数。例如,BatchReceiveMessage接口1秒中实际请求次数是100,接口中包含10条消息,则占用单个队列TPS=100×10 = 1000。
避免限流影响
为了避免限流策略对您业务的影响,请您关注以下两方面: