上線就炸海洼!你的代碼出過(guò)研發(fā)事故么跨新?

一、前言

你的代碼出過(guò)事故嗎坏逢?

老人言:常在河邊走哪有不濕鞋域帐。只要你在做著編程開發(fā)的工作就一定會(huì)遇到事故,或大或小而已是整。

當(dāng)然可能有一部分研發(fā)同學(xué)肖揣,在相對(duì)傳統(tǒng)的行業(yè)或者做著用戶體量較小的業(yè)務(wù)等,很難遇到讓人出名的事故贰盗,多數(shù)都是一些線上的小bug许饿,修復(fù)了也就沒(méi)人問(wèn)了。

但如果你在較大型的互聯(lián)網(wǎng)公司舵盈,那么你負(fù)責(zé)的開發(fā)的系統(tǒng)功能陋率,可能面對(duì)的就是成百萬(wàn)、上千萬(wàn)級(jí)別用戶體量秽晚。哪怕你有一點(diǎn)小bug也會(huì)被迅速放大瓦糟,造成大批量的客訴以及更嚴(yán)重的資金損失風(fēng)險(xiǎn)。就像:

  1. 拼多多“薅羊毛”事件赴蝇,朋友圈瘋狂轉(zhuǎn)發(fā)菩浙。
  2. 淘寶出現(xiàn)重大線上bug,S1級(jí)事故句伶,疑似程序員故意埋雷劲蜻。您使用的程序是內(nèi)測(cè)版本,將于當(dāng)?shù)貢r(shí)間 2021-02-23到期考余,到期后將無(wú)法使用先嬉,請(qǐng)盡快下載最新版本。
  3. GitHub忘記續(xù)訂SSL證書導(dǎo)致網(wǎng)站排版混亂楚堤,部分網(wǎng)站不能正常打開疫蔓。

類似這樣事故的出現(xiàn)含懊,可能是因?yàn)榧夹g(shù)流程、方案實(shí)現(xiàn)衅胀、技術(shù)服務(wù)以及運(yùn)營(yíng)配置等等原因產(chǎn)生的岔乔。綜合可以概括為以下幾點(diǎn):

上線就炸!你的代碼出過(guò)研發(fā)事故么滚躯?
  • 功能流程設(shè)計(jì)類:通常指的是研發(fā)在設(shè)計(jì)產(chǎn)品邏輯功能實(shí)現(xiàn)流程中雏门,錯(cuò)誤的執(zhí)行調(diào)用關(guān)系而造成的風(fēng)險(xiǎn)事故。
  • 技術(shù)方案實(shí)用類:在研發(fā)設(shè)計(jì)好流程后掸掏,每一個(gè)功能點(diǎn)的實(shí)現(xiàn)方案會(huì)因人而異剿配,也會(huì)由于理解偏差或不足,而導(dǎo)致實(shí)現(xiàn)過(guò)程中缺少了對(duì)代碼在運(yùn)行過(guò)程中健壯性的評(píng)估阅束。
  • 技術(shù)服務(wù)使用類:這一類說(shuō)的是在研發(fā)使用數(shù)據(jù)庫(kù)服務(wù)呼胚、緩存服務(wù)、大數(shù)據(jù)服務(wù)息裸、配置中心服務(wù)以及發(fā)布上線服務(wù)等時(shí)蝇更,對(duì)各項(xiàng)服務(wù)的配置以及使用上缺少一定的了解,而造成的事故呼盆。
  • 后門違規(guī)操作類:這一類因公司對(duì)研發(fā)規(guī)范的執(zhí)行強(qiáng)度不同年扩,而是否會(huì)有此類風(fēng)險(xiǎn)。例如:有些研發(fā)同學(xué)會(huì)開發(fā)一些后門程序访圃,比如可以在某個(gè)ERP頁(yè)面執(zhí)行數(shù)據(jù)庫(kù)語(yǔ)句厨幻,臨時(shí)修改數(shù)據(jù)。這樣造成的風(fēng)險(xiǎn)腿时,通常為后門違規(guī)操作况脆,會(huì)有開除風(fēng)險(xiǎn)。
  • 運(yùn)營(yíng)操作失誤類:在研發(fā)以為還有一部分公司內(nèi)的伙伴會(huì)使用研發(fā)同學(xué)開發(fā)的運(yùn)營(yíng)系統(tǒng)批糟,配置活動(dòng)格了、變更用戶、執(zhí)行流程等操作徽鼎,但一般情況下這類系統(tǒng)缺少一定的強(qiáng)規(guī)則驗(yàn)證盛末,導(dǎo)致運(yùn)營(yíng)小白在操作過(guò)程中造成風(fēng)險(xiǎn),從而引發(fā)事故否淤。一般線上配置出錯(cuò)誤卷悄但,或者推錯(cuò)短信給用戶等等,都是這樣發(fā)生的石抡。

