如何保证高并发下的直播送礼能够快速完成?


一、背景

在如今比较火热的直播行业中,随之而来的是数不胜数的送礼。那么直播行业流量这么大的前提下,送礼行为我们要怎么做到快速完成呢?既要快速处理快速返回,也要保证数据正常无误。

二、高并发下的挑战

我们要处理高并发下的挑战,就需要从几个方面入手:

  • 同步扣款:在用户线程中,我们只需要保证用户送礼行为能够正常扣费成功即可,后续不影响流程的事件就可以慢慢执行
  • 异步消费:为了防止用户送礼请求耗时过大导致体验差的问题,我们可以在扣费成功后,将一些实时性不高的事件改为异步消费(如使用Kafka等消息队列),如APP通知推送、礼物榜单统计、主播收益计算等
  • 监控告警:一方面是监控异步消费是否异常,另一方面是监控送礼流量方便我们及时做出优化
  • 批量操作:对于连续送礼行为,我们可以用批量操作请求代替,可以有效减少网络IO调用,减轻服务器压力
  • CDN缓存:对于大量送礼行为,除了服务端的优化,客户端的优化也是十分重要的,最典型的就是播不停的礼物特效,我们可以采用静态资源+CDN缓存的方式加快资源的加载
  • 礼物特效优先级:对于客户端来说,大量礼物特效不仅会使APP卡顿,而且还可能播不完影响直播内容。所以我们可以针对性做优化,比如优先显示价值高的礼物、相同礼物整合展示等
  • 热点数据缓存:对于送礼行为影响较大的数据如排行榜,我们应该对其进行缓存,加快我们的访问速率,也能减轻我们的数据库压力
  • 卡顿优化:对于客户端来说,还需要监控APP卡顿情况和网络情况,从而启动低质量模式,对于礼物特效进行降级(如用静态图片代替动态特效、或减少特效播放),从而保证直播其他功能能够正常运作

三、如何保证送礼行为快速完成?

要保证送礼行为快速完成,主要有以下几步:

  1. 批量操作:整合送礼请求,减少网络IO调用(如送10次1个A礼物可以整合成送1次10个A礼物)
  2. 池化技术:合理配置HTTP连接池+线程池,使得能应对高并发流量
  3. 监控告警:扣费动作需要监控性能,及时发现并解决可能出现的超时、异常问题
  4. 异步消费:后续收益计算、榜单统计等事件可以使用异步处理,防止加长送礼请求的链路,但是需要做好重试+监控告警

文章作者: GaryLee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 GaryLee !
  目录