2019独角兽企业重金招聘Python工程师标准>>>
最近总有一些朋友问高并发问题,后来就想自己把一个秒杀系统作为例子详细分解一下,也是一个学习过程。
首先假设场景,预计该活动可能有1万人参加,那最大并发数为1万。
主要面对的问题分析:
1.对原有业务的影响,秒杀类活动肯定属于附加的业务,如果和原有业务部署在一起,那就会对原有业务造成冲击。注意:哪怕和原有业务不部署在一起也会对原有的相关业务(接口、入口、出口等)产生一定的冲击。
2.高并发下的服务、数据库负载问题
3.带宽问题
4.直接下单问题(越过商品选择直接访问下单url)
解决方案
1.秒杀系统独立部署
2.秒杀商品页面静态化,必要的动态数据缓存处理
3.购买/租用临时带宽
4.动态生成随机下单页面URL
架构设计
1.分析用户心理,用户关心的刷新速度、快速下单,而不是复杂详细的商品详情。控制购买按钮在开始前不可用,准点变为可用。下单页面也应该尽可能的简洁,甚至可以不写地址直接付款下单,然后再修改地址(可选)。
2.秒杀按钮如何控制,因为商品页面静态化了并且做了cdn,如果通过接口控制对服务器压力会很大,所以可以选用前端js控制。在商品页面引入一个js文件,这个文件不被缓存和cdn,使用随机版本号。这个js文件包括活动是否开始的标记和随机下单的url参数。通过定时间来在活动开始的时间更新这个js文件
3.控制订单,两级控制,限制每台服务器接受订单数,验证总的订单数。
4.基本架构,商品服务器集群,CDN,JS服务器集群,订单服务器集群,定时服务器,全局计数器(memcache、redis等)、订单处理子系统(用来处理订单成功的后续逻辑)