欢迎您来到《科技与创新》杂志!设为首页加入收藏

版权信息

国际标准刊号 ISSN 2095-6835
国内统一刊号 CN 14-1369/N

主 管 山西省科学技术协会
主 办 山西科技新闻出版传媒集团
出 版  山西科技期刊出版有限责任公司
编   辑  《科技与创新》编辑部
社 址 太原市长风东街15号


投稿邮箱 kjycx@188.com
                kjycxzzs @I26.com

电话 010-88909179
   0351-7537156

邮发代号   22-582
定  价 每册25元 

相关证书

精品论文

您现在的位置:首页 > 精品论文

电商网站秒杀系统的研究与对策

发布来源:发布时间:2017/11/24点击量:4585

电商网站秒杀系统的研究与对策

张会敏

(中北大学软件学院,山西 太原 030051)


摘  要:简要研究了电商网站秒杀应用的高并发访问问题,分析了其主要特点,然后从系统架构、程序开发2个方面入手,详细分析了架构分层、缓存、异步方法、消息队列、代码实现等内容,并提出了相关问题的解决方法。

关键词:分层设计;异步方法;页面静态化;秒杀系统

中图分类号:TP311.52              文献标识码:A        DOI:10.15913/j.cnki.kjycx.2017.22.075


大型的电商网站,例如京东、阿里系、亚马逊中国,都有各自的秒杀系统。秒杀活动是网站的一种重要营销手段,在营销过程中占有举足轻重的位置。秒杀会吸引大量用户抢购,会在约定的时间点同时在相应的页面内抢购约定数量的商品,并在规定时间内结束。通常情况下,秒杀的时限都很短。秒杀系统是典型的高并发应用。秒杀时,大量用户会在同一时间抢购,网站瞬时流量激增。秒杀时,访问请求数量远远大于库存数量,最终只有极少数用户能够秒杀成功。此类高并发应用在电商网站举行一些其他活动或者在12306网站上抢票时常会遇到。系统软硬件无法处理如此巨大的计算量,进而出现响应速度慢,甚至出现处理出错、系统宕机等问题,进而导致整个系统瘫痪。

在高并发的情况下,网站如何才能稳定、持续工作一直是一个难题。本文从软件的架构设计和实现层面出发提出相应的解决方案,即在系统中使用分层与组件化的架构,并配合缓存、消息队列。在实现方面,针对秒杀应用的特点,引入了异步方法、表现与数据分离的方法。

1  秒杀系统的关键点分析

从业务规则的角度讲,设计秒杀系统有2个关键,即库存管理和订单处理。当用户抢购时,系统需要判断是否还有库存;当用户提交订单时,系统需要按照提交订单请求的顺序依次创建订单。当然这只是最简化的秒杀设计。事实上还涉及到其他的附属环节,例如积分、在线支付、物流配送,等等。

2  系统架构优化

在此必须明确的前提是,高并发应用是一个有机系统,整个系统的优化与提高来自每个组件的优化,它们共同组成一个强大的系统,以面对每秒几十万级甚至百万级的访问量。

2.1  服务器负载均衡与集群

在服务后端,可以使用负载均衡、集群技术。负载均衡、集群技术可以分别部署在Web服务器层、应用服务器层、数据存取层和数据库层。也就是说,在服务后端进行了更细粒度的分层,从而极大地提高系统的负载能力。

具体来讲,在Web服务器层配置Apache/Nginx的反向代理,实现多台服务器的负载均衡,同时,在应用服务器层也部署负载均衡。而在数据库存储层,则有更多灵活的方法可以使用,比如数据库集群、读写表分离等性能调优手段。此外,各厂家也有其成熟的方案,比如Oracle的表与索引的分区技术。

2.2  表现与数据分离

从客户端的角度出发,可使用表现与数据分离的架构。随着CPU/GPU 的发展,计算机的计算能力越来越强,将一些计算逻辑分散到客户端,可以明显降低服务后端的计算压力。前后端之间通过传送小巧的JSON数据进行交互,也降低了应用对网络带宽的要求。

2.3  使用缓存

