oom 如何避免 高并发_记录一次高并发业务场景的性能优化

功能优化直播账号创建优化场景:每个企业云用户在直播时需要登录第三方直播账号,如果没有,则创建一个直播账号问题:创建直播账号的服务是第三方提供的,不支持高并发优化:在用户登录的时候调用直播服务,初始化直播账号,将创建直播账号的并发压力分散到用户登录期间,这个优化经历了几个版本,最终我们使用方案3实现。方案1:在登录的回调函数中同步调用直播服务创建账号。这个方案存在的问题是,假如创建直播账号的服务响应...
摘要由CSDN通过智能技术生成

功能优化

直播账号创建优化

场景:每个企业云用户在直播时需要登录第三方直播账号,如果没有,则创建一个直播账号

问题:创建直播账号的服务是第三方提供的,不支持高并发

优化:在用户登录的时候调用直播服务,初始化直播账号,将创建直播账号的并发压力分散到用户登录期间,这个优化经历了几个版本,最终我们使用方案3实现。

方案1:在登录的回调函数中同步调用直播服务创建账号。这个方案存在的问题是,假如创建直播账号的服务响应缓慢、异常将影响用户登录。

方案2:在登录的回调函数中异步调用直播服务创建账号。这个方案解决了方案1的问题,但代码、服务依然耦合在一起。登录本不应该依赖直播服务,如果以后需要在登录功能上做另外一些额外的预处理和通知,将会让登录的功能变得复杂且职责不清。

方案3:在登录的回调函数中发送一个主题消息,并投递到MQ,之所以选择主题消息而不是点对点消息,是考虑到未来可能会在登录的时候做其他的一些业务操作。直播业务通过订阅登录消息,收到消息后进行账号初始化、缓存,使登录服务与创建直播账号服务完全解耦,并且有良好的扩展性。

通过消息队列削峰异步处理

场景:生成试卷、保存草稿、提交试卷

问题:这些场景有着较高的并发,这些业务操作本身也比较复杂,原先的同步调用在高并发的场景下会导致服务处理不过来,提示业务操作失败

优化:将同步操作改为消息+轮询的方式。

1、 用户点击考试的的时候发送出卷的消息,并在redis中写入出卷中的状态并返回客户端

2、 后端根据业务需要配置处理线程数(生成试卷这里配置了100个线程),执行业务操作,在出卷完成后将试卷放到redis中,并擦除redis出卷状态。

3、 客户端首先延迟1s再发轮询请求(调用出卷请求后马上开始轮询,这时大部分情况下后端是还没出好试卷,所以这个请求意义不大),然后再间隔每两秒轮询,处理完成,再获取试卷数据。

通过缓存提升服务响应时间、降低DB读压力

场景:获取期次、章节、课时单元、试卷、考试、题目信息等

问题:之前的这些操作基本都是

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值