Java电商项目总结(一)

前言

最近快到毕业答辩的时候,我自己的论文也完成了查重,并且已经提交到知网平台。自己做的是一个电商项目,基本的功能都已实现。当时为了偷懒,直接是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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,829评论 1 331
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,603评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,846评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,600评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,780评论 3 272
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,695评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,136评论 2 293
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,862评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,453评论 0 229
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,942评论 2 233
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,347评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,790评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,293评论 3 221
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,839评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,448评论 0 181
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,564评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,623评论 2 249