tp框架做網(wǎng)站的優(yōu)點(diǎn)seo網(wǎng)站排名助手
關(guān)注我,持續(xù)分享邏輯思維&管理思維; 可提供大廠面試輔導(dǎo)、及定制化求職/在職/管理/技術(shù)輔導(dǎo);
有意找工作的同學(xué),請(qǐng)參考博主的原創(chuàng):《面試官心得--面試前應(yīng)該如何準(zhǔn)備》,《面試官心得--面試時(shí)如何進(jìn)行自我介紹》。
博主其它經(jīng)典原創(chuàng):《管理心得--工作目標(biāo)應(yīng)該是解決業(yè)務(wù)問(wèn)題,而非感動(dòng)自己》,《管理心得--如何高效進(jìn)行跨部門合作》,《管理心得--員工最容易犯的錯(cuò)誤:以錯(cuò)誤去掩蓋錯(cuò)誤》,歡迎大家閱讀。
--------------------------------------正文----------------------------------------------
大家去面試時(shí),相信都能隨口說(shuō)出,架構(gòu)設(shè)計(jì)要考慮性能、可靠性、可擴(kuò)展性。可是,針對(duì)項(xiàng)目中的細(xì)節(jié)一問(wèn),架構(gòu)設(shè)計(jì)怎么考慮可靠性、性能等,很多同學(xué)都回答不好,甚至針對(duì)自己的項(xiàng)目,也講得不清不楚。下面我說(shuō)下在騰訊等大廠帶團(tuán)隊(duì)做架構(gòu)設(shè)計(jì)的幾個(gè)原則(以我做的海量存儲(chǔ)為示例來(lái)講解。該存儲(chǔ)量級(jí)為千萬(wàn)億條kv記錄的量級(jí)):
?一、關(guān)鍵路徑一定要短。數(shù)據(jù)從入口處,到落盤,這里能短就短。經(jīng)過(guò)的節(jié)點(diǎn)越多,出問(wèn)題的概率越大。以存儲(chǔ)為例:接口層Proxy(緩存了路由),直接把數(shù)據(jù)路由到應(yīng)該落地的存儲(chǔ)節(jié)點(diǎn)。關(guān)鍵路徑就2個(gè)模塊。其它作為非關(guān)鍵路徑,即使掛了也沒(méi)事,比如放全量路由的管理節(jié)點(diǎn)、比如數(shù)據(jù)異常時(shí)的遷移節(jié)點(diǎn)。當(dāng)然,如果Proxy和管理節(jié)點(diǎn)同時(shí)出問(wèn)題,會(huì)有一定的影響,但這個(gè)概率很底,而且管理節(jié)點(diǎn)邏輯比較簡(jiǎn)單,并且可以雙機(jī)熱備。
?二、非實(shí)時(shí)功能,不要集成到關(guān)鍵路徑中。比如數(shù)據(jù)有過(guò)期功能,很多人會(huì)把刪除過(guò)期數(shù)據(jù)的邏輯放到存儲(chǔ)節(jié)點(diǎn)中。但當(dāng)這個(gè)邏輯代碼出問(wèn)題的時(shí)候,或者這塊邏輯需要做功能升級(jí)的時(shí)候,都需要修改存儲(chǔ)節(jié)點(diǎn)。存儲(chǔ)節(jié)點(diǎn)發(fā)版本越多,越容易影響現(xiàn)網(wǎng)。建議有一個(gè)外圍模塊,不斷地去掃描過(guò)期數(shù)據(jù)并刪除(或給存儲(chǔ)節(jié)點(diǎn)發(fā)刪除命令,直接刪除擔(dān)心數(shù)據(jù)多處寫有一致性問(wèn)題)。這樣,刪除邏輯即使有問(wèn)題,可以讓運(yùn)維臨時(shí)擴(kuò)容解決,當(dāng)然,這個(gè)模塊需要重點(diǎn)監(jiān)控。避免出現(xiàn)問(wèn)題。
三、有狀態(tài)節(jié)點(diǎn)雙機(jī)熱備。如存儲(chǔ)節(jié)點(diǎn),本身也需要寫2-3份,以保證數(shù)據(jù)安全性。當(dāng)一臺(tái)機(jī)器出現(xiàn)問(wèn)題時(shí),可以快速切換到另一臺(tái)機(jī)器服務(wù)。這點(diǎn)相信很多做架構(gòu)的同學(xué)都能做到。
?四、無(wú)狀態(tài)節(jié)點(diǎn)盡量使用容器,以做到快速擴(kuò)縮容。當(dāng)然,即使使用物理機(jī),一般也能做到快速啟停。
?五、對(duì)DB數(shù)據(jù)進(jìn)行緩存。很多時(shí)候,DB可能會(huì)成為穩(wěn)定性或性能的瓶頸。一般情況下,建議將DB數(shù)據(jù)進(jìn)行緩存,而不是將DB作為關(guān)鍵路徑。定期從DB讀管理數(shù)據(jù),并更新緩存。這樣,DB不是關(guān)鍵路徑,也不會(huì)成為性能瓶頸。
?六、做好對(duì)賬功能。日志上,每個(gè)模塊發(fā)送、回復(fù)一個(gè)命令,需要打印日志(但現(xiàn)網(wǎng)可以關(guān)閉,只在調(diào)試時(shí)打開)。統(tǒng)計(jì)上,要有每個(gè)模塊每分鐘(或每5分鐘)接受了多少請(qǐng)求,平均處理延時(shí)是多少等。
?七、需要把正常錯(cuò)誤和異常錯(cuò)誤分開。比如存儲(chǔ)系統(tǒng)中,Get數(shù)據(jù),“數(shù)據(jù)不存在”,和“存儲(chǔ)節(jié)點(diǎn)異常”都會(huì)導(dǎo)致Get失敗。但一定要區(qū)分,一個(gè)是業(yè)務(wù)問(wèn)題,一個(gè)是系統(tǒng)問(wèn)題。
還有很多設(shè)計(jì)上要注意的點(diǎn),比如優(yōu)雅重啟,比如CoreDump數(shù)據(jù)保存等。本次先總結(jié)到這,博主相信,還有很多未概括到的點(diǎn)。有興趣的同學(xué)也歡迎私信交流。
本次是從技術(shù)上講架構(gòu)師之路,后續(xù)將在管理上講講如何成為架構(gòu)師。歡迎關(guān)注博主以獲得后續(xù)的干貨分享。