"產品設計:冗餘、安全與效率"

互聯網上對於冗餘的專項研究寥寥,然而無論是產品使用流程規劃還是系統設計,冗餘都應該成為一種思考的尺度和方式,幫助我們做出更好的選擇。

什麼是冗餘?

維基百科中冗餘的定義是:

系統為了提升其可靠度,刻意配置重覆的零件或是機能。

冗餘是系統視角中才有的獨特概念,冗餘無法單獨存在。如我們可以說數據異地備份是數據存儲系統的冗餘設計,但是不能說數據存儲在 3 個不同地理位置的機房是冗餘。

我對於冗餘的興趣,最早來自學校的打印店。很多大部頭的書或者論文(雖然很多文字是無意義的廢話)打印出來進行熱膠裝。由於紙張沒有辦法十分精準地對齊,打印店通常都會用一個機器裁切:將裝訂好的書本放進去,然後調整好尺寸,之後師傅雙手需要同時按住位於機器左右兩側的按鈕,鍘刀才會下來將書本裁剪整齊。

從機械設計來說,一個按鈕也可以實現閘刀的起落,因此起初我以為是機器型號所導致的按鈕設置,直到我寫了更多無用的長篇論文,在不同打印店里見證了一次又一次鍘刀的起起落落,才發現按鈕在機器的兩側其實是一種標準設計。

原因很簡單:安全——只有兩隻手同時按下操縱按鈕,鍘刀才會啟動,保證鋒利的鍘刀不會傷害到人手。

很多公司的熱飲水機也加入了類似的冗餘設計:如果想要出熱水,需要額外按住一個功能鍵,以防止誤操作導致被燙傷。

今年受疫情影響,我們在家裡辦公了很長一段時間。為了保證每位員工沒有在家划水,老闆開始要求每天寫日報、每天開晨會同步當天工作內容與進展。從公司運行系統來講,晨會和日報的制度,也是在 KPI、雙月績效之外的一種冗餘設計。

所以,我又重新激發了對於冗餘的興趣,特別感興趣的是冗餘的必要性,以及它與效率之間的關係。

冗餘設計

只要仔細觀察,你會發現冗餘在生活、工作中無處不在,甚至在人的身體器官中,眼睛、耳朵等器官的雙備份機制也是一種冗餘機制,保證人體的正常運轉。

工程中的冗餘設計

冗餘設計在工程中應用非常廣泛。

今年 3 月,旗下的獵鷹 9 號成功發射,但是回收失敗,因為在發射過程中,獵鷹 9 號的其中 1 個發動機爆炸,得益於獵鷹 9 號動力系統的冗餘設計,火箭上共有 9 台發動機,其中 1 台發生了爆炸之後,其他發動機繼續正常工作,才保證衛星正常進入軌道中。

圖片源自網絡

在航天飛機中,冗餘設計更是隨處可見。引用一篇介紹 NASA 冗餘設計的文章:

航天飛機……而是依靠四台獨立的計算機運行相同的導航和制導軟件,並接收相同的數據輸入。這四台計算機作為民主的縮影而運作。它們中的三台計算機必須就它們所衡量的內容達成共識,才能採取行動。

如果三台計算機同意,而第四台計算機不同意,那麼出現這種情況宇航員就會關機或重新啟動它。這就使得避免災難或代價高昂的停頓所需的快速決策成為必要。如果多台計算機出現故障,或者無法達成共識,那麼一臺同樣可以訪問航天飛機控制系統的額外計算機就可以接管。它可以進行預編程的粗略(但安全)的上升、中止和再入。

——InfoQ. 在太空里不懼宕機,NASA是怎麼做到的?

制度設計中的冗餘

高中學習宋史時,都會頻繁提及“冗官”、“冗兵”、“冗費”的“三冗”。據資料:

北宋官吏2.4萬人,是唐朝的1.28倍;每10萬人中平均擁有的官吏數是51人,不僅超過唐朝的35人,也超過元(27人)和明(37人)。

——劉篤才&楊一凡:論北宋的冗官問題

造成官吏冗餘的重要原因一方面是大量恩蔭制度造成的官員累積,更重要的是為了分散權力,設置了諸多機構,如中央將宰相權力一分為三,在地方設置通判分割行政權,又設置轉運使和按察使分割司法權。此外,宋朝官制中官、職、差遣三者分離,官制職能重疊,難免導致冗官,特別是在宋朝後期。

我們部門設置的晨會+日報機制,本質上也是一種制度冗餘。雖然我很厭倦晨會,但是一想到第二天要在晨會上說點什麼,今天總得寫一點什麼、做一點什麼,即使是“面向晨會”的工作,也總是逼迫著自己有一些產出。最初我們的晨會開的像周會,每次能開 1 個多小時,導致大量時間被浪費。

不是所有的制度冗餘造成的結果都是負向的。例如在我國,機場塔臺管制員實行雙崗制,一個是主管制員,直接指揮飛機,另一位則是助理管制員,負責監聽與監督,當主管制員發出的指令有誤時,助力管制員需要及時提醒與糾正,兩人共同決策。通過兩個人的決策,減少因決策失誤導致的事故發生的可能性。

