step1(簡稱s1):某系統(tǒng)自身發(fā)起連接
s2:連接建立的過程本身
s3:請求發(fā)送到DB并進(jìn)行處理
s4:DB返回結(jié)果給某系統(tǒng)
s5:某系統(tǒng)成功接收并展示結(jié)果
這就簡單的一個(gè)流程。上面的每個(gè)環(huán)節(jié)都可能出問題,所以你要按步驟,有條理的排除沒問題的步驟,然后放大有問題的步驟,直到找到最后的root cause。
那么,怎么排除沒問題的步驟,放大有問題的步驟呢?還是繼續(xù)上面的例子。
首先我們來確認(rèn)s1是不是正常的,采取一個(gè)極端的辦法,就是換一個(gè)完全不同環(huán)境但是配置完全一模一樣的db,看某系統(tǒng)是否可以連接上這個(gè)db,如果可以,那就證明這個(gè)問題確實(shí)是和舊的db有關(guān)系的,和某系統(tǒng)自身無關(guān)。(這樣就通過替換db來確認(rèn)了問題點(diǎn)不在s1步驟)
那就開始排查s2,連接建立的過程本身,這個(gè)也是有很多層次的。
比如首先可能是網(wǎng)絡(luò)的問題(為什么首先想到是網(wǎng)絡(luò),這是經(jīng)驗(yàn),你稍微有點(diǎn)積累就懂。),網(wǎng)絡(luò)問題又有很多層次,比如防火墻,路由,干擾 ,硬件故障等等。
其次可能是應(yīng)用的問題,比如某系統(tǒng)去連db的過程,在程序?qū)用嫔希且粋€(gè)java程序去連接一個(gè)mysql,那是不是java的連接程序自身不支持mysql的版本?
還有可能是更表層的問題,比如是不是你連接的密碼就沒有配置對?
還有其他可以抽象的一個(gè)問題的層次等等。
總結(jié)一下:其實(shí)就是知道這個(gè)連接的流程,然后再一個(gè)一個(gè)環(huán)節(jié)去追查,有異常就逮住不放追查到底,知道找到根源。
防坑指南:不是所有問題都能找到root cause,根據(jù)個(gè)人的水平,知識層次,找到問題的效率和精度是不一樣的。比如一個(gè)人有病,一個(gè)普通醫(yī)生能查到是肝不好,一個(gè)中級醫(yī)生能不僅查到是肝不好,而且知道是肝的某些細(xì)胞不好,一個(gè)高級醫(yī)生一樣能查到是肝不好,也能查到是肝的某些細(xì)胞不好,還能找到那些細(xì)胞是由于某種病毒感染了所以不好。這就是層次不同,深度不同。
但是,要記住,最終都是要解決問題。所以假設(shè)有一種廣譜藥,可以治療一系列常見的肝病,而且這三個(gè)醫(yī)生都會用(計(jì)算機(jī)服務(wù)器的問題的廣譜藥就是重啟服務(wù)器啦,重裝軟件啦這些),那其實(shí)最終的治療效果都是一樣的(重啟后問題就解決了。)
你的問題是提到運(yùn)維區(qū)里面,想必也是同行,那記得務(wù)必記住,遇到問題的時(shí)候,首要的是解決問題(把病治好),那就要快,不要為找原因一條路走到底,一條路知道不行就要趕緊換路。