searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

一种解决信令风暴的解决方案--利用去重与合并机制

2023-07-29 15:48:46
15
0

一、背景介绍:

1、rocketmq延迟消息:定时消息(延迟队列)是指消息发送到broker后,不会立即被消费,等待特定时间投递给真正的topic;

定时消息会暂存在名为SCHEDULE_TOPIC_XXXX的topic中,并根据delayTimeLevel存入特定的queue,queueId = delayTimeLevel – 1,即一个queue只存相同延迟的消息,保证具有相同发送延迟的消息能够顺序消费。
broker会调度地消费SCHEDULE_TOPIC_XXXX,将消息写入真实的topic。
注意:定时消息会在第一次写入和调度写入真实topic时都会计数,因此发送数量、tps都会变高。
在消息创建的时候,调用 setDelayTimeLevel(int level) 方法设置延迟时间;

2、消息延时级别
消息的延时级别level一共有18级,分别为:

1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h

level有以下三种情况:

level == 0,消息为非延迟消息
1<=level<=maxLevel,消息延迟特定时间,例如level==1,延迟1s
level > maxLevel,则level== maxLevel,例如level==20,延迟2h

二、信令风暴问题分析

如上图当发生信令风暴时,扩散写消息的数据首先会出现突增,出现读写性能瓶颈, 接着pushtopicMQ也出现堆积瓶颈, 同时由于客户端短时间内收到大量信令,客户端也出现了处理瓶颈。

三、信令风暴问题解决方案

1、通过对整个数据流程的分析, 发现很多信令其实是代表同一个含义, 所以可以对消息进行合并和去重,这样的话,消息的总量变由指数级别变为线性级别,就能解决信令风暴问题,

2、对消息进行hashcode计算,以hashcode和用户id为去重标识

3、利用rockmq的延迟消息机制,可以对延迟时间内的消息进行合并去重过滤处理

4、为了避免延时合并带来实时性下降的损耗,在去重过滤时可以选择在时间周期内首次不去重,后续再进行去重处理,可以兼顾效果与实时性

 

 

 

0条评论
0 / 1000
x****n
5文章数
0粉丝数
x****n
5 文章 | 0 粉丝
原创

一种解决信令风暴的解决方案--利用去重与合并机制

2023-07-29 15:48:46
15
0

一、背景介绍:

1、rocketmq延迟消息:定时消息(延迟队列)是指消息发送到broker后,不会立即被消费,等待特定时间投递给真正的topic;

定时消息会暂存在名为SCHEDULE_TOPIC_XXXX的topic中,并根据delayTimeLevel存入特定的queue,queueId = delayTimeLevel – 1,即一个queue只存相同延迟的消息,保证具有相同发送延迟的消息能够顺序消费。
broker会调度地消费SCHEDULE_TOPIC_XXXX,将消息写入真实的topic。
注意:定时消息会在第一次写入和调度写入真实topic时都会计数,因此发送数量、tps都会变高。
在消息创建的时候,调用 setDelayTimeLevel(int level) 方法设置延迟时间;

2、消息延时级别
消息的延时级别level一共有18级,分别为:

1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h

level有以下三种情况:

level == 0,消息为非延迟消息
1<=level<=maxLevel,消息延迟特定时间,例如level==1,延迟1s
level > maxLevel,则level== maxLevel,例如level==20,延迟2h

二、信令风暴问题分析

如上图当发生信令风暴时,扩散写消息的数据首先会出现突增,出现读写性能瓶颈, 接着pushtopicMQ也出现堆积瓶颈, 同时由于客户端短时间内收到大量信令,客户端也出现了处理瓶颈。

三、信令风暴问题解决方案

1、通过对整个数据流程的分析, 发现很多信令其实是代表同一个含义, 所以可以对消息进行合并和去重,这样的话,消息的总量变由指数级别变为线性级别,就能解决信令风暴问题,

2、对消息进行hashcode计算,以hashcode和用户id为去重标识

3、利用rockmq的延迟消息机制,可以对延迟时间内的消息进行合并去重过滤处理

4、为了避免延时合并带来实时性下降的损耗,在去重过滤时可以选择在时间周期内首次不去重,后续再进行去重处理,可以兼顾效果与实时性

 

 

 

文章来自个人专栏
openfire中间件
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0