實際上,2016 年上海虹橋機場兩架東航飛機險些相撞的事故,事後調查認為差點釀成悲劇的原因,雙崗制落實不到位被重點提出來。

冗餘機制

如何設計冗餘?

主動冗餘與被動冗餘都是常見的冗餘機制設計。

主動冗餘指的是系統自動監控運行,一旦檢測到某個設備損壞,則會調整系統配置切換到正常設備上。例如 GPS 定位系統中除了 24 顆在軌的衛星,還有 3 顆備份衛星,一旦某顆衛星“壽終正寢”或者突發故障而導致不能工作,則可以由備份衛星及時頂上。在主動冗餘系統中,系統必須實現錯誤檢測、隔離重配置的自動化。

公開報道中,Google 的無人車在電源、定位測量、轉向、制動和計算系統中均有主動冗餘設計,一旦某個子系統出現某個問題,系統會自動切換到備用系統中,以最大程度保證安全。

被動冗餘則是通過多餘的設備或能力,來減少某個零部件損壞引發的損失。如在設計橋梁拉索的承重能力的時候,一般都會在要求之上再加一些額外的承受能力。再比如你在今晚 6 點鐘跟別人有一場重要的約會,通常你不會根據地圖估算的時間掐點到,而是會充分考慮堵車、等車額外需要花費的時間,多拿出半個小時的時間作為備用。

N 模塊冗餘(N Modular Redundacy):通過 N 個系統對同一個輸入進行計算,比較輸出的結果,對結果進行投票,取大多數的輸出為最後的輸出。

常見的為三重模塊冗餘:如果 3 個系統計算的結果不一致,取 2 個一樣的結果為最後輸出。

冗餘與安全

冗餘一般為安全而設計,例如上文提到的機場塔臺雙崗制,然而隨著系統複雜性提高,冗餘讓系統複雜性提高,反而可能會產生意外的錯誤,特別是冗餘中有人的因素的時候,發生錯誤的概率也會提升。

1929 年,美國三哩島核電站發生核泄漏,是美國商業核電史上最嚴重的的一次事故,雖然沒有對公共安全和周圍居民健康造成不良影響,但核污染的清除,總共花了 14 年的時間與 10 億美元的代價,更重要的是,美國商業核電站陷入長期低迷中。

2 號機組反應堆冷凝水泵突然故障,反應堆中熱量堆積導致堆芯壓力上升,此時備用水泵按照程序應該啟動,替代故障水泵完成冷卻水的供水,然而備用水泵沒有按照計劃啟動,因為前兩天的一次檢修中,輔助給水系統中隔離閥沒有按規定打開,導致備用給水系統沒有任何反應。整個事件處理過程中,加上一些人為的錯誤,差點導致堆芯熔毀和放射性物質逸出。

雖然經過 15 個多小時的奮力搶修,反應堆才幸免於難,然而迫於公眾壓力,時任總統卡特宣佈“美國不再建設核電站”,直到近 30 年之後奧巴馬時代才重啟核電站項目。

冗餘設備讓人放鬆警戒,可能會引發更大事故。典型的如特斯拉的自動駕駛系統,讓人誤以為是安全的,很多事故中司機手離開方向盤,將所有決策交給 Autopolit,最終導致交通事故的發生。

所以業內一直在爭論:到底是 L3 級別的輔助駕駛更安全,還是 L5 級別的完全無人駕駛更加安全。L3 級別的駕駛,還沒有達到完全自動的狀態,但是讓司機誤認為可以將決策交給自動駕駛系統,或者由於自動駕駛系統的存在降低了註意力,最終導致事故的發生。

冗餘與效率

直覺上,冗餘設計似乎與效率相背而行,但是在一個完整的系統下考慮,一定程度的冗餘可以保證系統的穩定性與可靠性,減少因為錯誤導致系統宕機的概率,從而提升效率。然而凡事“過猶不及”,一味追求穩定性而增加冗餘設計,最終也會損傷效率。儘管沒有明確度量冗餘、效率的指標,如果將冗餘和效率分別放在橫縱坐標上,畫出來的一定又是一條“微笑曲線”。

刪除是我們在產品設計中的常見功能之一。一般而言,刪除之前會通過一個彈窗的形式進行二次確認,避免用戶操作失誤導致的誤刪除。然而,我們也見識過PC端各類殺毒軟件的全家桶,除了各種捆綁下載、後臺靜默安裝之外,卸載操作時反覆確認操作、增加用戶的卸載成本,也是讓人厭惡的騷操作。

互聯網上對於冗餘的專項研究寥寥,然而無論是產品使用流程規劃還是系統設計,冗餘都應該成為一種思考的尺度和方式,幫助我們做出更好的選擇。

作者:餘子申;公眾號:簡寫2019

本文由 @餘子申 原創發佈於人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基於CC0協議

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *