码迷,mamicode.com
首页 > 其他好文 > 详细

在线抢购平台_课程设计报告

时间:2019-06-15 23:07:58      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:开发   ant   设计项目   成本   路由   tom   运维   前端部署   伪造   

 

 

第1章 概述

1.1 课程设计的核心任务

  1. 需求分析、可行性分析、E-R图、关系图、系统架构图等的编写
  2. 总体设计、详细设计、代码实现
  3. 项目测试

本系统: 后端采用SSM(Spring+SpringMVC+MyBatis)的架构,实现RESTful API 接口,前端采用react进行前后端分离设计,完成商品在线系统。

1.2 课程设计工作进程

 

已经完成,用户登录注册,商品的添加,活动促销的添加,商品的查看与秒杀。

后续继续完成,订单页面的优化与完成,针对高并发下单任务的处理,针对用户重复秒杀商品的处理,加入redis 进行数据缓存,使得系统处理更加高效。

第2章 
需求分析

2.1 用户需求

2.1.1 业务需求

  1. 电商平台经常进行搞活动,此平台有很大的使用地方。
  2. 低廉的价格,昂贵的商品,会吸引很多人参与。
  3. 从众心理以及贪小便宜的心理使得平台传播广,知名度更高。
  4. 前后台分离模式,前端采用SPA应用,使得用户体验更加友好。
  5. 秒杀时网站的访问量大增,服务器极易容易崩溃。
  6. 秒杀时购买的请求数量远大于库存,只有部分用户能够成功;
  7. 活动种类丰富,容易造成数据错乱,用户获得错误的页面;

2.1.2 特殊需求

2.2 可行性分析

2.2.1 技术可行性

A . 采用前后端分离的架构,前端采用react完成SPA单页应用,即使后端压力过大,也不会影响前端页面的显示,前端做好合理的loading动画,使得用户会有更好的体验。

  1. 后端采用 SSM 的架构模式,通过现在市面上或者成熟的企业的架构方法,使得开发成本和运营成本大大降低。
  2. 数据库采用MySQL,关系型数据库比起非关系性数据库有更好的纵向能力,使得数据更加完善规范,降低服务器处理数据出错的概率,大大提高系统的稳定性。
  3. 前端采用NGINX托管,采用反向代理的方式,讲请求代理到服务器的应用端口上面,隐藏服务器端接口对外的映射,降低被黑客攻击的风险。使得运营成本大大降低。
  4. 采用此模式。服务器压力已经相比起传统的WEB应用大大降低,因此可以大大降低服务器的要求。
  5. 前后端的分离,静态资源的托管,服务端的开发更加简洁,同时项目后期迭代更加方便快速。
  6. 目前测试项目放在腾讯云10元学生机上,表现效果依然良好,估计如果是具有很大的并发量,对服务器的升级也不是很多,对带宽的要求也不是很大。同时服务器的运维成本比起以前的方式大幅度降低。

2.2.2 经济可行性

 

2.3 系统功能

  1. 登录注册功能

客户可以通过此接口进行账户的登录与注册,目前与手机短信验证码的开发与联调正在进行当中。为了项目的整体安全考虑,不提供管理员注册的接口,如果需要进行管理账户的注册,应该先进行普通账号的注册,然后通过数据库修改用户权限。

  1. 商品的查看

此部分可以对商品的信息进行查看和修改,看查看当前所有的商品,包括正在进行活动的商品。针对管理员用户,还有针对对商品进行添加后修改的操作。

  1. 活动的开启

针对管理用户可以对某个商品进行某一段时间的活动开启,设计活动的持续时间已经商品的优惠价格。

  1. 商品的购买

针对非活动商品,用户只能进行原价的购买,针对打折的商品,可以进行打折过后的价格进行购买,如果购买用户量过大,后端采用读写事务锁的方式进行数据的读写,能处理并发数目,针对更大流量的高并发处理,目前正在进行当中。

第3章 概要设计

3.1 系统设计模式

系统采用前后端分离模式,前端采用react web框架和antd ui样式库进行构建,通过axios进行api接口的访问。后端采用ssm的架构模式完成对数据的操作,并向前端提供访问接口,返回json的数据进行前后端交互。

 

3.2 系统总体结构

整体架构图

 技术图片

 

 

添加商品流程:

技术图片

 

 

前端抢购流程:

 技术图片

 

后端处理数据:

 

技术图片

 

 

 

3.3 持久层设计

数据库E-R

 技术图片

 

 

 

 

 

 

 

第4章 
详细设计与系统实现

4.1 业务逻辑设计与实现

用户访问网址,通过nginx让浏览器下载我们的web资源。由于前端是一个SPA应用,前端会根据当前访问的URL来进行页面的显示,每个页面,会根据页面的不同或者用户的点击不同,向后端发送http请求,后端根据请求的URL和参数进行数据的处理,然后返回JSON数据,前端通过JSON数据的不同,渲染数据到页面或者提供错误信息。

前端API请求配置:

 技术图片

 

请求配置:

技术图片

 

 4.2 表现层设计与实现

