啊究抓,受不了了猾担,連續(xù)通宵兩個晚上了,還是上線失敗刺下,坑太多了绑嘹!填都填不完啊。
項目說明:一個老項目橘茉,人員已經(jīng)換了好幾撥了工腋,只在SVN上有某個版本的源碼,其他啥也沒有畅卓,本地和測試環(huán)境完全不具備運行環(huán)境擅腰,根本跑不起來,但就是這樣的項目居然需要增加需求(誰讓人家沒給錢呢)翁潘,增加的需求是另一個項目已經(jīng)完成的趁冈,他倆架構(gòu)基本一樣,所以想當(dāng)然的拿過來直接使用(時間太緊了拜马,就給了一周)渗勘。要求很低只要本地編譯不報錯就可以,然后直接到生產(chǎn)上測試俩莽。
結(jié)合這個項目的性質(zhì)旺坠,也就注定了上線的不平凡,必然是步步維艱啊扮超,折騰的要死取刃。
遇到的天坑:
- 第一個遇到的坑就是增量替換上代碼后,啟動服務(wù)出刷,輸出一些日志就卡住不動換了蝉衣,也不報錯,但前臺應(yīng)用就是報404巷蚪,真是無從下手啊病毡。網(wǎng)絡(luò)啥的檢測都正常。
后來檢查log4j日志級別屁柏,發(fā)現(xiàn)是ERROR啦膜,然后將其修改為DEBUG有送,跟蹤日志才發(fā)現(xiàn),服務(wù)向Zookeeper上注冊后僧家,就一直處于等待同步狀態(tài)上了雀摘,該信息打印是DEBUG的,所以之前沒有打印出來八拱,立馬懷疑zookeeper集群崩潰了阵赠,一看果然是,重新啟動居然會出現(xiàn)兩個leader肌稻,弄半天后終于解決了清蚀。
建議:測試還是要修改為Debug級別,上線后修改為INFO爹谭。 - JDK編譯版本不一致枷邪,生產(chǎn)和開發(fā)使用的版本不一致,導(dǎo)致報錯Unresolved诺凡。
- 最讓人火大的是东揣,開發(fā)版的源碼和生產(chǎn)上使用的不一致,導(dǎo)致無法預(yù)估到底哪些不同腹泌。出現(xiàn)一些莫名奇妙的錯誤嘶卧。
例如:本地代碼顯示某些配置是讀取的Redis緩存,但前臺就是報某個數(shù)據(jù)讀取不到凉袱,但是數(shù)據(jù)庫中也配置了芥吟,緩存也刷新了啊。但就是報錯绑蔫,折騰了半天运沦,最后實戰(zhàn)不知道啥原因了,拿下生產(chǎn)上class一看配深,我去携添,尼瑪居然是讀取的某個配置文件,同樣的類名和方法篓叶,實現(xiàn)居然完全不一樣烈掠,這不是鬧玩嗎,太扎心了缸托。
產(chǎn)生原因:例如有某個需求左敌,開發(fā)已經(jīng)完成了,但是由于某種原因不上線了俐镐。下次又來一需求矫限,和上次那個有一些公共的類,直接使用的上次的,上線時就會導(dǎo)致生產(chǎn)上沒有上次需求的類叼风。
建議:做好版本管理取董,必須保留一個版本是和生產(chǎn)上同步的,如上面例子无宿,某個需求不上線了茵汰,和生產(chǎn)同步的版本也必須不能上。最好使用git代替svn孽鸡,git切換分支蹂午,創(chuàng)建分支相對方便。 - 最讓人受不了的彬碱,生產(chǎn)上啟動停止服務(wù)太慢了6剐亍!堡妒,平均一次半個小時配乱,像這次需要在生產(chǎn)上測試的溉卓,真是發(fā)現(xiàn)個問題皮迟,可能2秒修改好了,但是啟動停止要使用半個小時桑寨,1天時間伏尼,有2/3是在等待服務(wù)啟動。真的很惱火了尉尾,浪費時間行不出活爆阶,然后再遇上個破網(wǎng),真是想打人啊沙咏。服務(wù)器局爛辨图,網(wǎng)破,要啥啥不行肢藐。
建議:項目大了故河,最好按業(yè)務(wù)分開,做成微服務(wù)吆豹,啟停時間快鱼的。如果非要單體應(yīng)用,那就買個好服務(wù)器痘煤,換個超快的網(wǎng)4战住!衷快!
總結(jié)宙橱,別老是這么不按常理出牌,啥都沒有還上需求,當(dāng)然大背景主要是前期人員沒有做好足夠的交接师郑,沒有足夠的保存源碼哼勇,環(huán)境等,但是國內(nèi)就是這樣呕乎,努力從自身做起吧积担。
最后來句臟話發(fā)泄下吧:FUCK!b省帝璧!