IM-秒杀入群解决方案

背景

在电商场景中,会经常有秒杀活动,用户在秒杀一个商品时,商家如果设置了自动加群,会导致在秒杀时刻大批量用户加入群聊,如果任其流量冲击,会导致后端服务出现一系列问题。在这种特殊的秒杀场景下,我对加群接口做了一次彻底的优化改造。

分析

首先来分析一下加群具体的流程。


未命名文件 (1).png

加群会给业务方返回3种结果。
1、群满了
一个群有群人数限制,当群满了后业务方会重新创建一个群,然后用新的群来加群。
2、加群成功
加群成功后表示该用户已经进群,不重试。
3、加群失败
当系统问题或者接口超时,返回失败。业务方会进行接口延时重试。

如何解决

当了解分析了该场景下的加群后,有以下几个方案可以解决。
1、向业务方规定请求速度,让业务方进行限速请求。(历史原因,一开始我们就是这么干的)
2、重构加群接口,业务方不再进行限速,无脑请求加群接口即可。(这次我要做的事)

方案流程

未命名文件 (10).jpg

整体的流程大致就是利用Redis的高性能以及MQ异步+限流缓冲去解决秒杀的大批量入群操作。
在这个方案中也有几个需要注意的点。

一、在流程1中同人-同群,重复发加群消息,怎么处理Redis人数?

利用redis实现分布式锁,在1s内只能有1个请求通过,第2个请求返回成功。

二、流程2 redis缓存剩余人数的难点

未命名文件 (24).jpg

1、在高并发下,理论上有多个请求进来查询群人数,这时候利用Redis分布式锁只有第一个请求去查询群人数并设置剩余人数至Redis缓存。剩余的请求自旋(重复尝试获取锁,第一次获取失败后在一个baseTime+随机时间内唤醒(需要根据查询群人数+入缓存的时间来设置baseTime))
2、双重检查(假设第一个请求已经给redis设置了缓存人数,第二个自旋拿到锁的请求就可以直接获取redis的值做判断了)

三、有没有有效解决获取分布式锁自旋造成的性能问题?

在创建群的接口设置Redis剩余群人数,并设置缓存时间为一星期。(一般商家搞活动都是提前2,3天创建群),足够了。

四、其他需要注意的地方

1、在删除群成员和群成员退出群聊时需要对Redis群人数自增。
2、加群触发的加群系统通知看情况是否需要进行限流降级发送。
3、Redis分布式锁注意不要使用SetNx + exipre命令,可能造成锁无法过期。

五、在加群请求投入到MQ后就代表加群成功了,如果确保最终请求一定成功?

在方案流程中的第5步,从mq限流获取加群请求后依次做入群操作,如果此时MySql压力过大或者有问题加失败了,重新投递MQ到延时队列,直到加群成功为止。

六、还做了哪些策略?

1、分布式配置动态调整限流大小
2、动态线程池
3、数据库迁移(将群聊从单聊的库中迁移(降低群聊秒杀对单聊的影响))

效果

企业微信截图_053e9a1a-d742-4712-bf55-071b2110e5ee.png

线上凌晨压测直接QPS干到10000多,机器数不变的情况下cpu 在35%以内。

最后,没有最好的方案,只有最适合自己的方案。如有疑问和发现不足的地方,请联系,谢谢~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容