可以說(shuō)檐嚣,大多數(shù)比較蠢的事故主要是個(gè)人責(zé)任心問(wèn)題。但那些有技術(shù)含量的事故汁雷,犯一次還是挺值得的净嘀。雖然公司很討厭你造成事故,因?yàn)闀?huì)給公司帶來(lái)?yè)p失嘛侠讯!但這樣具有具有技術(shù)含量的事故挖藏,卻對(duì)你個(gè)人成長(zhǎng)非常好的案例。不過(guò)禁酒雖好厢漩,可不能貪杯膜眠!

接下來(lái),作者就帶著你領(lǐng)略下各類事故的風(fēng)采溜嗜,看看在什么場(chǎng)景宵膨、遇到什么問(wèn)題、怎么解決的以及能學(xué)到什么炸宵!

二辟躏、研發(fā)事故

1. 功能流程設(shè)計(jì)類

上線就炸!你的代碼出過(guò)研發(fā)事故么土全?
  • 事故級(jí)別:P1
  • 事故判責(zé):相應(yīng)的研發(fā)捎琐、測(cè)試總結(jié)復(fù)盤,罰款50元給參加會(huì)議的伙伴買棒棒糖以示警告裹匙。
  • 事故名稱:抽獎(jiǎng)積分支付流程不合理
  • 事故現(xiàn)象:用戶積分多支付瑞凑,造成批量客訴,當(dāng)天緊急排查修復(fù)概页,并給用戶補(bǔ)充積分籽御。
  • 事故描述:這個(gè)產(chǎn)品功能的背景可能很大一部分研發(fā)都參與開發(fā)過(guò),簡(jiǎn)單說(shuō)就是滿足用戶使用積分抽獎(jiǎng)的一個(gè)需求惰匙。上圖左側(cè)就是研發(fā)最開始設(shè)計(jì)的流程技掏,通過(guò)RPC接口扣減用戶積分,扣減成功后進(jìn)行抽獎(jiǎng)项鬼。但由于當(dāng)天RPC服務(wù)不穩(wěn)定零截,造成RPC實(shí)際調(diào)用成功,但返回超時(shí)失敗秃臣。而調(diào)用RPC接口的uuid是每次自動(dòng)生成的涧衙,不具備調(diào)用冪等性。所以造成了用戶積分多的支付現(xiàn)象奥此。
  • 事故處理:事故后修改抽獎(jiǎng)流程弧哎,先生成待抽獎(jiǎng)的抽獎(jiǎng)單,由抽獎(jiǎng)單ID調(diào)用RPC接口稚虎,保證接口冪等性撤嫩。在RPC接口失敗時(shí)由定時(shí)任務(wù)補(bǔ)償?shù)姆绞綀?zhí)行抽獎(jiǎng)。流程整改后發(fā)現(xiàn)蠢终,補(bǔ)償任務(wù)每周發(fā)生1~3次序攘,那么也就是證明了RPC接口確實(shí)有可用率問(wèn)題茴她,同時(shí)也說(shuō)明很久之前就有流程問(wèn)題,但由于用戶客訴較少程奠,所以沒(méi)有反饋丈牢。
  • 學(xué)習(xí)總結(jié):調(diào)用的接口、發(fā)送的MQ瞄沙,并不一定會(huì)每次都成功己沛。那么一定要做好冪等性以及失敗后的補(bǔ)償,來(lái)把整個(gè)技術(shù)實(shí)現(xiàn)流程做得更加完善距境。就像作者說(shuō)的申尼,擦屁屁的紙80%的面積其實(shí)都是保護(hù)手的!