这里所说的缓存包含以下2个层面:①静态资源缓存,比如图片文件、CSS 样式表、JavaScript 文件。静态资源缓存的效果最直接。通过缓存静态文件,并配合CDN(内容分发网络),可以极大地提高页面的访问速度。同时,配合合理的超期规则,可以正确、及时地更新这些静态资源文件。②引入专用的缓存服务器,例如Redis、Memcached。这类缓存服务器是通过在内存中缓存数据和对象来减少系统资源消耗巨大的读取数据库动作的次数,从而提高动态数据库驱动网站的响应速度。

2.4  使用异步方法

使用异步方法是架构高并发秒杀应用的关键。异步方法是非阻塞调用,该调用不会阻塞当前线程。具体来说,就是在服务后端使用消息队列。在同步阻塞模式下,众多用户并发访问时,数据库访问层很容易因为数据库的锁机制导致压力迅速攀升,很快宕机。使用异步处理方法,让用户提交的抢购请求首先进入队列,可以彻底解决数据库锁引起的问题。在抢购结束后,再把队列中的信息存入数据库,形成订单数据。因此,对于秒杀系统而言,流程就变成了这个样子:用户抢购商品,提交的抢购请求进入队列,用户收到抢购成功消息(有库存的情况),或者接收到抢购失败的消息(商品已经抢完了)。

实际的订单操作则在另外的“空间”存储成数据库表中的订单记录。这样的设计完美解决了数据库记录锁的问题,而且保证了数据的一致性、系统的可靠性。不过在极端场景下,因为请求过多,很可能会一瞬间将队列内存“撑爆”,系统也会陷入异常状态。简单的队列也无法满足高并发Web应用的需求,所以,推荐使用消息队列中间件软件,比如Redis、WebSphere MQ和ActiveMQ等。

3  程序设计优化

从程序设计的角度来讲,可以考虑从以下几个方面进行优化:①前后端分离。前端负责页面的UI和对应逻辑处理,后台负责业务规则的处理和计算,两者通过JSON数据进行交互。②优化页面的静态资源文件。比如采用Sprite图将许多小图片图标集成到一张大图上,合并并且压缩处理CSS样式表、JavsScript源码文件。这样的处理方式可以大大减少客户端对服务器端的Socket请求数量。③将动态网页信息静态化,结合一些JavaScript模板引擎,实现这些页面的数据动态绑定。④在数据存储层,使用缓存工具,比如Spring和Hibernate。

4  结束语

综上所述,高并发应用是一个复杂系统,它涉及到软硬件、服务器、数据库和中间件等方方面面的内容。构建高并发Web应用,基本出发点是系统分层与解耦,将系统组件化,让每个组件充分发挥其效能,同时,还可以灵活扩展。高并发Web应用采取的2个关键技术是缓存和异步方法,这2种技术可以应用于高并发Web应用的不同分层中。另外,高并发Web应用对程序的开发也提出了更多的要求。

参考文献:

[1]邵斐.面向电子商务的秒杀系统设计与实现[J].微型机与应用,2015,34(6):84-87.

[2]王亚楠,吴华瑞,黄锋.高并发Web应用系统的性能优化分析与研究[J].计算机工程与设计,2014(8):2976-2980.

[3]李军锋,何明昕.高并发Web航空票务秒杀系统的设计与实现[J].计算机工程与设计,2013,34(3):778-782.

[4]倪高鹏.基于Memcached的缓存系统设计与实现[D].大连:大连理工大学,2012.

[5]林克,罗喧,李凌,等.支持高并发处理的新型票务应用系统设计与实现[J].电信科学,2015,31(10):130-136.

[6]彭海平.电子商务平台的性能优化和高可靠性研究与实现[D].上海:上海交通大学,2007.

[7]白鑫.基于Redis的信息存储优化技术研究与应用[D].北京:北方工业大学,2014.

[8]包立辉,黄彦飞.高并发网站的架构研究及解决方案[J].计算机科学,2012,39(10):184-187.

[9]杨振灵.高并发数据库访问性能测试与制约因素分析[J].大众科技,2016,18(6):7-10.

 

〔编辑:白洁〕

————————
本文已公开发表在《科技与创新》杂志2017年第22期

投稿邮箱:kjycx@188.com / kjycxzzs @I26 .com   电话:010-88909179 / 0351-7537156
   联系地址:北京市清华大学84-84信箱 学术部     /    太原市长风东街15号 编辑部       
版权所有 | 《科技与创新》杂志编辑部       京ICP备08000836号-1

浏览次数9528

技术支持:优诚互联