順豐運(yùn)維工程師因誤刪庫(kù)被開(kāi)除的事擂橘,現(xiàn)在已經(jīng)在圈內(nèi)炸鍋了。
本來(lái)我是很討厭蹭熱點(diǎn)的摩骨,因?yàn)檫@樣寫(xiě)出來(lái)的內(nèi)容很可能缺乏長(zhǎng)期價(jià)值通贞。但是作為極少數(shù)既 drop 過(guò)生產(chǎn)庫(kù),也 rm -rf / 過(guò)線上服務(wù)器的過(guò)來(lái)人恼五,我覺(jué)得自己很有必要站出來(lái)說(shuō)點(diǎn)什么昌罩。
馬上要放假了,半夜爬起來(lái)碼字灾馒,倉(cāng)促之處必有疏漏茎用,還請(qǐng)各位海涵。
事件還原
本次事件流出的是一封順豐內(nèi)部通報(bào)郵件,大概描述了一位鄧姓工程師因操作不當(dāng)而導(dǎo)致數(shù)據(jù)丟失轨功、業(yè)務(wù)停擺的事故旭斥,郵件內(nèi)容如下:
鄧某錯(cuò)選了 RUSS 數(shù)據(jù)庫(kù),打算執(zhí)行刪除的 SQL古涧。在選定刪除時(shí)垂券,因其操作不嚴(yán)謹(jǐn),光標(biāo)回跳到 RUSS 庫(kù)的實(shí)例羡滑,在未看清所選內(nèi)容的情況下菇爪,便通過(guò) delete 執(zhí)行刪除,同時(shí)鄧某忽略了彈窗提醒柒昏,直接回車凳宙,導(dǎo)致** RUSS 生產(chǎn)數(shù)據(jù)庫(kù)被刪掉**。
因運(yùn)維工作人員不嚴(yán)謹(jǐn)?shù)牟僮麝汲瑢?dǎo)致 OMCS 運(yùn)營(yíng)監(jiān)控管控系統(tǒng)發(fā)生故障近速,該系統(tǒng)上臨時(shí)線上發(fā)車功能無(wú)法使用并持續(xù)了 590 分鐘。
…… 此次故障導(dǎo)致業(yè)務(wù)產(chǎn)生了嚴(yán)重的負(fù)面影響堪旧。
……根據(jù)《獎(jiǎng)勵(lì)與處罰管理規(guī)定3.0》……對(duì)直接責(zé)任人鄧XXX予以解除勞動(dòng)合同處罰,并予以順豐科技全網(wǎng)通報(bào)批評(píng)奖亚。
以上描述得有些專業(yè)了淳梦,非技術(shù)人員理解起來(lái)可能有點(diǎn)困難,我來(lái)給大家用白話翻譯一下:
小鄧是一名年輕的程序員昔字,干起活來(lái)手特別快爆袍,平時(shí)敲打鍵盤(pán)如狂風(fēng)暴雨一般,一般人的眼睛根本跟不上他的操作作郭。然而跑得越快陨囊、摔得越慘,終于有一天夹攒,他在做危險(xiǎn)操作的時(shí)候因?yàn)槭挚彀l(fā)生了失誤蜘醋,刪除了重要的工作數(shù)據(jù),讓公司的系統(tǒng)癱瘓了十個(gè)小時(shí)咏尝。結(jié)果他被開(kāi)除了压语,還被全公司通報(bào)批評(píng)。
好了编检,事情的經(jīng)過(guò)就是這樣胎食。接下來(lái)我再?gòu)募夹g(shù)角度分析一下。從“導(dǎo)致RUSS 生產(chǎn)數(shù)據(jù)庫(kù)被刪掉”這句話來(lái)看允懂,小鄧應(yīng)該做的是 drop (卸載庫(kù)) 操作厕怜,而不是 delete (刪除數(shù)據(jù)) 操作。根據(jù)我的經(jīng)驗(yàn)和理解,事情大概率是這樣的:
聲明:以下所述只是我個(gè)人的揣測(cè)粥航,很可能不是事實(shí)琅捏!
很明顯,小鄧想把生產(chǎn)環(huán)境的數(shù)據(jù)庫(kù)的數(shù)據(jù)搬到測(cè)試環(huán)境里躁锡。定期將生產(chǎn)數(shù)據(jù)同步到測(cè)試環(huán)境午绳,這是一個(gè)非常常見(jiàn)且高頻的需求。如果數(shù)據(jù)結(jié)構(gòu)不同映之,代碼就跑不起來(lái)拦焚;如果數(shù)據(jù)不新不真,產(chǎn)品經(jīng)理也不好評(píng)估新產(chǎn)品的效果杠输。
做數(shù)據(jù)同步和遷移有很多種方法赎败,其中最方便快捷、簡(jiǎn)單粗暴的方法就是:
把線上的數(shù)據(jù)庫(kù) dump(打包) 成一個(gè)文件
把這個(gè)文件下載到測(cè)試環(huán)境的機(jī)器上
在測(cè)試環(huán)境 drop (卸載)現(xiàn)有的庫(kù)
用文件中的數(shù)據(jù)重建新的庫(kù)
很明顯蠢甲,事故發(fā)生在第三步僵刮,也就是:本應(yīng)在測(cè)試環(huán)境執(zhí)行的 drop 操作,在生產(chǎn)環(huán)境被執(zhí)行了鹦牛。
如果是第一次做這樣的操作搞糕,我相信任何有基本職業(yè)操守的人都會(huì)非常小心的。從小鄧“忽略了彈窗提醒曼追,直接回車”來(lái)看窍仰,他對(duì)整個(gè)操作流程是非常熟練的,當(dāng)天他一定是已經(jīng)做了很多次這樣的操作礼殊。
我大膽地猜測(cè):小鄧同學(xué)是在 熬夜加班 / 臨近飯點(diǎn) / 老婆催回家 / …… 之類的狀態(tài)下驹吮,無(wú)心犯下這個(gè)錯(cuò)誤的。
問(wèn)題到底出在哪里晶伦?
既然問(wèn)題出現(xiàn)了碟狞,我們就得搞清楚以下三個(gè)問(wèn)題:
Why:導(dǎo)致問(wèn)題的根本原因究竟是什么?
How: 怎么避免以后再發(fā)生類似的問(wèn)題婚陪?
What:現(xiàn)在我們應(yīng)該做些什么族沃?
我們先來(lái)研究一下,導(dǎo)致本起事故的根本原因到底是什么近忙?真的是小鄧 粗心大意竭业、一味求快 么?
對(duì)任何已有結(jié)論的問(wèn)題及舍,都應(yīng)該進(jìn)行自己的獨(dú)立思考未辆,這樣才不會(huì)人云亦云,掉入思維陷阱里锯玛。
在未看清所選內(nèi)容的情況下咐柜,便通過(guò) delete 執(zhí)行刪除
同時(shí)鄧某忽略了彈窗提醒兼蜈,直接回車
這一部分沒(méi)得說(shuō),100%是小鄧的問(wèn)題拙友。不看提醒直接默認(rèn)選擇为狸,這是一個(gè)非常不好的習(xí)慣。應(yīng)該有很多人在Windows里刪除文件時(shí)因?yàn)閼械迷偃デ寤厥照荆椭苯覵hift+Delete然后回車的吧?肯定還有嫌每次彈個(gè)對(duì)話框麻煩航徙,干脆設(shè)置成“不提醒確認(rèn)”的吧?那一旦刪錯(cuò)了漾根,就能去求助Rstudio之類的數(shù)據(jù)恢復(fù)軟件,至于能不能找回來(lái)鲫竞,就只能聽(tīng)天由命了辐怕。
做開(kāi)發(fā)和運(yùn)維的人理應(yīng)知道數(shù)據(jù)的重要性,在對(duì)數(shù)據(jù)做 drop从绘、delete 等無(wú)法撤銷的危險(xiǎn)操作時(shí)要慎之又慎寄疏,一定要反復(fù)檢查,最好找人結(jié)對(duì)和review僵井。
鄧某錯(cuò)選了 RUSS 數(shù)據(jù)庫(kù)陕截,打算執(zhí)行刪除的 SQL。
在選定刪除時(shí)批什,因其操作不嚴(yán)謹(jǐn)艘策,光標(biāo)回跳到 RUSS 庫(kù)的實(shí)例
順豐有DBA嗎?運(yùn)維同學(xué)為什么竟然有權(quán)限操作生產(chǎn)數(shù)據(jù)庫(kù)渊季?生產(chǎn)環(huán)境和測(cè)試環(huán)境為什么不進(jìn)行嚴(yán)格的隔離? 執(zhí)行線上危險(xiǎn)操作時(shí)罚渐,為什么不安排雙人結(jié)對(duì)或者review却汉?同步數(shù)據(jù)這種高頻操作為什么沒(méi)有做成腳本或服務(wù),而是靠容易出錯(cuò)的人工來(lái)執(zhí)行荷并?
當(dāng)然合砂,順豐體量雖大,但畢竟并不是一家互聯(lián)網(wǎng)公司源织,可能工程師數(shù)量還不及業(yè)內(nèi)一家小型創(chuàng)業(yè)公司翩伪。在這種情況下,一人多用谈息、權(quán)限混亂也是可以理解的常態(tài)缘屹。但對(duì)于數(shù)據(jù)十分重要、服務(wù)絕對(duì)不能停的業(yè)務(wù)侠仇,CTO和項(xiàng)目leader轻姿,應(yīng)該對(duì)員工可能出現(xiàn)的操作失誤設(shè)計(jì)預(yù)先防范的措施和制度犁珠,否則就是失職。當(dāng)你的業(yè)務(wù)有可能因?yàn)閱T工一個(gè)小失誤就癱瘓互亮,甚至數(shù)據(jù)無(wú)法找回導(dǎo)致公司關(guān)門(mén)時(shí)犁享,你怎么還睡得著覺(jué)?
在照顧孩子的時(shí)候豹休,我學(xué)到的最重要的道理就是:如果有樣?xùn)|西不能讓孩子玩炊昆,那就不能放在孩子夠得著的地方。 如果你是一名銷售威根,剛簽完一個(gè)大客戶凤巨,興高采烈地回到家里,把合同扔到茶幾上医窿,然后沖進(jìn)洗手間上了個(gè)廁所回來(lái)磅甩,就發(fā)現(xiàn)合同被你家熊孩子用筆涂得一塌糊涂,你覺(jué)得是該怪孩子調(diào)皮呢姥卢,還是該怪你自己不小心卷要?
綜上所述,我認(rèn)為雖然小鄧的誤操作是本次事故的直接原因独榴,但順豐公司對(duì)明顯的安全隱患視而不見(jiàn)僧叉,在權(quán)限管理、風(fēng)險(xiǎn)控制棺榔、流程設(shè)計(jì)上存在重大缺陷瓶堕,才是本次事故的根本原因。
順豐到底該不該開(kāi)除小鄧症歇?
如果找不到問(wèn)題的根本原因郎笆,在錯(cuò)誤的方向上再怎么努力,也不可能找到解決方案忘晤。相反宛蚓,只要找到了正確的原因,解決方案也就自動(dòng)呈現(xiàn)设塔。所以凄吏,我們就不浪費(fèi)時(shí)間來(lái)討論如何避免再發(fā)生類似事故了。
現(xiàn)在最有爭(zhēng)議的話題就是:順豐到底怎么處理本次事件才是合理的闰蛔?
小鄧因工作失誤痕钢,給公司帶來(lái)了巨大的損失,這是客觀事實(shí)序六。而小鄧作為個(gè)人是無(wú)力賠償公司損失的任连,順豐公司作為非國(guó)家單位,能動(dòng)用最高級(jí)別的懲罰就只有開(kāi)除难咕。我相信课梳,順豐這么大的公司距辆,作出開(kāi)除并通報(bào)批評(píng)這個(gè)決定,應(yīng)該是經(jīng)過(guò)激烈的討論的暮刃。最終決策者還是決定殺雞儆猴跨算,以儆效尤。從法律的角度上講椭懊,順豐有權(quán)這么做诸蚕;從道德的角度上講,順豐的立場(chǎng)也沒(méi)有問(wèn)題氧猬。
可是背犯,為什么業(yè)內(nèi)對(duì)這個(gè)處理結(jié)果會(huì)出現(xiàn)如此大的反應(yīng)呢?因?yàn)轫権S在處理的過(guò)程中呈現(xiàn)了一副冷冰冰的姿態(tài)盅抚,在事故原因分析中把所有責(zé)任推卸到員工頭上漠魏,對(duì)公司制度的缺失及領(lǐng)導(dǎo)者的失職只字不提,實(shí)在讓人心寒妄均。
定義為人的問(wèn)題柱锹,那就只能解決人,卻解決不了問(wèn)題丰包。開(kāi)除了一個(gè)小鄧禁熏,卻不在權(quán)限設(shè)計(jì)、流程管控上下功夫邑彪,那還一定還會(huì)有小王瞧毙、小張們前仆后繼地繼續(xù)出同樣的問(wèn)題。也許現(xiàn)在風(fēng)聲緊寄症,大家都會(huì)對(duì)安全格外注意宙彪,但不會(huì)持續(xù)多久。
定義為程序和制度的問(wèn)題有巧,才能從根本上解決問(wèn)題您访。順豐本來(lái)可以保留一個(gè)忠心耿耿、加薪欲望低的好員工剪决,同時(shí)呈現(xiàn)出包容錯(cuò)誤的正能量企業(yè)文化,收買大片人心檀训。但是現(xiàn)在順豐的員工們會(huì)怎么想呢柑潦?原來(lái)公司沒(méi)有把我們當(dāng)人看,我們只是隨時(shí)可以更換的螺絲釘峻凫,出了問(wèn)題就走人渗鬼,就算是機(jī)器出了問(wèn)題,我們也得當(dāng)背鍋俠荧琼。
對(duì)小鄧來(lái)說(shuō)譬胎,被開(kāi)除反而是一個(gè)好消息差牛。 有過(guò)這么一次慘痛的經(jīng)驗(yàn)教訓(xùn),估計(jì)小鄧一輩子都不會(huì)再犯刪除線上庫(kù)這種錯(cuò)誤了堰乔。我們都知道人的價(jià)值是由稀缺性決定的偏化,擁有小鄧這樣有經(jīng)驗(yàn)的人可謂是少之又少。小鄧現(xiàn)在出了名镐侯,一定會(huì)有N多公司給他拋出橄欖枝侦讨,會(huì)有更好的機(jī)會(huì)等待著他。相反苟翻,如果順豐沒(méi)有開(kāi)除小鄧韵卤,他一定會(huì)因?yàn)閮?nèi)疚而對(duì)工作更加盡職盡責(zé),短期也不會(huì)選擇跳槽崇猫。交了這么高學(xué)費(fèi)的人沈条,怎么能放他走,便宜別的公司呢诅炉?
開(kāi)除了一個(gè)大有前途的員工蜡歹,順便傷了全公司的人的心,還引發(fā)業(yè)界口誅筆伐汞扎,帶動(dòng)股價(jià)下跌季稳。順豐這次真是賠到姥姥家了。
我自己經(jīng)歷的drop事故
我2011-2013年在微拍工作期間澈魄,既犯過(guò) drop 線上庫(kù)的錯(cuò)誤景鼠,也犯過(guò) rm rf / 線上服務(wù)器的錯(cuò)誤。其中drop線上庫(kù)的經(jīng)過(guò)痹扇,跟小鄧基本上是一模樣的铛漓。我后來(lái)寫(xiě)了一篇博客來(lái)反思,懶得排版就直接上圖吧:
感謝當(dāng)時(shí)的boss胡震生不僅給了我足夠的包容鲫构,還為我開(kāi)導(dǎo)排解浓恶,幫我學(xué)習(xí)和成長(zhǎng)。痛定思痛細(xì)查原因结笨,通過(guò)技術(shù)手段根治包晰,從此再?zèng)]有犯過(guò)這兩個(gè)錯(cuò)誤。
對(duì)我 rm rf / 的經(jīng)歷感興趣的朋友炕吸,可以查看我的博客文章:《欲速則不達(dá)》http://zhangshenjia.com/it/slow-down/
后話
人是靠不住的伐憾,因?yàn)槿藭?huì)變、會(huì)離開(kāi)赫模。只讓員工成長(zhǎng)树肃,卻不讓系統(tǒng)成長(zhǎng),結(jié)果就是經(jīng)驗(yàn)都沉淀到了員工自己身上瀑罗,當(dāng)員工離職時(shí)就帶走了所有胸嘴,公司一無(wú)所獲雏掠。
系統(tǒng)才是唯一能永遠(yuǎn)留在公司內(nèi)部的資源。真正優(yōu)秀的員工劣像,會(huì)想方設(shè)法來(lái)迭代系統(tǒng)乡话,即便自己離開(kāi)也能高效運(yùn)轉(zhuǎn)。而那種讓自己變得不可或缺驾讲,離開(kāi)之后系統(tǒng)便不可持續(xù)運(yùn)轉(zhuǎn)的員工蚊伞,其實(shí)是最大的隱患。
我又要說(shuō)我的口頭禪了:一個(gè)人的價(jià)值吮铭,不在于他得到過(guò)什么时迫;而在于他給這個(gè)世界留下了什么。
祝各位朋友中秋節(jié)愉快谓晌!