基于Redis的高并发秒杀系统的研究与实现

|

孙景玉,孙 浩,高婷玉,秦雯波,陈虹云

(南通理工学院 江苏 南通 226000)

随着电子商务的普及,人们的购物方式、消费方式和生活方式发生了翻天覆地的改变,手机或是电脑可以随时随地使用互联网,电子商务交易量也因此翻了几倍。而电商平台通过跨地域的低价销售模式,在交易的过程中提供专业服务,不仅有效地降低了成本,还吸引了大量的客户[1]。各大电商平台所推出的秒杀活动更是以低廉的价格、有限的商品和超短的销售时间吸引消费者的注意,无形中增加顾客的购买欲望,如广为熟知的淘宝、京东、拼多多等大型电商平台,为了提高客户的体验,增强平台的高可用性,吸收新用户、提高收益率,推出低价的“秒杀”业务,短时间内为电商平台带来巨大流量以及消费收益,因此秒杀活动越来越受电商平台的重视。但是,电商平台的秒杀系统需要面对短时间内激增的流量压力、网络作弊(如秒杀机器人)和线程超卖等问题[2]。对于大型电商企业而言,由于自身资金雄厚,可以选择自主研发文件存储系统、缓存系统以及负载均衡系统,投入大量人力、物力和财力,从软件、硬件各个方面去解决这些问题。对于中小型电商平台来说,在面对限时促销、秒杀等这些高并发场景的时候,如果不对系统做出性能优化处理,那么系统就会轻而易举地陷入异常状态,从而造成收益损失[3]。

由此看来,高效准确地处理高并发请求,优化用户使用体验,并且向客户提供专业、可靠以及准确的服务,是目前各大电商平台亟待解决的问题。

鉴于此,文章从现实需求出发,通过研究秒杀活动的高并发以及线程超卖等问题,对秒杀进行性能优化,设计出高性能的秒杀系统。文章采用以下关键技术:

1.1 Redis缓存方案

为了提高页面的响应速度,以及让系统能够适应高并发的场景,需要设计使用缓存方案。页面优化方面主要使用页面缓存+URL缓存+对象缓存。开发的瓶颈在于数据库,需要想办法减少对数据库的访问,所以需要使用缓存,通过各种不同粒度的缓存细化方案,提高响应速度。此外可以让页面静态化,将HTML缓存到客户端。Redis是一个基于内存操作、运行速度非常快、读写性能极高的非关系型数据库,可以存储键(key)与多种值(value)之间的映射,支持多种数据结构的存储如list、set、zset、hash等[4]。Redis的强大之处就是它具有极高的读写性能,根据官方资料显示,读取的速度可达110 000次/s,写的速度可达81 000次/s。同时,Redis的所有操作都是原子性的,要么全部执行成功,要么失败回滚[5]。单个操作是原子性的,多个操作也支持事务,并且完全开源免费。

1.2 消息队列

为了解决不同业务流程之间的通信,引入了第三方消息中间件,实现系统的异步下单、流量削峰,提高系统响应速度和运行效率,进一步提高用户体验感。消息中间件是基于队列与消息传递技术,在网络环境中为应用系统提供异步、可靠的消息传输的支撑性软件系统[6]。本系统使用的是RabbitMQ作为第三方消息中间件,整合SpringBoot框架,具有一定的独立性,RabbitMQ也是市面上比较流行的一款消息中间件,是基于AMQP协议的开源消息中间件,具有很好的稳定性、数据一致性以及可靠性,整合SpringBoot框架开发后,可以非常方便地面向消息中间件进行对应的开发。

1.3 轻量级开发框架技术

采用当前互联网公司常用的前后端分离协作的开发方式,结合主流的SpringBoot、Mybatis、SpringMVC轻量级的胶水框架,实现系统前、后端的分别开发。针对Spring缺点进行改善和优化,遵循约定大于配置的思想,让开发者不再需要在业务逻辑和配置之间进行思维的切换,可以专心于业务逻辑的编写,从而大大提高开发的效率[7-8]。

1.4 加密技术

用户以及商家信息数据的安全对于电商系统来说是个极其重要的问题。如果系统安全问题不能保证,就会给用户以及商家带来不必要的损失,通过隐藏秒杀接口地址,秒杀接口防刷限流等一系列操作来对系统进行安全优化,防止非法用户闯入以及非法请求破坏系统,造成不可挽回的损失。同时使用MD5进行二次加密,第一次加密用户密码,第二次采用密码“加盐”,也就是在加密完密码之后,在密码的不同位置插入不同的值,再进行一次MD5加密,确保用户信息安全。

电商秒杀系统包括秒杀商城前台系统以及电商后台管理系统。使用角色是参与秒杀活动的用户以及商城后台的管理员。对于秒杀商城前台系统,不但要实用、操作简便,以方便用户使用,还要可以满足高并发场景下的秒杀业务需求,防止数据库宕机或者线程超卖,给商家以及平台带来损失。而电商后台管理系统,是针对商城管理人员所设计的,主要用于对用户信息、商品信息、秒杀商品以及订单信息的管理。通过后台管理系统可以实现商家对店铺的管理,直观地体现出每日订单量、总销售量以及用户量,能够更好地协助管理者对商城的管理。