網(wǎng)友事故分享:

上線就炸垫桂!你的代碼出過(guò)研發(fā)事故么师幕?

2. 技術(shù)方案實(shí)現(xiàn)類

上線就炸!你的代碼出過(guò)研發(fā)事故么诬滩?
  • 事故級(jí)別:P0
  • 事故判責(zé):營(yíng)銷活動(dòng)推廣用戶較多们衙,影響范圍較大,研發(fā)整改代碼并做復(fù)盤碱呼。
  • 事故名稱:秒殺方案獨(dú)占競(jìng)態(tài)實(shí)現(xiàn)問(wèn)題
  • 事故現(xiàn)象:用戶看到可以購(gòu)買蒙挑,但只要一點(diǎn)下單就活動(dòng)太火爆了,換個(gè)小手試試愚臀。造成了大量客訴忆蚀,緊急下線活動(dòng)排查。
  • 事故描述:這是一個(gè)商品活動(dòng)秒殺的實(shí)現(xiàn)方案姑裂,最開始的設(shè)計(jì)是基于一個(gè)活動(dòng)號(hào)ID進(jìn)行鎖定馋袜,秒殺時(shí)鎖定這個(gè)ID,用戶購(gòu)買完后就進(jìn)行釋放舶斧。但在大量用戶搶購(gòu)時(shí)欣鳖,出現(xiàn)了秒殺分布式鎖后的業(yè)務(wù)邏輯處理中發(fā)生異常,釋放鎖失敗茴厉。導(dǎo)致所有的用戶都不能再拿到鎖泽台,也就造成了有商品不能下單的問(wèn)題。
  • 事故處理:優(yōu)化獨(dú)占競(jìng)態(tài)為分段靜態(tài)矾缓,將活動(dòng)ID+庫(kù)存編號(hào)作為動(dòng)態(tài)鎖標(biāo)識(shí)怀酷。當(dāng)前秒殺的用戶如果發(fā)生鎖失敗那么后面的用戶可以繼續(xù)秒殺不受影響。而失敗的鎖會(huì)有worker進(jìn)行補(bǔ)償恢復(fù)嗜闻,那么最終會(huì)避免超賣以及不能售賣蜕依。
  • 學(xué)習(xí)總結(jié):核心的技術(shù)實(shí)現(xiàn)需要經(jīng)過(guò)大量的數(shù)據(jù)驗(yàn)證以及壓測(cè),否則各個(gè)場(chǎng)景下很難評(píng)估是否會(huì)有風(fēng)險(xiǎn)。當(dāng)然這也不是唯一的實(shí)現(xiàn)方案样眠,可以根據(jù)不同的場(chǎng)景有不同的實(shí)現(xiàn)處理友瘤。

網(wǎng)友事故分享:

上線就炸!你的代碼出過(guò)研發(fā)事故么檐束?

3. 技術(shù)服務(wù)使用類

