电商项目三年回顾
关于电商项目三年的一个回顾
最后更新于
关于电商项目三年的一个回顾
最后更新于
虽说这个电商项目不是全程参与的,中间有段时间参加到公司的其他项目当中,但是最后当初的项目经理走了,项目最后竟然落到我的手里,一坨坨陈年代码浮现在我的眼前。
项目整理部署在一个服务器上,对外只通过NGINX暴露80、443端口,通过NGINX将请求你转发到对应的应用上,用于历史原因服务器上原本安装的jdk版本为1.7,我在接收后为了保证项目商城主要业务的稳定,这部分的部署方式不做调整,依旧通过Redis存储session,保障2台web服务器session一致。
在不影响原有系统运行的情况下,服务器全局JDK版本不变,对于商城的后台管理系统无需使用负载均衡,所以将后台管理系统单独部署,重新部署tomcat,该tomcat指定JDK为1.8,对外的系统访问地址不变,通过NGINX配置的调整,将请求转发到新的tomcat端口。
项目中存在定时任务需要执行,一些自动化的任务通过autowork项目执行,负载均衡需要解决的定时任务重复执行的问题通过autowork解决。
使用NGINX作为图片服务器,所有图片上传到指定文件夹,通过NGINX提供一个图片的web服务。
三年之中出现了大概有三次的生产环境事故,这三次事故都是数据库服务器CPU异常,应用服务器的异常倒是比较少,代码虽然丑,但是也只是有些内存溢出,基于运维到目前的运维问题,总结了一下几点:
每张表尽可能的设置唯一主键,如果不能设置唯一主键,那就设置联合主键,对于像在用户表中的手机号码,微信openid之类的必然唯一的数据,设置唯一索引;
如果是电商项目还是减少存储过程的使用吧!关于存储过程的维护会是个很大的问题,尽可能的通过在mybatis中编写SQL语句实现;
针对于SpringMVC的电商项目,每个DAO方法都应该是单一职能的,尽量保证一个功能复杂的DAO方法(修改多个字段数据的DAO方法)只被一处引用,如果只修改一个字段的数据,则需要取一个好的DAO方法名称;
一定要设置连接池的大小,三次生产环境的数据库服务器CPU异常,其实都是数据库连接过多导致的;
注意事务的使用,查询是不需要使用事务的,事务是为了使数据的一致性得到保证,在对多个数据表进行数据操作时,为了保证数据的一致性需要使用事务,事务的使用会导致数据库服务器CPU上升。
生产环境的测试是一个大问题,现在有很多的手段来保证生产环境与开发环境的一致性,但是我们还是会在很多时候听到这样的话“我本地是好的”,但是生产环境都是正式数据,务必要十分小心,关于生产环境的测试应该从项目的开发之初就应该考虑到的问题。
测试环境与正式环境的一致性问题,很多问题存在于特定的环境之下, 目前的做法是在生产环境上部署一套测试环境;
设置特殊的账号用于测试,有些关于支付的设置只在生产环境才有;
关于项目全局变量的配置,目前看到的最好的解决方案是springboot的解决方案,各个环境的配置变量写在各个文件中就可以了。