從上面的這個列表中,我們可以看到一些改進措施了。挺好的,不過我覺得還不是很夠。
相關的思考
因為類似這樣的事,我以前也干過(誤刪除過數(shù)據(jù)庫,在多個終端窗口中迷失掉了自己所操作的機器……),而且我在amazon里也見過一次,在阿里內(nèi)至少見過四次以上(在阿里人肉運維的誤操作的事故是我見過最多的),但是我無法在這里公開分享,私下可以分享。在這里,我只想從非技術和技術兩個方面分享一下我的經(jīng)驗和認識。
技術方面
人肉運維
一直以來,我都覺得直接到生產(chǎn)線上敲命令是一種非常不好的習慣。我認為,一個公司的運維能力的強弱和你上線上環(huán)境敲命令是有關的,你越是喜歡上線敲命令你的運維能力就越弱,越是通過自動化來處理問題,你的運維能力就越強。理由如下:
其一,如果說對代碼的改動都是一次發(fā)布的話,那么,對生產(chǎn)環(huán)境的任何改動(包括硬件、操作系統(tǒng)、網(wǎng)絡、軟件配置……),也都算是一次發(fā)布。那么這樣的發(fā)布就應該走發(fā)布系統(tǒng)和發(fā)布流程,要被很好的測試、上線和回滾計劃。關鍵是,走發(fā)布過程是可以被記錄、追蹤和回溯的,而在線上敲命令是完全無法追蹤的。沒人知道你敲了什么命令。 其二,真正良性的運維能力是——人管代碼,代碼管機器,而不是人管機器。你敲了什么命令沒人知道,但是你寫個工具做變更線上系統(tǒng),這個工具干了什么事,看看工具的源碼就知道了。
另外、有人說,以后不要用rm了,要用mv,還有人說,以后干這樣的事時,一個人干,另一個人在旁邊看,還有人說,要有一個checklist的強制流程做線上的變更,還有人說要增加一個權(quán)限系統(tǒng)。我覺得,這些雖然可以work,但是依然不好,再由如下:
其一、如果要解決一個事情需要加更多的人來做的事,那這事就做成勞動密集型了。今天我們的科技就是在努力消除人力成本,而不是在增加人力成本。而做為一個技術人員,解決問題的最好方式是努力使用技術手段,而不是使用更多的人肉手段。人類區(qū)別于動物的差別就是會發(fā)明和使用現(xiàn)代化的工具,而不是使用更多的人力。另外,這不僅僅因為是,人都是會有這樣或那樣的問題(疲憊、情緒化、急燥、沖動……),而機器是單一無腦不知疲憊的,更是因為,機器干活的效率和速度是比人肉高出N多倍的。 其二、增加一個權(quán)限系統(tǒng)或是別的一個watch dog的系統(tǒng)完全是在開倒車,權(quán)限系統(tǒng)中的權(quán)限誰來維護和審批?不僅僅是因為多出來的系統(tǒng)需要多出來的維護,關鍵是這個事就沒有把問題解決在root上。除了為社會解決就業(yè)問題,別無好處,故障依然會發(fā)生,有權(quán)限的人一樣會誤操作。對于Gitlab這個問題,正如2nd Quadrant的CTO建議的那樣,你需要的是一個自動化的備份和恢復的工具,而不是一個權(quán)限系統(tǒng)。 其三、像使用mv而不rm,搞一個checklist和一個更重的流程,更糟糕。這里的邏輯很簡單,因為,1)這些規(guī)則需要人去學習和記憶,本質(zhì)上來說,你本來就不相信人,所以你搞出了一些規(guī)則和流程,而這些規(guī)則和流程的執(zhí)行,又依賴于人,換湯不換藥,2)另外,寫在紙面上的東西都是不可執(zhí)行的,可以執(zhí)行的就是只有程序,所以,為什么不把checklist和流程寫成代碼呢?(你可能會說程序也會犯錯,是的,程序的錯誤是consistent,而人的錯誤是inconsistent)
最關鍵的是,數(shù)據(jù)丟失有各種各樣的情況,不單單只是人員的誤操作,比如,掉電、磁盤損壞、中病毒等等,在這些情況下,你設計的那些想流程、規(guī)則、人肉檢查、權(quán)限系統(tǒng)、checklist等等統(tǒng)統(tǒng)都不管用了,這個時候,你覺得應該怎么做呢?是的,你會發(fā)現(xiàn),你不得不用更好的技術去設計出一個高可用的系統(tǒng)!別無它法。
關于備份
一個系統(tǒng)是需要做數(shù)據(jù)備份的,但是,你會發(fā)現(xiàn),Gitlab這個事中,就算所有的備份都可用,也不可避免地會有數(shù)據(jù)的丟失,或是也會有很多問題。理由如下:
1)備份通常來說都是周期性的,所以,如果你的數(shù)據(jù)丟失了,從你最近的備份恢復數(shù)據(jù)里,從備份時間到故障時間的數(shù)據(jù)都丟失了。 2)備份的數(shù)據(jù)會有版本不兼容的問題。比如,在你上次備份數(shù)據(jù)到故障期間,你對數(shù)據(jù)的scheme做了一次改動,或是你對數(shù)據(jù)做了一些調(diào)整,那么,你備份的數(shù)據(jù)就會和你線上的程序出現(xiàn)不兼容的情況。 3)有一些公司或是銀行有災備的數(shù)據(jù)中心,但是災備的數(shù)據(jù)中心沒有一天live過。等真正災難來臨需要live的時候,你就會發(fā)現(xiàn),各種問題讓你live不起來。你可以讀一讀幾年前的這篇報道好好感受一下《以史為鑒 寧夏銀行7月系統(tǒng)癱瘓最新解析》