從簡單的功能優化到復雜的架構升級,系統重構往往伴隨著高昂的時間成本和技術挑戰。本文通過一個生動的做菜場景,深入淺出地解釋了系統重構的重要性和必要性。
———— / BEGIN / ————
相信在產品經理的職業生涯中,大家不止一次聽過系統重構這個詞。
而且所有產品經理都經歷過這樣的魔幻時刻:明明只是加個篩選條件,技術評估卻要3個月;想優化某個功能按鈕,卻被告知整個頁面都要重寫。
一問原因:因為要系統重構!
那到底什么是重構呢?
如果用一個我親身經歷過的例子來解釋重構的重要意義就是:
我當年所在某電商平臺在一次促銷活動時,導致每秒峰值訂單突破5000萬時,訂單系統響應速度從200ms驟升至2秒,注意是每單哦!
最后一番排查發現:優惠計算模塊與庫存模塊存在循環調用,核心業務邏輯與日志模塊深度耦合。
想象這樣的場景:炒鍋師傅(優惠模塊)每做一份宮保雞丁,都要跑到倉庫(庫存系統)確認花生庫存,再折返調料臺(日志系統)記錄操作日志。高峰期這樣的折返跑,不出餐慢才是奇跡。
同過這個做菜的例子大家很容易理解,這并不是因為軟件設計失誤,而是廚房(系統)擴張后的必然代價,單多了你就要優化的工序,要么加人要么提前做準備,相信沒有人會去說廚師你怎么怎么樣對吧?
不過很多時候,在我做咨詢走訪很多公司時,第一時間這個團隊的信息化負責人的結論都是會把這個問題甩到“初代”產品經理身上,聲稱是“初代”系統的產品經理的設計不合理所導致了今天的一切。
但是我想說:重構系統是不可避免的!初期就沒有幾個客人的時候你要做一個航母出來也沒有用啊?
那今天我就給大家盤點一下重構的觸發條件(避免在規劃會上被甩鍋):
【產品驅動】功能疊加困境:新需求開發周期超過3個月
【大白話解讀】你是一家賣燒烤的店,當某天老板讓你推出酸菜魚的時候,你要做的就是需要重建灶臺,先把一部分烤爐改成煤氣灶。
【產品驅動】協作效率低下:跨團隊需求需修改5個以上模塊,這背后往往是領域劃分不到位。
【大白話解讀】三個廚師擠在一個灶臺炒菜,你覺得會不會打架?
【技術驅動】系統性能瓶頸:核心接口成功率低于99%
【大白話解讀】相當于廚房出餐錯誤率超過10%
那我們要如何處理系統重構呢?
實時上按照現在企業的要求:重構就像在一家正常營業的餐廳去升級后廚——客人們照常吃著火鍋,后廚卻在悄然更換排風系統。
所以要求我們決不能停機!為此具體的執行步驟可以定義為下面的三大部分:
Step1:先搭臨時灶臺(顧舊立新)
在后廚角落搭建一個新的煤氣灶,保持老系統不再迭代,在旁邊根據新的產品規劃重新設計整個功能并實現。
Step2:食材統一分裝(接口翻譯層)
老顧客依然要吃到熟悉的”麻辣香鍋”,即便后廚已經改用智能炒菜機。
我們知道很多時候在重構的時候由于新的方案的應用,比如用戶希望取消早已經不用的某個字段,很多老系統的交互還是用生成一個文件的形式定時去查詢(很多銀行系統現在還是這樣)。
注意這個時候我們要做的是必須保證提供的數據消費方式和命名方式都是之前的(比如之前叫userID),我們要做的是必須額外建設一個新的翻譯模塊,把所有新的數據格式與接口翻譯成之前的模式,這么做的最重要一點是,避免當某天下游報錯的時候,別人可以直接把一本糊涂賬扔到你頭上,都是因為你重構系統導致的,我數據都亂了(別問我怎么知道的,血和淚換來的)。
Step3:動線魔法改造(數據雙寫+灰度發布)
就像在傳菜通道加裝自動分揀機,先讓新模塊處理5%的流量,同時保持老系統運轉。當新模塊的到達率穩定在99.97%后,才逐步關閉老舊代碼。
所以總結一下就是:
蓋新屋子:保持老房子對外輸出不變,在旁邊另起爐灶;
保持對外輸出不變:翻譯成現有接口的輸出格式:字段叫法/字段類型/消費方式;
灰度切換流量:逐步將老系統的流量切換至新系統,最后關停老系統;
當然在文章的最后結尾,必須給大家補充一個我的經驗教訓:
重構這件事在任何一家公司都是出力不討好的事,活又多,風險又高,如果你不幸接手了,那你要做的必須要讓你的業務可感知,也就是通過重構給業務側帶來新的業務價值提升(速讀/解決舊歷史問題/解決之前業務不能實現的需求),否則重構的過程就將無比艱難!
下次再聽到”需要重構”時,請記住:這不是在否定你的設計,而是邀請你參與指揮一場廚房革命。畢竟,在數字化生存時代,不會用架構思維武裝自己的產品經理,終將成為被重構的對象。
本文來自微信公眾號:三爺茶館,作者:三爺茶館
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.