秒杀背景电商企业为了吸引客户,聚拢人气,经常会策划一些秒杀活动。活动中售卖的产品要么定价远低于市场价,要么比较稀缺(比如一些刚出炉的产品)。这些商品电商一般都是限量、限时销售的。无疑,这些产品对消费者的诱惑是巨大的。消费者蜂拥而至,往往产品在几秒钟内就被抢购一空。对于电商系统来说,可能更多的是考验。秒杀的痛点首先,秒杀的场景决定了秒杀是速度的比拼。活动一开始,大家就争相抢货,完成订单。因此,在秒杀活动开始的那一刻,会有大量的流量涌入,几倍甚至十倍的流量对系统的影响不小。如果系统没有足够的容量或应对措施,很可能会被瞬时高流量压垮。其次,突如其来的高流量给系统的各个模块带来了一系列的压力,可能会导致系统变慢,并且可能会相互影响,影响可用性。例如,如果数据库更新同一个商品库存,则需要锁定同一行记录。随着并发压力逐渐增大,数据库更新的性能会逐渐下降。从而导致提供库存服务的应用服务性能下降,订单服务的性能受到连锁影响,最终反馈给消费者的可能是整个网站购物流程性能不佳,速度慢回复。面对响应缓慢的系统,很多消费者可能会采取反复刷新、多次尝试的方式,这无疑增加了系统的压力。还有,以上这些带给消费者的往往是体验上的痛苦。例如:网站响应慢,点击抢购按钮无响应。终于可以运营了,却发现秒杀活动已经结束,消费者的参与感比较差。随着时间的推移,可能会失去对此类活动的兴趣。设计理念分级限流:尽可能将压力集中在前端,减轻数据库和服务器的压力异步处理:异步处理防止阻塞。可用性:高可用性双活。用户体验:隐藏购买地址。分离:主站分离。技术研究短时间内大量访问对现有网站业务的影响。秒杀是网站营销的附加活动,时间短,并发量大。如果与网站原有应用一起部署,势必会对现有业务造成影响,稍有不慎就有可能导致整个网站瘫痪。高并发下对服务器数据库的巨大负载压力。在用户秒杀开始前,不断刷新浏览器,确保不会错过秒杀事件。频繁访问程序和数据库会对应用服务器和数据库服务器造成负载压力。网络带宽的问题比平时好很多倍。如果秒杀页面大小为200K,最大并发数为10000,则需要的网络和服务器带宽为2G(200K×10000)。这些网络带宽是由于秒杀活动而新增的,超过了网站通常使用的带宽。避免直接下订单。秒杀的游戏规则是,秒杀后即可开始下单。在此时间点之前,您只能浏览信息,不能下单。订单页面也是一个普通的URL。拿到这个网址,不用等秒杀开始就可以直接下单了。应对措施独立部署秒杀系统为了避免短时间内大流量对现有网站业务的影响,可以独立部署秒杀系统。如果你愿意,你也可以使用一个单独的域名,这样它就与网站完全隔离了。即使秒杀系统崩溃,也不会对网站造成影响。秒杀产品页面是静态的。产品描述、参数、详情全部写入静态页面,无需程序逻辑处理,无需访问数据库。无需部署动态服务器和数据库服务器。租用秒杀网络带宽因秒杀新增网络带宽,您必须向运营商重新购买或租用带宽。为了减轻服务器的压力,需要将秒杀产品页面缓存在CDN中,CDN服务器也需要临时租用带宽。动态生成随机订单页面的URL为了防止用户直接访问订单URL,需要将URL动态化,使用随机数作为参数,只有在秒杀启动时才能生成。架构设计如何控制秒杀产品页面闪购按钮的可用/禁用。购买按钮只有在秒杀开始时才会亮,之前是灰色的,表示活动还没有开始。如果页面是动态生成的,每次刷新都要请求服务器,势必会对服务器造成负载压力。如果页面是静态页面,页面可以缓存在CDN、反向代理服务器甚至用户浏览器上。但是这样一来,秒杀开始的时候,用户刷新页面,根本无法请求应用服务器。解决方法:使用JS脚本控件在页面中引用一个JS文件(非常小的文件),但该文件不要缓存。这个JS的作用是包含秒杀启动logo,修改样式,生成订单页面的URL和随机参数。JS文件如何不被缓存:xxx.js?v=随机数。会有一个服务器用于监控(定时加载和卸载):当秒杀活动启动时,将推送文件。秒杀活动结束时,推送文件,标记结束标记,修改样式。详情:2018-01-2720:00PHP千万级PV秒杀系统实战搭建讲座
