沒有回退功能的設(shè)計(jì)是失敗的設(shè)計(jì)

2022-05-11    分類: 網(wǎng)站建設(shè)

要一直能回退代碼。確保所有的版本都能夠回退,在一個(gè)階段或QA環(huán)境中,要實(shí)踐回退功能。在生產(chǎn)環(huán)境中,當(dāng)必須用它解決突發(fā)事件時(shí),要使用回退功能整理代碼,制定幾個(gè)簡單的流程,確保能夠回退自己的代碼。
如果你還沒有經(jīng)歷過不能回退系統(tǒng)的痛苦,那么如果繼續(xù)玩火,不停地迅速修復(fù)系統(tǒng),遲早會(huì)遇到這種問題。不要用應(yīng)用太復(fù)雜或者代碼發(fā)布太頻繁作為借口,拒不加入回退代碼的功能。一個(gè)明智的飛行員,如果沒有具備讓飛機(jī)著陸的能力,就不會(huì)讓飛機(jī)起飛。一個(gè)明智的程序員,如果不能讓系統(tǒng)在緊急情況下回退代碼,就不應(yīng)該發(fā)布代碼。

為了給接下來要講的原則制造氣氛,我們應(yīng)該在深夜圍坐在一堆篝火周圍講恐怖故事。我們要講的是經(jīng)典的恐怖故事,就是人們在房子里聽到了恐怖的聲音但并不逃跑的事。那些忽視所有警告信號的傻瓜就是我們。作為程序員的上司和CTO,我們收到過幾平每個(gè)經(jīng)理架構(gòu)師和程序員的匯報(bào):應(yīng)用太復(fù)雜了,不能進(jìn)行回退。我們自己對此也確信無疑。代碼發(fā)布后曾經(jīng)出現(xiàn)過幾次中斷或問題,先是瘋狂地迅速修復(fù),之后在同一天中得到一個(gè)熱修復(fù)補(bǔ)丁,以便完全恢復(fù)服務(wù)。我們?nèi)淌芰诉@種小小的不便,因?yàn)槲覀冋J(rèn)為這個(gè)應(yīng)用太復(fù)雜了,不能進(jìn)行回退。
和之前發(fā)布的所有版本一樣,一個(gè)主要的基礎(chǔ)設(shè)施的版本發(fā)布后,也不能進(jìn)行回退。這次發(fā)布簡直是場災(zāi)難。凌晨時(shí),一切看起來都很好但當(dāng)天亮了以后,流量激增,這個(gè)站點(diǎn)就招架不住了。如果回退,只會(huì)讓幾個(gè)用戶不高興,給自己留點(diǎn)兒小傷痕,但不會(huì)有更糟的事情了。但我們卻不能回退,所以只好花費(fèi)一整天的時(shí)間,為這個(gè)站點(diǎn)做點(diǎn)兒增加容量、限制流量等工作,以便在得到修復(fù)補(bǔ)丁之前保持一切仍然運(yùn)行。那天晚上我們推出了一個(gè)補(bǔ)丁,當(dāng)時(shí)站點(diǎn)并沒有流量,所以我們認(rèn)為問題已經(jīng)修復(fù)了。第二天早晨,當(dāng)流量增加后,這個(gè)站點(diǎn)又開始有問題了。只好又在晚上打補(bǔ)丁…這種模式持續(xù)了一周多。
接連折騰了這么多天,到那周結(jié)束時(shí),所有人都已精疲力竭。最后,我們打了一個(gè)補(bǔ)丁,完全忽略之前的所有修改,終于使站點(diǎn)穩(wěn)定了。雖然從這次事故(包括指揮失誤)中可以學(xué)到很多東西,但與本條原則關(guān)系最緊密的是,無論我們還是客戶所經(jīng)歷的所有痛苦都是可以通過回退代碼避免的。
事后總結(jié)經(jīng)驗(yàn)教訓(xùn),我們確定日后不允許再發(fā)布沒有回退功能的版本。當(dāng)時(shí)除了發(fā)出這個(gè)布告外,我們別無選擇,客戶無法容忍這種性質(zhì)的問題,每個(gè)程序員也都理解了這種要求的必要性。六周后,當(dāng)下一個(gè)版本準(zhǔn)備好時(shí),我們已經(jīng)能夠進(jìn)行回退了。我們曾經(jīng)都認(rèn)為難以克服的困難變得相當(dāng)簡單了。
下面列出了要具備回退功能需要注意的幾個(gè)關(guān)鍵點(diǎn)。是的,回退的主要難點(diǎn)在于數(shù)據(jù)庫。通過仔細(xì)檢査應(yīng)用,一一排除那些明顯的問題,然后堅(jiān)持幾個(gè)簡單的原則,所有團(tuán)隊(duì)都能夠進(jìn)行回退。
口數(shù)據(jù)庫修改只能是増量的。在下一個(gè)廢除了列之間的依賴關(guān)系的版本發(fā)布前,只能添加數(shù)據(jù)庫中的列或表,不能刪除。一旦實(shí)施了這些標(biāo)準(zhǔn),每個(gè)版本都應(yīng)該有一部分代碼專門用于清除上一個(gè)版本遺留的不再需要的數(shù)據(jù)。
口DDL和DML必須腳本化且測試過。每個(gè)版本中對數(shù)據(jù)庫的修改必須通過腳本實(shí)現(xiàn),而不能手動(dòng)進(jìn)行。其中應(yīng)該包括回退腳本。這樣做的原因有兩點(diǎn):1)團(tuán)隊(duì)需要在QA或某個(gè)階段測試回退操作,以便驗(yàn)證什么都沒有漏掉,不會(huì)妨礙回退;2)需要在一定負(fù)載的條件下測試腳本,確保在應(yīng)用程序使用數(shù)據(jù)庫時(shí),它仍然能夠執(zhí)行。
口對應(yīng)用中的SQL查詢進(jìn)行約束。開發(fā)團(tuán)隊(duì)需要消除所有SQL語句中的歧義,刪除所有SELECT*查詢,并且給UPDATE語句加上要更新的列的名字。
口數(shù)據(jù)的語義修改。在發(fā)布版本中,開發(fā)團(tuán)隊(duì)不能修改數(shù)據(jù)的定義。舉個(gè)例子。票務(wù)表中的一列用于存放狀態(tài)信號,其中有三個(gè)值assigned、fixed和closed。在應(yīng)用的新版本中,如果沒有發(fā)布處理新狀態(tài)的代碼,就不能添加第四個(gè)狀態(tài)。
口WireOn/ireOff。應(yīng)該讓應(yīng)用結(jié)構(gòu)化,使其能根據(jù)外部配置,讓有些用戶能夠訪問某個(gè)代碼路徑和功能,而有的用戶則不能訪問。這種設(shè)置可以存放在配置文件中,也可以存放在數(shù)據(jù)庫表中既能夠根據(jù)角色賦予訪問權(quán)限,也能夠根據(jù)隨機(jī)百分比分配權(quán)限。有了這種結(jié)構(gòu),就能夠讓有限的用戶對新功能進(jìn)行beta測試,而且能夠迅速地刪除主要bug的代碼路徑,從而不必回退整個(gè)代碼。我們得到的教訓(xùn)雖然慘痛,但是很有網(wǎng)站建設(shè)價(jià)值,有了這次教訓(xùn),我們再也不會(huì)發(fā)布不能回退的代碼了。即使以后和其他團(tuán)隊(duì)一起工作,我們也會(huì)這樣要求自己的。可見,這些原則并不復(fù)雜,而是相當(dāng)簡單,任何團(tuán)隊(duì)都能夠應(yīng)用它們,都能具備回退的能力。

