惨痛的上线经历

啊,受不了了,连续通宵两个晚上了,还是上线失败,坑太多了!填都填不完啊。

项目说明:一个老项目,人员已经换了好几拨了,只在SVN上有某个版本的源码,其他啥也没有,本地和测试环境完全不具备运行环境,根本跑不起来,但就是这样的项目居然需要增加需求(谁让人家没给钱呢),增加的需求是另一个项目已经完成的,他俩架构基本一样,所以想当然的拿过来直接使用(时间太紧了,就给了一周)。要求很低只要本地编译不报错就可以,然后直接到生产上测试。

结合这个项目的性质,也就注定了上线的不平凡,必然是步步维艰啊,折腾的要死。

遇到的天坑:

  1. 第一个遇到的坑就是增量替换上代码后,启动服务,输出一些日志就卡住不动换了,也不报错,但前台应用就是报404,真是无从下手啊。网络啥的检测都正常。
    后来检查log4j日志级别,发现是ERROR,然后将其修改为DEBUG,跟踪日志才发现,服务向Zookeeper上注册后,就一直处于等待同步状态上了,该信息打印是DEBUG的,所以之前没有打印出来,立马怀疑zookeeper集群崩溃了,一看果然是,重新启动居然会出现两个leader,弄半天后终于解决了。
    建议:测试还是要修改为Debug级别,上线后修改为INFO。
  2. JDK编译版本不一致,生产和开发使用的版本不一致,导致报错Unresolved。
  3. 最让人火大的是,开发版的源码和生产上使用的不一致,导致无法预估到底哪些不同。出现一些莫名奇妙的错误。
    例如:本地代码显示某些配置是读取的Redis缓存,但前台就是报某个数据读取不到,但是数据库中也配置了,缓存也刷新了啊。但就是报错,折腾了半天,最后实战不知道啥原因了,拿下生产上class一看,我去,尼玛居然是读取的某个配置文件,同样的类名和方法,实现居然完全不一样,这不是闹玩吗,太扎心了。
    产生原因:例如有某个需求,开发已经完成了,但是由于某种原因不上线了。下次又来一需求,和上次那个有一些公共的类,直接使用的上次的,上线时就会导致生产上没有上次需求的类。
    建议:做好版本管理,必须保留一个版本是和生产上同步的,如上面例子,某个需求不上线了,和生产同步的版本也必须不能上。最好使用git代替svn,git切换分支,创建分支相对方便。
  4. 最让人受不了的,生产上启动停止服务太慢了!!,平均一次半个小时,像这次需要在生产上测试的,真是发现个问题,可能2秒修改好了,但是启动停止要使用半个小时,1天时间,有2/3是在等待服务启动。真的很恼火了,浪费时间行不出活,然后再遇上个破网,真是想打人啊。服务器局烂,网破,要啥啥不行。
    建议:项目大了,最好按业务分开,做成微服务,启停时间快。如果非要单体应用,那就买个好服务器,换个超快的网!!!

总结,别老是这么不按常理出牌,啥都没有还上需求,当然大背景主要是前期人员没有做好足够的交接,没有足够的保存源码,环境等,但是国内就是这样,努力从自身做起吧。

最后来句脏话发泄下吧:FUCK!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,447评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,973评论 19 139
  • 最近写文章没有思绪,想着去刷刷微博找点料子,突然看到一个视频,标题上大大的标注:衡水中学版《凉凉》。点击率...
    王子_king阅读 1,228评论 3 10
  • 我 出门了 她说 去哪 冷漠的门与轨壁交合 我只字未答 我 和同学去玩了 她问 哪个同学 男还是女 无名的火...
    HZYM阅读 165评论 0 2
  • 《最好的告别》(美)阿图.葛文德 《最好的告别》这本书,读完的感受是让我开始思考如何去面对衰老和死亡这样的一个过程...
    人间寡味是清欢阅读 179评论 0 1