高并发情景分析(一)

业务场景经常会出现高并发读写的场景,不考虑图片缓存等cdn技术,只从后台优化方面考虑,通常解决高并发读

的情况即是使用缓存,缓存下,放多个从库。

现在主要总结一下公司在解决高并发写的一些解决办法。

目前团队面对的几个高并发写的场景:

1,播客发红包,观众抢红包。

2,对全民主播点赞,掉会员

3,送礼,赞助加经验

4,零点守护神过期,抢购守护神

解决高并发写的三个最基本思路:

1,内存计算

2,异步处理

3,多consumer消费

公司上述场景中的抢红包,抢守护,点赞掉会员,都属于典型的库存<请求量类的秒杀场景。

其中抢红包流程图如下:



1,用户抢红包的消息是发送至IM服务器,再又IM服务器发送至相应的queue上,然后开启多台consumer进行抢红包消息处理,对于每一条抢红包消息,consumer消费过后,都会将结果再发送回IM服务器,再由IM服务器通知前端。当应用服务成为瓶颈时,可扩容IM服务器,以及consumer服务器来解决。

2,抢红包前,先进行身份验证,将不满足资格的用户过滤。

3,红包业务采用redis计算红包剩余数量,请求到来时,redis直接执行减库存,并返回剩余库存操作,若库存已为0,则不再走数据库处理,直接返回,若库存存在,再进行后续数据库落地操作,因为是依托于redis实现对库存实时修改与查询,故后续数据库落地失败

时,需要执行库存+1操作。采用redis做内存实时计算,可极大减轻高并发对库的冲击,基本落到库的写请求都是可成功的,不可成功的

请求多数在redis层判定后返回。这部操作也叫做用户请求预处理操作。


抢红包不涉及到扣钱,所有只要考虑库存问题,目前的实现比较简单,单纯的select ...for ...update

中规中矩的行级锁表,校验,更新,插记录,最后返回,并更新redis。

其实代码还是有可以优化的地方,执行行级锁之后,其他线程在执行这个方法时,则会处于等待状态,

所以,最好将判定时间段,判定用户是否抢过红包等一些组装操作,都放到select...for....update外。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,398评论 19 139
  • 一、 设计理念 1.空间换时间 1)多级缓存,静态化 客户端页面缓存(http header中包含Expires/...
    帅T阅读 8,935评论 1 15
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,366评论 25 709
  • 第一次画萌宝,可爱的娃娃 这是听了杭杭老师的课后,画的萌宝 针尖笔好神奇,我好喜欢这个眼睛 好有创意的萌宝 希望老...
    4321fae116c5阅读 1,410评论 1 0
  • 当我沉浸在春暖花开的喜悦中,早早地把羽绒衣收好时,完全没有意识到冬天在角落里正虎视眈眈。稍不留神,他就卷土重来了,...
    小心眼和坏脾气阅读 1,235评论 0 0