上線就炸辫秧!你的代碼出過(guò)研發(fā)事故么?
  • 事故級(jí)別:P2
  • 事故判責(zé):網(wǎng)友說(shuō)被叼了一會(huì)厢塘,問(wèn)題不大!
  • 事故名稱:擴(kuò)容時(shí)忽略了連接池梳理肌幽,導(dǎo)致連接池被打滿
  • 事故現(xiàn)象:線上突然收到報(bào)警短信晚碾,打開電腦一看,簡(jiǎn)單地查詢接口超時(shí)到3分鐘才返回喂急。
  • 事故描述:幸好監(jiān)控報(bào)警加的全格嘁,及時(shí)收到了報(bào)警短信,聯(lián)系DBA檢查發(fā)現(xiàn)連接池被打滿了廊移。為了快速解決線上報(bào)警糕簿,優(yōu)先臨時(shí)擴(kuò)容了連接池以及把服務(wù)器重啟。觀察后連接池打滿消失了狡孔。
  • 事故處理:檢查應(yīng)用數(shù)據(jù)庫(kù)連接池配置懂诗,以及額外不經(jīng)常上線的服務(wù)一并排查。經(jīng)查詢發(fā)現(xiàn)所有的應(yīng)用加起來(lái)連接池的最高配置超過(guò)數(shù)據(jù)庫(kù)分配的連接池?cái)?shù)量苗膝。尤其是定時(shí)任務(wù)較長(zhǎng)時(shí)間掃庫(kù)處理殃恒,是直接導(dǎo)致連接池打滿的重要原因。
  • 學(xué)習(xí)總結(jié):研發(fā)不僅是代碼開發(fā)搬磚人員辱揭,還要了解熟悉與之配套的服務(wù)离唐。合理的使用、全面的考量才能避免一些看似不應(yīng)該出現(xiàn)的事故問(wèn)題问窃。

網(wǎng)友事故分享:

上線就炸亥鬓!你的代碼出過(guò)研發(fā)事故么?

4. 后門違規(guī)操作類

上線就炸域庇!你的代碼出過(guò)研發(fā)事故么嵌戈?
  • 事故級(jí)別:P0
  • 事故判責(zé):網(wǎng)友反饋,私自開發(fā)后門听皿,執(zhí)行sql錯(cuò)誤咕别,影響較大。開除写穴!
  • 事故名稱:通過(guò)后門程序修改線上數(shù)據(jù)
  • 事故現(xiàn)象:這次修改影響范圍比想象的要小惰拱,只有部分?jǐn)?shù)據(jù)因?yàn)榫彺媸Я耍抛x取數(shù)據(jù)庫(kù)的活動(dòng)信息。所以有少部分客訴說(shuō)活動(dòng)與名稱不符合偿短。
  • 事故描述:研發(fā)人員應(yīng)運(yùn)營(yíng)要求修改線上配置錯(cuò)誤的活動(dòng)名稱欣孤,但任何郵件記錄以及負(fù)責(zé)人審批。所以只是研發(fā)私自通過(guò)后門程序提交sql語(yǔ)句修改昔逗,但忘記寫where條件降传,造成幾千條活動(dòng)名稱被同時(shí)修改。
  • 事故處理:事后聯(lián)系DBA緊急通過(guò)binlog日志進(jìn)行數(shù)據(jù)修復(fù)勾怒。
  • 學(xué)習(xí)總結(jié):研發(fā)人員應(yīng)避免操作線上數(shù)據(jù)婆排,尤其是變更數(shù)據(jù)類型。也不要開發(fā)各類改數(shù)據(jù)笔链、上線段只、傳配置文件等后門。而應(yīng)該嚴(yán)格遵守研發(fā)流程鉴扫,有緊急事情需要請(qǐng)求批準(zhǔn)處理赞枕。

網(wǎng)友事故分享:

上線就炸!你的代碼出過(guò)研發(fā)事故么坪创?

5. 運(yùn)營(yíng)操作失誤類

