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