###前言 最近快到毕业答辩的时候,我自己的论文也完成了查重,并且已经提交到知网平台。自己做的是一个电商项目,基本的功能都已实现。当时为了偷懒,直接是copy的慕课网上Spring电商的一个项目,自己在此基础改了几个星期,真心觉得代码写的烂。代码很多程度上违反了迪米特,合成复用,依赖倒置等原则。整体架构距离一致性,可用性,容错性有很大的差距。后期有时间,我会用Spring Cloud拆分整体模块,代码重构。

###项目存在的问题

  • 1.20张表都是基础的CRUD。表与表之间的关系没有通过连接或者是嵌套进行关联,而是很大程序依赖去lambda代码去进行连接,导致效率很低。

  • 2.使用Timer进行任务调度不当(没有合理设置initialDelay时间或者是没有设置异步),会造成Eden区和Survivor区使用率太高,CPU占有率太高,严重影响性能,造成Tomcat响应速度很慢。建议用ScheduledExecutorService代替Timer,另外要注意newScheduledThreadPool的最大线程数是Integer.MAX_VALUE。使用的工作队列是DelayedWorkQueue,它是一个无界队列,会一直去消耗CPU性能直到殆尽。如果不了解线程池,最好手动创建。

  • 3.没有做前后端分离,前端路由过度依赖后端Controller的转发。

  • 4.自定义封装BaseMyBatisDAO,但是RowBounds分页功能效率很低,建议使用通用Mapper和PageHelper进行分页和排序。

  • 5.没有统一进行返回码封装和对异常的封装以及处理。

  • 6.重复代码太多,其实20张表的基础代码(Service层、Controller层、DAO层)完成可以用自动化框架生成。没必要把时间花在这些无意义的事情上,我们需要更关注于业务逻辑。

  • 7.图片服务器暂时是用Tomcat。明显不是一个好的选择,应该考虑七牛云或者搭建FastDFS。

  • 8.使用Redis缓存,无脑瞎B使用。设置的KEY也没有设置缓存失效时间。很多程度上没有考虑缓存穿透,缓存雪崩,缓存击穿这些场景,没有考虑到缓存数据和数据库里面的数据一致性的问题。

###秒杀业务分析 在工作空余时间,也看了慕课网上关于高并发秒杀业务的解决方案,收货颇多。

  • 1.商品详情页是产生高并发的一个点。中小型企业一般采用Nginx+页面静态化就能解决。我们可以把静态界面加入到CDN缓存中。CDN可以加速用户获取数据的速度,一般部署再离用户最近的网络节点上。

  • 2.关于秒杀操作,我们无法去用CDN缓存。后端使用缓存比较困难,存在库存一致性的问题。在热度商品的秒杀上,存在一行数据竞争的情况。

  • 3.关于秒杀地址暴露,我们也无法去用CDN缓存。适合用Redis进行缓存商品,一致性维护成本低。Redis和Mysql数据一致性维护可以采用超时穿透/主动更新策略。

  • 4.关于获取秒杀时间的获取,其实不用优化。Java访问一次内存是10ns,而1秒等于=10亿ns。相当我1s的时间进行1亿次的new Date()。

  • 5.比较成熟的解决方案: 原子计数器->Redis,记录行为消息->分布式MQ,消费消息并落地->MySQL。但是存在数据一致性和回滚问题,幂等性难以保证(会造成重复秒杀),这种架构不适合新手架构。

  • 6.经过Jmeter压力测试,一条update商品库存语句的QPS是4W。一般用户进行秒杀操作,会受到网络延迟+GC的串行化阻塞。一般来说用户执行秒杀操作,正常的业务来说先执行减少商品库存操作,再插入用户购买明细。但是update同一行商品记录会造成行级锁。行级数会在commit事务后之后释放。在并发量集中的秒杀操作,这些操作会造成阻塞,因此我们优化的方向是减少行级锁持有的时间。我们可以先执行插入用户购买明细操作,然后更新库存操作。因为insert可以并行!

  • 7.关于秒杀操作,我们可以把秒杀的业务逻辑写到MySQL端(也就是存储过程),整个事务在MySQL端完成,优化网络延迟和GC干扰。

优化总结:

  • 1.前端控制:合理暴露秒杀地址,秒杀按钮防重复。
  • 2.后端控制:动静态数据分离,CDN缓存,后端缓存,行级锁竞争优化,减少事务时间。

###尾言 没有什么比学习和成长更为重要的事情了。 电商项目地址:https://github.com/cmazxiaoma/groupon 电商秒杀业务项目地址:https://github.com/cmazxiaoma/mallSeckill

