寫在前面的話
業(yè)務復雜魏铅,做業(yè)務的產品更復雜昌犹。
越是復雜的業(yè)務產品,所依賴的外圍系統(tǒng)可能就越多览芳。
假如突然有一天斜姥,依賴的外圍系統(tǒng)掛掉了,少俠你是否給業(yè)務留了后路沧竟?
可能前面的話聽上去有點暈疾渴,到底啥意思?
來屯仗,舉個栗子??搞坝。
假如今天饅頭去醫(yī)院體檢,需要經(jīng)歷的體檢流程“1-2-3-4”如上圖所示魁袜。但這里有個變態(tài)規(guī)則就是:必須按流程順序完成1-4的所有環(huán)節(jié)桩撮,體檢才算成功。(翻譯過來就是說:每完成一步峰弹,1-4的應用系統(tǒng)會將數(shù)據(jù)返回給到體檢系統(tǒng)店量,并觸發(fā)體檢系統(tǒng)向下一應用系統(tǒng)請求數(shù)據(jù)。當體檢系統(tǒng)依次向4個應用系統(tǒng)分別請求數(shù)據(jù)成功后鞠呈,則記為“體檢成功”融师。如果一旦體檢系統(tǒng)某次請求數(shù)據(jù)失敗,體檢系統(tǒng)則不會繼續(xù)向下一應用系統(tǒng)請求數(shù)據(jù)蚁吝,處于“體檢進行中”的狀態(tài))
假如此時旱爆,血常規(guī)檢查的儀器掛掉了,而down機時間又不確定窘茁。但因為變態(tài)的規(guī)則怀伦,導致饅頭我只得停留在第2步“血常規(guī)檢查”,體檢因此無法繼續(xù)進行下去山林。同時隨著down機時間的延長和醫(yī)院體檢人數(shù)的增加房待,停留在第2步而無法繼續(xù)進行下去的人越來越多,情緒上已處于失控狀態(tài);但此時院方又束手無策桑孩,因為這是體檢系統(tǒng)寫死的規(guī)則拜鹤,不可更改。所以流椒,此時此刻只有2種解決方案:要么告訴大家耐心等待署惯,直至血常規(guī)檢查的儀器恢復正常,要么告知大家該回家的回家镣隶,該上班的上班极谊,改日再來醫(yī)院體檢。我相信如果少俠是體檢的同學安岂,那此時的內心早已是崩潰的...
大家發(fā)現(xiàn)沒有轻猖,正是因為產品設計上沒有考慮到異常流,因此導致在異常情況發(fā)生時埋下了這個天坑域那。由此可見咙边,做產品留后路非常重要!
留后路次员,什么意思败许?
還是剛才的例子,假如我在設計體檢系統(tǒng)的產品時淑蔚,讓技術同學寫一串代碼:“if 血常規(guī)檢查系統(tǒng)down機所引起的數(shù)據(jù)請求失敗市殷,則直接進行下一應用系統(tǒng)的數(shù)據(jù)請求∩采溃”大家發(fā)現(xiàn)沒有醋寝,此時體檢系統(tǒng)就會直接跳過血常規(guī)數(shù)據(jù)的請求,來請求心電應用系統(tǒng)的數(shù)據(jù)带迟。換言之音羞,也就是說我可以不用作血常規(guī)檢查直接進行心電圖檢查,到最后體檢依然是成功的仓犬⌒岽拢可能唯一的問題就在于我拿到的體檢報告中,血常規(guī)這一項是沒有檢查結果的搀继。不過假如體檢的同學不在乎窘面,那這就不叫問題。
那其實剛剛所說的就叫異常降級策略律歼。比如上述設計中民镜,當我們的系統(tǒng)調用外圍系統(tǒng)出現(xiàn)超時等報錯情況下啡专,可以讓我們的系統(tǒng)吃掉異常的情況繼續(xù)業(yè)務险毁,這就是一種異常降級策略。當然了,一般來說是有3種不同程度的異常降級策略畔况,但這些是需要視業(yè)務的重要性來決定究竟采取何種策略鲸鹦。
現(xiàn)在我們以醫(yī)院的體檢系統(tǒng)產品為例來解釋一下上圖的含義。在1-4的體檢流程中跷跪,第一步非常重要馋嗜,原因是在信息沒有注冊的情況下,這個體檢是沒有意義的吵瞻,因為到頭來不知道在為“誰”做體檢葛菇。所以,由此可見“信息注冊”的業(yè)務重要性相對其他環(huán)節(jié)要高橡羞,因此如果一旦系統(tǒng)請求信息注冊的數(shù)據(jù)有問題眯停,就默認攔截不要業(yè)務下去了。那這里的高風險又是什么意思卿泽?因為一旦攔截就不能繼續(xù)業(yè)務莺债,比如信息無法注冊導致tmd我就不能體檢了,醫(yī)院的體檢就不能搞起了(至少是在此時此刻和未來的一段時間內)签夭,所以對業(yè)務來說一定是高風險的齐邦。那像“打印體檢報告”這一環(huán)節(jié),業(yè)務上的重要性就低很多第租,因為此時此刻我不能打印體檢報告措拇,我照樣可以在手機或pc上查看到體檢報告的數(shù)據(jù),再不濟可以改日來醫(yī)院打印體檢報告慎宾。所以儡羔,如果體檢報告的打印出現(xiàn)了問題,可以采取直接放行跳過的降級策略璧诵,最終是能夠保證體檢成功的汰蜘,那這里所帶來的業(yè)務風險就幾乎為0了。
不過之宿,大家有沒有注意到無論采取何種異常降級策略族操,我們的系統(tǒng)每跑一次業(yè)務都是要去請求一次外圍系統(tǒng),來看看外圍系統(tǒng)是否down機比被,如果down機就采取相應的異常降級策略色难,其實這樣“每跑一次業(yè)務就去請求一次”的處理效率是很低的。
因此也就有了主動降級策略的概念等缀,什么意思枷莉?就是我可以在后臺配置一個開關來主動控制系統(tǒng)是否直接跳過向外圍系統(tǒng)請求的過程。假設我已經(jīng)監(jiān)測到“信息注冊”的系統(tǒng)down掉了尺迂,那我就可以直接推開關來命令體檢系統(tǒng)在接下來的一段時間內不再去請求該外圍系統(tǒng)笤妙,這樣就大大提升了業(yè)務進行的效率冒掌,原因是我干掉了向down機系統(tǒng)進行不必要的請求詢問的時間。
所以回到體檢這件事蹲盘,如果我是設計者股毫,就會采取相應的異常降級策略和主動降級策略。第1步信息注冊的異常降級策略是“默認攔截”召衔,第2步铃诬、第3步的血常規(guī)檢查和心電檢查的異常降級策略是“日常攔截,緊急放行”苍凛,而第4步體檢報告打印的異常降級策略就是“默認放行”趣席。另外,我還會在后臺做三個開關來對第2步醇蝴、第3步吩坝、第4步實施主動降級策略。
這樣的話哑蔫,即便哪天業(yè)務君對饅頭哭訴機器突然掛掉的悲傷故事時钉寝,饅頭我依然可以微笑地看著業(yè)務君并溫柔地對他說:“別怕,有我闸迷!你看嵌纲,我給業(yè)務留了后路...”
我叫饅頭,一名90后互聯(lián)網(wǎng)產品經(jīng)理腥沽。如果喜歡我逮走,一定記得關注我。