礼物扣减的优化思路

来源:11-5 扣减余额流程的深入分析

zconfiguration

2026-02-03

老师,通过本章学习,有一些问题向您请教一下:
1、您在视频中提到可以考虑从业务层面进行优化,在IM层做手脚,比如在 router 层进行扩容,增加50台机器,im-core-server 用100台连接用户的会话连接,这种方式就是纯纯的增加机器,然后配置机器的ip地址就可以了吗?

2、借助IM的异步通知的思路,在客户端发起送礼行为的时候只做基础的同步校验(校验用户余额是否充足)考虑将余额放到 redis 中,如果要将余额放到 redis 中也是提前通过定时任务或者其它的手段将余额从 db 同步到 redis 中吗,这样会出现 db 和 redis 数据不一致性的情况吗(如果出现采取您之前说的延迟双删的思路吗,那么延迟时间设置多少合适),对于余额这种敏感的金钱相关的数据放到 redis 中合适吗,会有丢失的情况吗?

3、在同步送礼的接口里面只完成简单的余额校验,然后发送MQ,在MQ的异步操作里面完成第二次余额校验、余额扣减、礼物发送(发送一个IM信号给到礼物接收方触发svg动画),如果在 MQ 中消费的时候消息没有及时消费或者消息丢失这种情况会出现吗,如果出现的话应该如何考虑解决办法?

我不知道我上面提的这些问题是否合理,老师您不忙的时候帮忙看看

写回答

3回答

Danny_Idea

2026-02-08

问题三 这个是个很好的问题点,确实在使用任何中间件的情况下都有可能会出现第三方未知问题,例如网络分区,机房崩溃等问题。

这种情况下,我们需要去从如何保障中间件的稳定性与性能着手,而不是在应用层上去下手。例如mq集群上云,性能压测,性能监控等。
0
0

Danny_Idea

2026-02-08

问题二:这个思路其实之前讲的时候有点点问题,其实扣款这种东西还是应该先落db再更新缓存较好,这样能够保证数据一致性。
0
0

Danny_Idea

2026-02-08

问题一:其实我猜你想问的问题是im扩容问题吧。这个其实课程里面缺少讲解另一个地方,就是im的网关。一般来说客户端和im服务器之间是一套长连接体系,一旦后台重启,就会导致长连接中断。

所以一般来说我们生产会实现一套针对ws连接重连的move机制。我举个例子,当im连接正常在服务端关闭之前,先提前返回一个move信号给到客户端,然后客户端会进行重连操作,来保证im的正常通讯使用。

那么这里就有一些问题需要考虑:客户端如何感知要连哪台服务器?如何保证重连服务器的连接负载均衡性?如何保证新im机器优先分配到连接资源?
为了解决这一系列的问题,可以在im连接层服务上增加一层ws的gateway,然后在进行ws转发的时候增加一套算法,优先转发给下游连接压力小的机器,以此来减轻压力。
0
0

SpringCloudAlibaba高并发仿斗鱼直播平台实战

SpringCloudAlibaba高并发仿斗鱼直播平台实战

452 学习 · 374 问题

查看课程