以做菜為例來(lái)看為什么動(dòng)不動(dòng)要系統(tǒng)重構(gòu)?

0 評(píng)論 930 瀏覽 0 收藏 7 分鐘

從簡(jiǎn)單的功能優(yōu)化到復(fù)雜的架構(gòu)升級(jí),系統(tǒng)重構(gòu)往往伴隨著高昂的時(shí)間成本和技術(shù)挑戰(zhàn)。本文通過(guò)一個(gè)生動(dòng)的做菜場(chǎng)景,深入淺出地解釋了系統(tǒng)重構(gòu)的重要性和必要性。

相信在產(chǎn)品經(jīng)理的職業(yè)生涯中,大家不止一次聽(tīng)過(guò)系統(tǒng)重構(gòu)這個(gè)詞。

而且所有產(chǎn)品經(jīng)理都經(jīng)歷過(guò)這樣的魔幻時(shí)刻:明明只是加個(gè)篩選條件,技術(shù)評(píng)估卻要3個(gè)月;想優(yōu)化某個(gè)功能按鈕,卻被告知整個(gè)頁(yè)面都要重寫(xiě)。

一問(wèn)原因:因?yàn)橐到y(tǒng)重構(gòu)!

那到底什么是重構(gòu)呢?

如果用一個(gè)我親身經(jīng)歷過(guò)的例子來(lái)解釋重構(gòu)的重要意義就是:

我當(dāng)年所在某電商平臺(tái)在一次促銷(xiāo)活動(dòng)時(shí),導(dǎo)致每秒峰值訂單突破5000萬(wàn)時(shí),訂單系統(tǒng)響應(yīng)速度從200ms驟升至2秒,注意是每單哦!

最后一番排查發(fā)現(xiàn):優(yōu)惠計(jì)算模塊與庫(kù)存模塊存在循環(huán)調(diào)用,核心業(yè)務(wù)邏輯與日志模塊深度耦合。

想象這樣的場(chǎng)景:炒鍋師傅(優(yōu)惠模塊)每做一份宮保雞丁,都要跑到倉(cāng)庫(kù)(庫(kù)存系統(tǒng))確認(rèn)花生庫(kù)存,再折返調(diào)料臺(tái)(日志系統(tǒng))記錄操作日志。高峰期這樣的折返跑,不出餐慢才是奇跡。

同過(guò)這個(gè)做菜的例子大家很容易理解,這并不是因?yàn)檐浖O(shè)計(jì)失誤,而是廚房(系統(tǒng))擴(kuò)張后的必然代價(jià),單多了你就要優(yōu)化的工序,要么加人要么提前做準(zhǔn)備,相信沒(méi)有人會(huì)去說(shuō)廚師你怎么怎么樣對(duì)吧?

不過(guò)很多時(shí)候,在我做咨詢(xún)走訪(fǎng)很多公司時(shí),第一時(shí)間這個(gè)團(tuán)隊(duì)的信息化負(fù)責(zé)人的結(jié)論都是會(huì)把這個(gè)問(wèn)題甩到“初代”產(chǎn)品經(jīng)理身上,聲稱(chēng)是“初代”系統(tǒng)的產(chǎn)品經(jīng)理的設(shè)計(jì)不合理所導(dǎo)致了今天的一切。

但是我想說(shuō):重構(gòu)系統(tǒng)是不可避免的!初期就沒(méi)有幾個(gè)客人的時(shí)候你要做一個(gè)航母出來(lái)也沒(méi)有用?。?/p>

那今天我就給大家盤(pán)點(diǎn)一下重構(gòu)的觸發(fā)條件(避免在規(guī)劃會(huì)上被甩鍋):

01【產(chǎn)品驅(qū)動(dòng)】功能疊加困境:新需求開(kāi)發(fā)周期超過(guò)3個(gè)月

【大白話(huà)解讀】你是一家賣(mài)燒烤的店,當(dāng)某天老板讓你推出酸菜魚(yú)的時(shí)候,你要做的就是需要重建灶臺(tái),先把一部分烤爐改成煤氣灶。

02【產(chǎn)品驅(qū)動(dòng)】協(xié)作效率低下:跨團(tuán)隊(duì)需求需修改5個(gè)以上模塊,這背后往往是領(lǐng)域劃分不到位。

【大白話(huà)解讀】三個(gè)廚師擠在一個(gè)灶臺(tái)炒菜,你覺(jué)得會(huì)不會(huì)打架?

03【技術(shù)驅(qū)動(dòng)】系統(tǒng)性能瓶頸:核心接口成功率低于99%

