啊,受不了了,连续通宵两个晚上了,还是上线失败,坑太多了!填都填不完啊。
项目说明:一个老项目,人员已经换了好几拨了,只在SVN上有某个版本的源码,其他啥也没有,本地和测试环境完全不具备运行环境,根本跑不起来,但就是这样的项目居然需要增加需求(谁让人家没给钱呢),增加的需求是另一个项目已经完成的,他俩架构基本一样,所以想当然的拿过来直接使用(时间太紧了,就给了一周)。要求很低只要本地编译不报错就可以,然后直接到生产上测试。
结合这个项目的性质,也就注定了上线的不平凡,必然是步步维艰啊,折腾的要死。
遇到的天坑:
- 第一个遇到的坑就是增量替换上代码后,启动服务,输出一些日志就卡住不动换了,也不报错,但前台应用就是报404,真是无从下手啊。网络啥的检测都正常。
后来检查log4j日志级别,发现是ERROR,然后将其修改为DEBUG,跟踪日志才发现,服务向Zookeeper上注册后,就一直处于等待同步状态上了,该信息打印是DEBUG的,所以之前没有打印出来,立马怀疑zookeeper集群崩溃了,一看果然是,重新启动居然会出现两个leader,弄半天后终于解决了。
建议:测试还是要修改为Debug级别,上线后修改为INFO。 - JDK编译版本不一致,生产和开发使用的版本不一致,导致报错Unresolved。
- 最让人火大的是,开发版的源码和生产上使用的不一致,导致无法预估到底哪些不同。出现一些莫名奇妙的错误。
例如:本地代码显示某些配置是读取的Redis缓存,但前台就是报某个数据读取不到,但是数据库中也配置了,缓存也刷新了啊。但就是报错,折腾了半天,最后实战不知道啥原因了,拿下生产上class一看,我去,尼玛居然是读取的某个配置文件,同样的类名和方法,实现居然完全不一样,这不是闹玩吗,太扎心了。
产生原因:例如有某个需求,开发已经完成了,但是由于某种原因不上线了。下次又来一需求,和上次那个有一些公共的类,直接使用的上次的,上线时就会导致生产上没有上次需求的类。
建议:做好版本管理,必须保留一个版本是和生产上同步的,如上面例子,某个需求不上线了,和生产同步的版本也必须不能上。最好使用git代替svn,git切换分支,创建分支相对方便。 - 最让人受不了的,生产上启动停止服务太慢了!!,平均一次半个小时,像这次需要在生产上测试的,真是发现个问题,可能2秒修改好了,但是启动停止要使用半个小时,1天时间,有2/3是在等待服务启动。真的很恼火了,浪费时间行不出活,然后再遇上个破网,真是想打人啊。服务器局烂,网破,要啥啥不行。
建议:项目大了,最好按业务分开,做成微服务,启停时间快。如果非要单体应用,那就买个好服务器,换个超快的网!!!
总结,别老是这么不按常理出牌,啥都没有还上需求,当然大背景主要是前期人员没有做好足够的交接,没有足够的保存源码,环境等,但是国内就是这样,努力从自身做起吧。
最后来句脏话发泄下吧:FUCK!!!