Java电商毕业设计总结(一)相关推荐

  1. Java电商平台-电商订单系统全解析

    说明:Java电商平台-电商订单系统全解析主要讲解OMS的内容,设计,开发,架构等知识 今天分享将会分为以下三个环节来阐述: 1.订单系统的介绍 2.订单系统的解构 3.垂直电商订单系统设计思路 一. ...

  2. JAVA电商秒杀实战(三)

    JAVA电商秒杀实战(三)- - 实现第三方登录 QQ登录 短信验证码登录 QQ登录 首先导入所需要的相关依赖: <dependency><groupId>org.apache ...

  3. 【session】Java电商平台开发技能图谱,探秘双十一百万PV

    您将学习 Java电商平台开发技能图谱,探秘双十一百万PV 分享内容 企业级Java开发技能图谱 从宏观到微观,Java到底怎么学 为了支撑双十一,我们对Java程序做了什么 你将认识 热爱分享的常乐 ...

  4. 五款开发Java电商系统的工具

    Java电商系统由于其稳定性和后台处理数据效率高的优势而备受运营者欢迎,Java电商系统还因为库的丰富性以及开发的便利性收受到开发者的青睐,今天这里介绍5款java网店系统的开发工具. 1.即开即用的 ...

  5. JAVA电商 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城

    JAVA电商 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城 1. 鸿鹄Cloud架构清单 2. Commonservice(通用服务) 通用服务: ...

  6. 慕课网,乐字节 Java电商秒杀项目

    慕课网.乐字节Java电商秒杀项目 技术点介绍: 前端:Thymeleaf,Bootstrap,Jquerry 后端:SpringBoot,MybatisPlus,Lombok 中间件:RabbitM ...

  7. Java 电商订单管理设计,基于Java的电商网站的设计与实现

    基于Java的电商网站的设计与实现  (获取作品请联系在线客服) 温馨提示:已经在本站下定的(原创)毕业设计(毕业论文)将不会再次出售!请你放心购买! 拟定毕业论文(设计)题目基于Java的电商网站的 ...

  8. mybatis事物如何避免脏读_新手指南:如何从java电商小白到秒杀大咖

    前言 刚从事java开发的同学很多时间会直接接触一些简单的ssm框架,使用spring mvc外加mybatis实现一个基本的web项目,打个war包部署上线.跟上时代潮流的会使用spring boo ...

  9. java电商网站建设教程_java开发电商系统实战开发视频教程

    JAVA 当前位置:主页 > 编程教程 > JAVA > java开发电商系统实战开发视频教程 java开发电商系统实战开发视频教程 教程大小:4GB   发布时间:2018-07- ...

最新文章

  1. (C++)输入输出字符矩阵(二维字符数组)的三种方法
  2. Android相关面试题---初识
  3. 中国半挂车行业投资前景预测与十四五投资战略规划分析报告2021年版
  4. Dojo 如何测试 widget
  5. centos 卸载_CentOS安装mysql
  6. 基础编程题目集 7-3 逆序的三位数 (10 分)
  7. ActionScript 3.0
  8. hibernate的一级缓存问题
  9. 计算机wifi无法打开,mac电脑wifi无法打开怎么解决-mac电脑wifi无法打开解决教程 - 河东软件园...
  10. 正版python软件多少钱-有奖|这 18 个好用的正版软件、热门的付费教程限时超低价了...
  11. 如何优化内存?Unity中的内存种类;冯乐乐的总结的优化技术
  12. 计算机应用公式基础教学教案,《终稿[定稿]大学计算机应用基础全册教案版》...
  13. 运动目标检测 光流法
  14. python拨号_Python进行ADSL拨号
  15. Linux 功能强大的 路由器,一款功能强大的路由器系统-软路由-RouterOS
  16. UGUI优化:使用镜像图片
  17. 树莓派 Raspberry 4B 刷机、上网、录音外设、文件传输、电脑投屏问题汇总
  18. 圆圈中最后剩下的数字 ----《剑指offer》面试题45
  19. 输入多组字符数组c语言,c语言怎样能连续输入多个一维数组
  20. 推荐四个Flutter重磅开源APP项目!

热门文章

  1. 案例研究丨神策数据在多项目、多网络场景下使用JumpServer堡垒机
  2. 来自英特尔CEO帕特·基辛格的一封信
  3. 2020年升降机司机试题及答案及升降机司机操作证考试
  4. 比较全面的DHCP配置
  5. 花生壳盒子转发内网Dell服务器的iDRAC远程管理控制台
  6. mysql set foreign key_Mysql 外键(FOREIGN KEY)使用注意事项
  7. Ubuntu18.04系统下charm-crypto0.5的安装以及测试
  8. Require.js用法
  9. GITHUB 如何设置token
  10. 数组-接口1-使用实例3(存在重复元素)