上線就炸炕婶!你的代碼出過(guò)研發(fā)事故么?
  • 事故級(jí)別:P2
  • 事故判責(zé):網(wǎng)友說(shuō)莱预,金額太大沒(méi)發(fā)出去柠掂!被噴了一會(huì)!
  • 事故名稱:運(yùn)營(yíng)把券配置成紅包
  • 事故現(xiàn)象:線上用戶客訴依沮,看到幾百億大的紅包陪踩,領(lǐng)不到!
  • 事故描述:運(yùn)營(yíng)人員配置優(yōu)惠券悉抵,但是類型選成了紅包肩狂,導(dǎo)致頁(yè)面展示出超大額的紅包金額待領(lǐng)取,都超出屏幕長(zhǎng)度了姥饰!
  • 事故處理:緊急下線活動(dòng)傻谁,重新配置上線。同時(shí)產(chǎn)品設(shè)計(jì)需求列粪,由研發(fā)人員實(shí)現(xiàn)對(duì)于此類配置提供明確审磁、醒目的配置和完整的審核流程。如果配置紅包岂座、優(yōu)惠券态蒂,會(huì)有校驗(yàn)此券的是否存在以及紅包最大金額限制。
  • 學(xué)習(xí)總結(jié):看上去是運(yùn)營(yíng)配置錯(cuò)誤费什,但從某個(gè)角度看其實(shí)也可以說(shuō)是研發(fā)在做功能實(shí)現(xiàn)時(shí)钾恢,太過(guò)于單一完成產(chǎn)品功能,而沒(méi)有加深考慮以及產(chǎn)品的易用性。有時(shí)候多問(wèn)一句就少一個(gè)風(fēng)險(xiǎn)瘩蚪!

網(wǎng)友事故分享:

上線就炸泉懦!你的代碼出過(guò)研發(fā)事故么?

三疹瘦、總結(jié)

  • 講道理崩哩,開發(fā)沒(méi)事故,不是沒(méi)用戶體量言沐,就是沒(méi)用戶規(guī)模邓嘹。否則只要是人就一定會(huì)出現(xiàn)事故,要不是小bug被你銷聲匿跡隱藏了险胰,或者是大事故被噴了或者送飛機(jī)了汹押。
  • 而盡可能減少事故的方式是需要盡可能按照一定的研發(fā)流程來(lái)實(shí)現(xiàn)功能邏輯。就像:設(shè)計(jì)評(píng)審鸯乃,把控的是實(shí)現(xiàn)流程鲸阻、代碼評(píng)審跋涣,把控的是實(shí)現(xiàn)方案缨睡,在配合上完善的監(jiān)控和報(bào)警。只有這樣才能更好地減少不必要的事故陈辱。
  • 關(guān)于研發(fā)在職場(chǎng)中的事故本文就講到這了奖年,感謝粉絲分享出自己的遇到的事故,讓大家可以互相學(xué)習(xí)沛贪,減少離職扣工資的風(fēng)險(xiǎn)陋守。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市利赋,隨后出現(xiàn)的幾起案子水评,更是在濱河造成了極大的恐慌,老刑警劉巖媚送,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件中燥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡塘偎,警方通過(guò)查閱死者的電腦和手機(jī)疗涉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吟秩,“玉大人咱扣,你說(shuō)我怎么就攤上這事『溃” “怎么了闹伪?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我祭往,道長(zhǎng)伦意,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任硼补,我火速辦了婚禮驮肉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘已骇。我一直安慰自己离钝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布褪储。 她就那樣靜靜地躺著卵渴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鲤竹。 梳的紋絲不亂的頭發(fā)上浪读,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音辛藻,去河邊找鬼碘橘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛吱肌,可吹牛的內(nèi)容都是我干的痘拆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼氮墨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼纺蛆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起规揪,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤桥氏,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后猛铅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體字支,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年奕坟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祥款。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡月杉,死狀恐怖刃跛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情苛萎,我是刑警寧澤桨昙,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布检号,位于F島的核電站,受9級(jí)特大地震影響蛙酪,放射性物質(zhì)發(fā)生泄漏齐苛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一桂塞、第九天 我趴在偏房一處隱蔽的房頂上張望凹蜂。 院中可真熱鬧,春花似錦阁危、人聲如沸玛痊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)擂煞。三九已至,卻和暖如春趴乡,著一層夾襖步出監(jiān)牢的瞬間对省,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工晾捏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蒿涎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓粟瞬,卻偏偏與公主長(zhǎng)得像同仆,于是被迫代替她去往敵國(guó)和親萤捆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子裙品,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容