基于ssM框架的高并发电子商务平台设计与实现
2019-09-10吴倩应捷韩旭
吴倩 应捷 韩旭
摘要:为了解决电子商务平台中高并发带来的难题,改善用户体验,本文融入当前业界的主流技术Nginx负载均衡、Redis缓存和MySQL数据库的主从复制等,搭建了一个具有推荐功能的电商平台。该平台整体采用SSM框架:后端使用高性能服务器Tomoat处理用户请求,形成分布式系统:数据存储采用MySQL数据库,持久存储用户数据;同时利用Luceflce和Solr完成网站搜索功能。此外,还利用基于用户的协同过滤算法实现该电商平台的推荐功能。本文设计的电子商务平台具有相应速度快、系统吞吐量大和稳定性能好的特点,能够为用户提供良好的网络购物服务。
关键词:电子商务平台,SSM,高并发,协同过滤算法
引言
随着互联网发展的浪潮,互联网产业已经成为全球经济增长的主要驱动力,而电子商务作为互联网产业中拉动消费的重要引擎,发展格外迅速。这些年来,人们在电子商务平台开发研究方向进行了大量的研究工作。2014年,杜林芝、孙小曼等人实现了基于B,s结构的智能营销系统。2016年,但牛和春明安设计了基于J2EE的财务管理系统。2017年,周锐设计了基于HIbernate和Spring MVC的旅游电子商务平台。但目前的研究还不能很好的解决高并发带来的系统瘫痪和响应时间过长等问题。本文通过研究负载均衡、数据库读写分离和主从复制等技术,旨在解决访问量急速增加时系统瘫痪问题。
1、电子商务平台总体设计方案
1.1SSM框架介绍
系统开发采用SSM框架,它由SpringMVC、Spring、MyBatis三个开源框架整合而成。SpringMVC是一个前台的控制框架,能够做到自动的值的封装。请求访问过来被Dispatch-erservlet拦截,并且调用controllet层中相应的方法,最终把结果返回给用户,并且返回相应的页面。Spring是一个轻量级的控制反转(1nversion of Control,loC)和面向切面(AspectOriented Programming,AoP)的容器框架,通過使用其独特的配置文件以及注解方式进行开发简化。Mybatis是一款轻量级的持久层框架,由ibatis演化而来。本文构建的基于SSM框架的电子商务平台调用关系如图1所示。
针对电子商务平台的高并发问题,本文利用Nginx负载均衡加上tomcat集群实现分布式系统,并且利用数据库MySql的主从复制和读写分离减轻数据库压力,对首页商品详情页数据进行Redis缓存来提高访问速度。根据用户需求,该电商平台系统总体可分为前台系统和后台系统,其具体功能模块如图2所示。
1.2数据库的设计
1.2.1后台系统数据库表结构设计
数据库表结构设计是开发数据库系统和web应用的基础,根据应用需求建立合理的数据模型。本文所涉及的商品分类表包含以下字段,首先创建商品类目表有类目,父类目ID,状态,排序号,是否为父类目,创建时间,修改时间。其次创建商品表,如商品lD,商品标题,价格,库存,条形码,图片,所属类目,状态,如表1所示。
在设计这两张表的时候考虑到只要创建主键就会自动创建索引。一般将where条件中频繁出现的字段设为索引,添加索引的意义是将字段分开,进行排序,查询速度非常快,但是索引越多越占磁盘空间。
1.2.2前台系统数据库表结构设计
本文所涉及的用户数据表包含以下字段,用于唯一标识的用户ID,用户名,密码,电话号码,邮箱。用户表对user-name、phone、email这三个字段都创建了唯一索引,保证其值唯一性。在购物车系统中建立一个复合关键字索引,支持查询用户ID以及用户ID+商品ID,并且增加几个字段来进行商品数量价格等的修改。其中购物车表结构如表2所示。
1.3系统主要功能设计
1.3.1用户注册功能
网页浏览器编码和解码方式必须一致,否则会遇到请求参数乱码问题。ServletRequest中提供了setCharacterEncod-ing方法,可以通知服务器在处理请求时使用哪个指定编码,本文采用utf-8编码。参数验证采用Hibernate validator提供的校验注解,数据合法性的验证时,将用户输入的密码进行MD5算法加密。
1.3.2推荐功能
1.3.3购物车功能
本设计将购物车系统放在后台系统中,整个系统的数据操作全部提供API,其他系统在需要时就调用这些API,不仅实现数据共享,还实现数据一致。商品添加、修改维护、删除都在后台,其他系统要数据时,只需要调用接口。
首先创建Maven工程,增加依赖的开发包:json处理工具包,jsp相关依赖,apache工具组件单元测试包,连接池,分页插件,配置tomcat插件。再创建运行菜单。添加商品到购物车时,首先判断用户是否登陆,若用户未登录则将商品保存到cooMe中,若用户已登陆则将商品加入购物车。再判断商品是否已在购物车中,若存在则数量加1,传人userld,itemId,hum执行update动作,若返回值为null则该商品不在购物车中。
1.3.4订单和支付功能
订单系统是一个单独的系统,对外提供接口,可以通过这接口来操作订单。用户在前台系统点击立即购买,它会请求后台的contrailer,controller会调用service,service就会调用订单系统的接口去下单,下单成功就返回一些数据,最后提示用户下单成功。
2、高并发解决方案
高并发是指通过设计保证系统能够同时并行处理很多请求。高并发的指标有响应时间,吞吐量,每秒查询率QPS,并发用户数等。为了应对系统高并发的状况,本文利用分布式系统以及减轻数据库压力等技术来解决。
2.1 Nginx负载均衡和Tomcats集群
Nginx(engineX)是一个高性能HTTP和反向代理服务器,Nginx负载均衡加上Tom cats集群实现分布式系统,使得应用程序、数据库、配置文件分别部署在独立的资源上,并发能力和数据存储能力会得到前所未有的提升。系统后台采用轮询的配置方法配置二台tomcat服务器,这两台服务器访问同一个数据库。本系统的按照默认的配置,如果有N个tomcat服务器,请求就会被轮流平均的分配到这N个tomcat服务器上。例如:3-t-tomcat,其具体配置为:
2.2 MySQL数据库的主从复制
本文采用一主一从的数据库主从配置方式:首先安装两个版本一致的MysQL数据库,安装完成后分别修改两个数据库的my.ini文件的端口号为3308和3309,并且修改datadir目录为制定端口的目录。分别注册两台数据库服务在/bin/目录下执行,修改注册表,配置主从数据库时两个Mysql的版本必须一致,若IO_Running和SQL_Running状态都为yes,则配置成功。
2.3 Amoeba实现数据库的读写分离
读写分离路由需要JDK的支持,首先配置JDK环境变量,其次安装并配置amoeba。设置amoeba要连接的mysql数据库端口,默认是3306,设置缺省的数据库,当连接amoeba时,操作表必须显示制定的數据库名。设置需要连接的数据库服务器的账号和密码。在dbServer.xml中设置后端分别用于读写的数据库名,本系统将主库设置成专门用于写的数据库,从库被配置成专门用来读的数据库。
2.4 Redis实现商品详情页缓存
商品详情页面的数据基本不变,并且访问最频繁,详情页添加缓存可解决高并发带来的问题,本系统设置页面缓存功能流程图如图3所示,但是因为在首次访问是缓存中没有数据,只能从数据库中查询并放入缓存中,经过测试发现速度是有很大的提升,原来的响应时间为200ms左右,加上缓存后响应时间在40ms左右。
3、实验结果
3.1系统运行结果
本系统采用的服务器CPU参数为:1processor,3.3GHZ,i7。内存容量为16GB。在前台系统中,用户可以访问商城首界面,注册和登录账户,查看不同分类下的商品,查询并浏览商品的详细信息,将商品加入购物车,最终提交订单,并且可以查询订单、修改订单状态。系统的搜索功能和推荐功能如图4所示。
在前台系统中,用户可以访问商城首界面,注册和登录账户,查看不同分类下的商品,查询并浏览商品的详细信息,将商品加入购物车,最终提交订单,并且可以查询订单、修改订单状态。其注册功能效果图如图5所示。
当用户决定要购买所选定商品时,点击购物车,去结算并且输入收件人姓名以及地址就可以完成下单。生成订单以后可以选择删除订单或者在线支付,本系统的在线支付功能通过第三方交易平台易宝实现。订单界面运行效果图如图6所示。
本文设计的后台能够实现商品分类管理、商品信息管理、商品规格属性、注册用户管理以及CMS内容发布管理等功能。其中商品分类树形结构图和信息管理运行图如图7所示,主要功能为商品的上架和下架,新增商品时点击选择类目,弹出窗口按照商品分类树形结构图选择商品类目。
3.2系统兼容性测试结果
本系统各子系统都为网站系统,众所周知,因为浏览器版本、类型、内核等不一样可能会导致相同的页面在不同的浏览器中显示不同的结果。所以测试要检查全部种类内核的浏览器,并给出不能够适配浏览器的解决方案。测试结果如表3所示:
通过以上测试,在国内常用的浏览器上对电商系统的前台系统页面做检查可得出结论:产品在各个浏览器中均可正常显示,并且js代码和CSS样式均能正常运行。
4、结语
本文研究了网站搭建的理论知识并结合业界较新的技术,针对当前电子商务平台的高并发情况设计并实现了一个功能完善且十分稳定的电商网站,该电商网站能够很好的完成日常网上购物的相关功能。相比与其他电商平台而言,该电商平台最突出的特点就是能够抵抗高并发,在访问量瞬间增加时不会出现系统崩溃或者迟迟刷新不出界面的情况,并且通过实践证明了该平台的稳定性,能达到日常生活需求并且能投入使用。