前后端分离,前端采用了React,在前端已经做好了部分的路由控制,可以有效的避免后端提供页面需要去判别用户权限,能减轻后端的压力。其次采用了antdui库,使得前端样式统一,添加数据方便,格式固定,前端主动提供表单的验证,可以减少表单填写错误的来回请求,大大的提高用户的舒适度。

前端路由控制:

 技术图片

 

登录时前端进行表单校验:

 技术图片

 

登录页面:

技术图片

 

 

注册页面:

 

 技术图片

 

商品列表页:

 技术图片

 

商品详情页:

 技术图片

 

添加商品:

 

技术图片

 

添加抢购活动:

 技术图片

 

4.3 项目难点及解决方案

针对高并发的处理:由于高并发,可能会造成服务器处理异常,CPU处理缓慢,最终导致有部分用户不能正常的访问页面,所以采用了前端端分离的模式,前端采用nginx做静态资源的分发。这样与后端数据处理不在一个进程中,即使后端并发数量过大造成系统缓慢,但是用户仍然可以看到前端页面,不影响用户的操作。其次,采用前后端分离的模式,后端不用去渲染模板,也能大大提高系统的复杂读,提高高可用性。

把商品库存的减少和订单的创建写到一个事务里面,从而实现并发数目的处理,解决超卖现象。

4.4 典型代码片段与设计过程

 

 

 

 

 

 

第5章 
测试与部署

5.1 系统测试

后端测试:

  1. 通过写脚本的方式,生成一定的并发量,看系统的处理情况,已经当前系统的各个硬件的状态。
  2. 是否存在xss攻击漏洞。√
  3. 授权的token是否可以伪造,过期后是否已经不能用。√
  4. 查看请求的返回结构体,是否和预期的一致。
  5. 不按规定传递参数访问接口,观看数据的拦截情况。

前端测试:

  1. 多个脚本同时获取我们的前端页面,能否正常显示,速度是多块。
  2. 前端的路由拦截是否已经完善。
  3. 前端是否已经过滤xss的攻击,以及是否能正常显示后端的错误信息。√

结论:本次测试,虽然各项都已经通过,但是在部分测试项里面,反馈的情况不是很好,如前端加载过慢,可能这和服务器的带宽有很大的联系,其次由于技术限制,对整个系统的更高级的安全测试没有进行。

5.2 系统部署

部署环境:

服务器: 腾讯云10元学生机,12G1M带宽

操作系统: centos 7

服务器框架: nginx 1.12.2

Java 环境: java 1.8.

MySQL版本: 8.0.12

由于本项目是前后端分离,后端采用spring boot编写,所以后端代码没有部署在传统的tomcat上面,直接打包成jar包,然后部署。

后端部署:

  1. 在本地通过mvn命令,将项目打包成jar包。
  2. 通过ftp工具将jar包上传到服务器。
  3. 在服务器上安装我们需要的Java环境和MySQL环境,并成功启动mysql,进入mysql控制台,加载我们提前编写好的sql语句。
  4. 通过命令 java -jar ./miaosha-server.jar &命令,后台允许我们的代码。
  5. 在服务器上通过,curl 127.0.0.1:8080 判断是否有消息从而判断我们部署后端代码是否成功。

前端部署:

  1. 由于本项目是采用react开发,需要在本地通过 npm run build打包成静态文件。
  2. 在服务器上安装好我们需要的 nginx版本。
  3. 将前端打包好的代码上传到服务器。
  4. 修改服务器的nginx配置,加载我们的前端代码,并配置反向代理的地址。

技术图片

 

 

  1. 在我们的域名服务商哪里,添加对二级域名的解析。
  2. 为了服务器的安全,这里我们开启服务器的防火墙,只想外暴露80443端口。
  3. 最后,通过访问我们配置好的二级域名:javaweb.lcylove.cn 便可以正常的访问到我们的项目。

 

第6章 课程设计总结

6.1 系统基本软件度量数据

系统基本上完成了目前能完成的功能,比如登录注册,商品的添加,活动的添加,商品的预览以及对于普通商品的下单,对于活动商品的请购。针对抢购,从前端到后端,都具有相关的函数或者数据进行判别,从而实现系统的稳定高效。

6.2 课程设计项目的收获与展望

本次项目学会了很多东西,首先肯定是2个人一起小组完成,采用了github做了代码库,这样每个人的代码都暴露在了另外一个人的眼前,从而可以相互的了解双方代码的完成的进度,以及对方代码编写的质量,从而可以及时的提醒对方代码有问题,或者不应该这么写,其次就是看别人的代码也是一种提升。

本次我们的项目是一个在线抢购平台的项目,虽然目前已经完成了主要代码的编写,但是针对部分问题还是没有解决,目前只能处理一部分的并发量,如果并发数量过高,那么系统有部分的问题。后续应该会采用redis进行并发的处理,其次就是由于时间关系,部分功能也没有完善,包括前端页面管理员和普通用户的页面也耦合在一起,后期可以进行拆分。

其次,在完成项目的时候还是比较轻松的,但是写文档和测试也是一种学问,个人感觉比写代码难多了,出现了很多问题,希望后面能改正。

 

在线抢购平台_课程设计报告

标签:开发   ant   设计项目   成本   路由   tom   运维   前端部署   伪造   

原文地址:https://www.cnblogs.com/pawn2018/p/11029201.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!