網(wǎng)站欄目:沒有回退功能的設(shè)計(jì)是失敗的設(shè)計(jì)
新聞來源:http://m.kartarina.com/news/151965.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名微信小程序品牌網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)關(guān)鍵詞優(yōu)化Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
主站蜘蛛池模板: 精品久久无码中文字幕| 亚洲av片不卡无码久久| 日韩精品无码熟人妻视频| 少妇人妻偷人精品无码视频| 中文字幕人成无码人妻综合社区| 精品久久久久久无码人妻中文字幕 | 无码专区AAAAAA免费视频| 亚洲AV无码专区在线亚| 99热门精品一区二区三区无码| 精品久久久久久无码国产 | 亚洲AV日韩AV永久无码绿巨人| 无码Aⅴ在线观看| 亚洲国产精品无码av| 人妻少妇无码视频在线| 久久AV高潮AV无码AV| 亚洲AV无码一区东京热| 超清纯白嫩大学生无码网站| 国产精品无码一区二区在线| 91久久精品无码一区二区毛片 | 无码少妇一区二区浪潮免费| 亚洲午夜国产精品无码| 亚洲无码精品浪潮| 无码精油按摩潮喷在播放| av区无码字幕中文色| 日韩精品人妻系列无码专区| 岛国无码av不卡一区二区| 国产成人无码av片在线观看不卡| 日韩av片无码一区二区不卡电影| 日韩人妻无码一区二区三区99| 亚洲国产精品无码成人片久久| 中文精品无码中文字幕无码专区| 亚洲成A人片在线观看无码3D | 麻豆亚洲AV永久无码精品久久| 精品无码国产自产拍在线观看蜜| 日韩精品人妻系列无码av东京| 无码精品国产dvd在线观看9久| av区无码字幕中文色| 久久精品日韩av无码| 小12箩利洗澡无码视频网站| 免费A级毛片无码A∨男男| 亚洲?V无码乱码国产精品|