【大白話(huà)解讀】相當(dāng)于廚房出餐錯(cuò)誤率超過(guò)10%

那我們要如何處理系統(tǒng)重構(gòu)呢?

實(shí)時(shí)上按照現(xiàn)在企業(yè)的要求:重構(gòu)就像在一家正常營(yíng)業(yè)的餐廳去升級(jí)后廚——客人們照常吃著火鍋,后廚卻在悄然更換排風(fēng)系統(tǒng)。

所以要求我們決不能停機(jī)!為此具體的執(zhí)行步驟可以定義為下面的三大部分:

Step1:先搭臨時(shí)灶臺(tái)(顧舊立新)

在后廚角落搭建一個(gè)新的煤氣灶,保持老系統(tǒng)不再迭代,在旁邊根據(jù)新的產(chǎn)品規(guī)劃重新設(shè)計(jì)整個(gè)功能并實(shí)現(xiàn)。

Step2:食材統(tǒng)一分裝(接口翻譯層)

老顧客依然要吃到熟悉的”麻辣香鍋”,即便后廚已經(jīng)改用智能炒菜機(jī)。

我們知道很多時(shí)候在重構(gòu)的時(shí)候由于新的方案的應(yīng)用,比如用戶(hù)希望取消早已經(jīng)不用的某個(gè)字段,很多老系統(tǒng)的交互還是用生成一個(gè)文件的形式定時(shí)去查詢(xún)(很多銀行系統(tǒng)現(xiàn)在還是這樣)。

注意這個(gè)時(shí)候我們要做的是必須保證提供的數(shù)據(jù)消費(fèi)方式和命名方式都是之前的(比如之前叫userID),我們要做的是必須額外建設(shè)一個(gè)新的翻譯模塊,把所有新的數(shù)據(jù)格式與接口翻譯成之前的模式,這么做的最重要一點(diǎn)是,避免當(dāng)某天下游報(bào)錯(cuò)的時(shí)候,別人可以直接把一本糊涂賬扔到你頭上,都是因?yàn)槟阒貥?gòu)系統(tǒng)導(dǎo)致的,我數(shù)據(jù)都亂了(別問(wèn)我怎么知道的,血和淚換來(lái)的)。

Step3:動(dòng)線(xiàn)魔法改造(數(shù)據(jù)雙寫(xiě)+灰度發(fā)布)

就像在傳菜通道加裝自動(dòng)分揀機(jī),先讓新模塊處理5%的流量,同時(shí)保持老系統(tǒng)運(yùn)轉(zhuǎn)。當(dāng)新模塊的到達(dá)率穩(wěn)定在99.97%后,才逐步關(guān)閉老舊代碼。

所以總結(jié)一下就是:

  • 蓋新屋子:保持老房子對(duì)外輸出不變,在旁邊另起爐灶;
  • 保持對(duì)外輸出不變:翻譯成現(xiàn)有接口的輸出格式:字段叫法/字段類(lèi)型/消費(fèi)方式;
  • 灰度切換流量:逐步將老系統(tǒng)的流量切換至新系統(tǒng),最后關(guān)停老系統(tǒng);

當(dāng)然在文章的最后結(jié)尾,必須給大家補(bǔ)充一個(gè)我的經(jīng)驗(yàn)教訓(xùn):

重構(gòu)這件事在任何一家公司都是出力不討好的事,活又多,風(fēng)險(xiǎn)又高,如果你不幸接手了,那你要做的必須要讓你的業(yè)務(wù)可感知,也就是通過(guò)重構(gòu)給業(yè)務(wù)側(cè)帶來(lái)新的業(yè)務(wù)價(jià)值提升(速讀/解決舊歷史問(wèn)題/解決之前業(yè)務(wù)不能實(shí)現(xiàn)的需求),否則重構(gòu)的過(guò)程就將無(wú)比艱難!

下次再聽(tīng)到”需要重構(gòu)”時(shí),請(qǐng)記住:這不是在否定你的設(shè)計(jì),而是邀請(qǐng)你參與指揮一場(chǎng)廚房革命。畢竟,在數(shù)字化生存時(shí)代,不會(huì)用架構(gòu)思維武裝自己的產(chǎn)品經(jīng)理,終將成為被重構(gòu)的對(duì)象。

本文由人人都是產(chǎn)品經(jīng)理作者【三爺茶館】,微信公眾號(hào):【三爺茶館】,原創(chuàng)/授權(quán) 發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來(lái)自Unsplash,基于 CC0 協(xié)議。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 目前還沒(méi)評(píng)論,等你發(fā)揮!