這次救的火救的時(shí)間有點(diǎn)長(zhǎng),持續(xù)一年多,總共4次,每次去廈門大概1個(gè)月左右,每次去救火都是頂著巨大的壓力,還好每一次我都不錯(cuò)的活著回來(lái)了。
這個(gè)項(xiàng)目與很多要救火的項(xiàng)目一樣,項(xiàng)目交付第一,質(zhì)量被拋在后面,幾十人的團(tuán)隊(duì)不斷往上堆需求,沒有人做架構(gòu)看護(hù),沒有人真正關(guān)注能否持久,只要功能實(shí)現(xiàn)了,暫時(shí)不出問題了,沒有人care你的代碼寫的怎么樣,可維護(hù)性怎么樣。
在這四次救火中,舉2個(gè)印象最深的例子,有一天晚上9點(diǎn)多,領(lǐng)導(dǎo)給我打電話說廈門某項(xiàng)目的系統(tǒng)今天下午系統(tǒng)掛了一次,他們?cè)谀沁吀悴欢?,希望我能出差支持一下,我說好的那我明天去,領(lǐng)導(dǎo)說能否今天晚上就去,沒辦法,訂了10點(diǎn)多的機(jī)票,匆匆忙忙的趕到機(jī)場(chǎng),由于飛機(jī)晚點(diǎn),到廈門已經(jīng)是凌晨2點(diǎn)了。到了以后,我還沒找到地方住下,廈門這邊的PM就給我打電話,直接去他們的辦公場(chǎng)所解決問題,于是直接去了廈門軟件園,到了以后,當(dāng)時(shí)心里是很感動(dòng)的,因?yàn)檫€有一波人在那里等著我一起和他們解決問題,想想大家都挺不容易的。
于是開啟了我連續(xù)2天2夜沒有睡覺的先河,接下來(lái)在11天的時(shí)間里每天凌晨2到3點(diǎn)回酒店。先不說這些苦逼的加班了,再多的加班,如果不能解決問題,都是徒勞的。我們先是把之前發(fā)現(xiàn)的一些問題做了梳理,然后我開始閱讀他們寫的代碼,開始優(yōu)化,測(cè)試,但是在頭2天里,仍然抵擋不住用戶訪問的洪流,系統(tǒng)在連接2天上午高峰期間掛了,下午掛了,甲方的在當(dāng)?shù)刈畲蟮念I(lǐng)導(dǎo)就站在我們的背后看著我們的系統(tǒng)掛了,重啟。當(dāng)時(shí)的心理壓力是巨大的,但是我心里有底的,因?yàn)樵谇懊鎺啄昴ゾ氈?,我已?jīng)遇到過絕大多數(shù)的問題,我對(duì)linux操作系統(tǒng)有足夠的了解,我對(duì)java有足夠的了解。
但是一開始開出的藥方,似乎總是命不中要害。這時(shí)已經(jīng)臨近春節(jié)還有十多天的時(shí)間了,領(lǐng)導(dǎo)發(fā)話,如果此問題不解決,除了扣分以外(影響收入),所有的人春節(jié)都不允許回家。雖然外部不斷的施壓,但是當(dāng)時(shí)我還是有信心解決的,我仍然在不斷的在現(xiàn)網(wǎng)patch代碼,分析日志,直到第3天,我給出一個(gè)當(dāng)時(shí)絕大多數(shù)同事都不太認(rèn)可的方案,將合并部署的數(shù)據(jù)庫(kù)單獨(dú)遷移到單獨(dú)的數(shù)據(jù)庫(kù)服務(wù)器上。他們認(rèn)為這個(gè)方案的成本太高,從服務(wù)器的下單、到貨、安裝在短短十天的時(shí)間很難完成,如果遷移到新的數(shù)據(jù)庫(kù)上仍沒有解決問題,我們就一點(diǎn)退路就沒有了。大部分人都不同意這個(gè)方案,而我相信自己的分析,一遍遍的拿出充分的數(shù)據(jù)做圖表分析,當(dāng)時(shí)幸虧自己熟練的寫perl腳本,做了很多分析的工作。為什么要遷數(shù)據(jù)庫(kù)到新的數(shù)據(jù)庫(kù)?
我們的系統(tǒng)的數(shù)據(jù)庫(kù)是和另外一個(gè)系統(tǒng)的數(shù)據(jù)庫(kù)是合并部署在一臺(tái)小型機(jī)上,這臺(tái)小型機(jī)號(hào)稱是IBM性能最猛的服務(wù)器,內(nèi)存好像是128G,處理器是64核,因?yàn)槲野l(fā)現(xiàn)我們的系統(tǒng)的sql的執(zhí)行時(shí)間不穩(wěn)定,從單個(gè)sql來(lái)看,執(zhí)行時(shí)間最高的時(shí)候會(huì)比正常的時(shí)間高于30%左右,這樣看來(lái)問題不明顯,但是不要忘了,我們?yōu)槭裁磼斓墓δ苁且粋€(gè)非常復(fù)雜的功能,一個(gè)流程有大量的sql執(zhí)行,如果這些sql執(zhí)行時(shí)間都很慢,那么整個(gè)流程就會(huì)慢很多。這也是為什么他們懷疑的