针对秒杀问题的解决方案,文章设计并实现一款电商秒杀系统进行验证。系统分为秒杀前台系统和管理后台系统。秒杀前台系统的主要功能包括登录、浏览商品、查看商品详细信息(包含秒杀功能)、生成订单、支付订单。后台管理系统的功能包括商品管理、秒杀商品管理、秒杀用户管理、秒杀订单管理、管理员管理等。系统功能结构设计图如图1、图2所示。

图1 用户端功能设计图

图2 管理端功能设计图

3.1 用户端功能设计

(1)注册、登录。通过输入用户名(手机号)、密码,进行登录。若没有账号,则需要到注册界面输入手机号码、密码以及确认密码进行注册,注册成功后再去登录。

(2)商品浏览。展示参与秒杀活动的商品信息,包括商品名称、商品图片和商品价格、秒杀价格和商品库存。

(3)秒杀商品详情。商品详情页面可以展示商品名称、商品图片、秒杀开始时间、秒杀状态(未开始/进行中/已结束)、商品原价、秒杀价格、库存数量、验证码以及秒杀按钮。秒杀流程图如图3所示。

图3 秒杀流程图

(4)订单详情。主要展示订单的信息,包括商品名称、商品图片、订单原价、下单时间、订单状态、收货人、收货地址。

3.2 管理员端功能设计

(1)管理员登录/退出。

(2)商品管理。管理员可以对商城的商品进行操作,可以增加商品、修改商品信息、删除商品、查询商品。

(3)用户管理。管理员可以查看用户列表,可以查看到用户的手机号、用户名、最近一次的登录时间、登录次数以及用户状态。管理员也可以修改用户的信息、可以根据用户的手机号搜索用户。

(4)秒杀管理。管理员可以添加参与秒杀活动的商品,或者删除已经秒杀结束的商品。可以对秒杀商品的信息进行修改,对秒杀商品进行查询。

(5)订单管理。管理员可以对订单信息、秒杀订单信息进行修改,也可以根据手机号查询用户的订单。

(6)销售统计。管理员登录后在控制台可以查看销售总额、订单总数、用户数量。

当软件开发到一定程度时,要对其自身性能进行测试,从而有效发现软件中存有的缺陷,使软件产品自身品质得到有效提升,并对其功能进行不断完善[9]。性能测试主要基于静态与动态资源的程序,如静态资源文件、Servlet JAVA对象、数据库、FTP服务器等[10]。文章使用Jmeter工具对电商秒杀系统的秒杀接口进行压力测试,分别记录没做优化之前与做了优化之后秒杀接口的QPS(吞吐量)。步骤如下:

(1)生成脚本。编写JAVA代码使用JDBC的方式连接数据库,生成对应数据,添加线程组基于对性能测试用例的分析数据。

(2)创建线程组,设置线程数。新建一个线程组,设置线程数为1 000,循环次数10次。

(3)添加HTTP请求,添加聚合报告。依次选择添加、取样器、HTTP请求,并且添加一个聚合报告来查看系统QPS(吞吐量)。

(4)新建CSV Data,导入脚本。选择新建CSV Data选项,将录制好的脚本token.txt导入,点击开始,完成之后可以查看聚合报告。

秒杀详情界面如图4所示,性能测试得出的聚合报告如图5、图6所示。

图5 未优化前的结果

图6 优化后的结果

对比两次压测结果可以看出优化后吞吐量明显提升,系统的抗并发能力明显提高。

文章研究了秒杀活动的高并发场景特点,提出了基于Redis的缓存方案,对秒杀接口进行优化、页面静态化以及简化数据库设计,设计出了高性能的秒杀系统。不仅让电商系统可以承受住秒杀活动所带来的高并发量,同时还能解决线程超卖问题、访问超时、服务瘫痪等问题,有效地维护商家利益,进而让用户拥有更好的购物体验。

猜你喜欢 秒杀线程管理员 我是小小午餐管理员儿童时代·快乐苗苗(2022年2期)2022-04-19基于C#线程实验探究山西电子技术(2021年3期)2021-06-28我是图书管理员少先队活动(2020年8期)2020-12-18我是图书管理员少先队活动(2020年7期)2020-12-18可疑的管理员故事作文·高年级(2020年2期)2020-02-24基于国产化环境的线程池模型研究与实现网络安全技术与应用(2020年1期)2020-01-07线程池调度对服务器性能影响的研究*通信技术(2019年9期)2019-10-09文人吐槽,秒杀段子手百家讲坛(蓝版)(2017年3期)2017-09-04秒杀党的生活(黑龙江)(2016年12期)2016-12-15秒杀一切的街头爆笑图爆笑show(2014年9期)2014-12-20

推荐访问:并发 研究 系统