秒杀高并发优化分析
学习了慕课网《高并发秒杀优化》视频,总结如下:
秒杀的高并发问题在哪里?
业务分析
红色部分是有可能发生高并发的地方,我们来一一分析
一、详情页通过用户大量的刷新,一些静态资源需要加载,这个耗费IO时间。优化方案:使用CDN缓存
CDN(内容分发网络)可以加速用户获取数据;部署在离用户最近的网络节点上;命中CDN不需要方法后端服务器;互联网公司可以自己搭建或租用。
二、系统时间不用优化,因为访问一次内(Cacheline)大约10ns。
三、秒杀地址接口
四、秒杀操作
方案一:天猫阿里用到的优化:
曾看过看过一篇博客《 ITOO---选课里的“秒杀”业务实现(一)》就是这样实现的。
把资源放到redis中,把资源竞争引入到redis,因为redis并发量高达几万或者几十万;业务逻辑发送到MQ,然后并发写到库中。
这其中有一个redis并发问题,虽然redis是单线程,但还是存在因操作上引起的数据覆盖,这里应该把所有的业务逻辑都一步执行,执行完毕后其它业务才能执行,这里使用到redis lua脚本,这里完全可以解决。
方案2:用mysql解决资源竞争。
有人会有疑问,mysql太低效?
无事务的执行mysql测update操作,承受并发量是4w/s。这样的效率还是挺好的。
用java控制事务之后呢
加上事务后的瓶颈
这样的并发量只有500/s。
1、网络延迟
大概要20ms左右,如果不计算其他业务时间,并发量就才50/s,所以尽量选择同城机房。
2、
第一点是需要修改mysql源码,阿里和天猫曾经用过。
第二点适用范围很大。
3、优化数据库:分库分表
搭建各种集群,如下:
总结
这只是大体结构,还存在细节上的问题,可以多多交流。