言歸正傳,我認(rèn)為有三點不可或缺:分析、實驗和膽量。
分析主要有定性分析和定量分析。實際操作中,前者主要針對的是模型維度的估計,用來考慮一個組件是否有可能達(dá)到它宣稱的目的,后者主要用來驗證,用來確認(rèn)它是否在真的做到了。
比如在語言選型時,你要考慮它的范型、內(nèi)存模型和并發(fā)設(shè)計;數(shù)據(jù)庫選型時你要考慮存儲模型、支撐量級、成本開銷;開源項目要考慮它的社區(qū)發(fā)展、文檔完善程度;如果是庫或者中間件,還要考慮他的易用性、靈活性以及可替代性,等等。
需要說明的一點是,我個人并不覺得閱讀全部源碼或者文檔這種事情是必須的,這不局限在OS、VM層面。不僅因為這樣的事情會耗費過多精力,而且受制于代碼以及文檔質(zhì)量,就算真正閱讀完畢也未必意味著完全領(lǐng)會。
這些都是定性的,而定性的東西就有可能存在理解偏差。一個庫可以完成工作,并不代表它在高并發(fā)壓力下依然表現(xiàn)正常;一個語言做到了自動管理內(nèi)存,并不代表他能做得很好沒有副作用;一件事情設(shè)計者覺得達(dá)到了目標(biāo)并不代表能夠滿足使用者期望。因此我們還需要量化分析,也就是一直口口相傳的,用數(shù)據(jù)說話。
量化分析需要你構(gòu)建或使用現(xiàn)成的工具和數(shù)據(jù)集,對服務(wù)進行特定場景下的分析。通過提高壓力、增加容量或者針對性的測試,來驗證之前的定性分析是否達(dá)到預(yù)期,并分析不同技術(shù)之間的差異和表現(xiàn)。
量化分析可以為真正的實驗做一些準(zhǔn)備和幫助,但是實驗要走的明顯更遠(yuǎn)。到了這一步,意味著要在真正的業(yè)務(wù)場景下進行驗證,這跟量化分析中通用性場景有所不同。
在真正的業(yè)務(wù)中采用需要很多細(xì)致和瑣碎的工作,除此之外,還要構(gòu)建自己的測試工具集,這需要非常扎實的業(yè)務(wù)理解能力和勤奮的工作。而所有這些,你需要在開發(fā)環(huán)境做一次,在沙箱環(huán)境做一次,然后在仿真環(huán)境再做一次。
這幾步經(jīng)常被簡化,但經(jīng)驗告訴我們,如果你想做一個高可用的系統(tǒng),你就不應(yīng)該少走任何一步。
“步子大了,容易扯到蛋?!?/p>
實驗做完,剩下的就是上線,但這一步有很多人跨不過去。因為就算做了再多準(zhǔn)備,你依然不敢說百分百保證沒問題。現(xiàn)實情況是,80%的線上問題都是升級或者上線引起的。
你需要膽量。
這不是說要硬著頭皮做,人家都是藝高才膽大。所以為了讓膽子大一點,你首先需要考慮降級和開關(guān)。從最悲觀的角度來重新審視整個方案,如果升級出現(xiàn)問題怎么辦,如何才能讓出現(xiàn)的問題影響最小化。
而只要弄完了這些,也就只要再記住一句話就行:
“你行你上啊!”
更多建議: