互聯(lián)網(wǎng)分層架構(gòu)的本質(zhì)架構(gòu)師之路關(guān)注共 1546字,需瀏覽 4分鐘 ·2020-08-12 00:32 經(jīng)常有朋友問我,為什么要做分層架構(gòu),什么時候架構(gòu)要抽象一層,今天來聊一聊這個問題。上圖是一個典型的互聯(lián)網(wǎng)分層架構(gòu):(1)客戶端層:典型調(diào)用方是browser或者APP;(2)站點應用層:實現(xiàn)核心業(yè)務邏輯,從下游獲取數(shù)據(jù),對上游返回html或者json;(3)數(shù)據(jù)-緩存層:加速訪問存儲;(4)數(shù)據(jù)-數(shù)據(jù)庫層:固化數(shù)據(jù)存儲;如果實施了服務化,這個分層架構(gòu)圖可能是這樣:中間多了一個服務層。同一個層次的內(nèi)部,例如端上的APP,以及web-server,也都有進行MVC分層:(1)view層:展現(xiàn);(2)control層:邏輯;(3)model層:數(shù)據(jù);可以看到,每個工程師骨子里,都潛移默化的實施著分層架構(gòu)。那么,互聯(lián)網(wǎng)分層架構(gòu)的本質(zhì)究竟是什么呢?如果我們仔細思考會發(fā)現(xiàn),不管是跨進程的分層架構(gòu),還是進程內(nèi)的MVC分層,都是一個“數(shù)據(jù)移動”,然后“被處理”和“被呈現(xiàn)”的過程,歸根結(jié)底一句話:互聯(lián)網(wǎng)分層架構(gòu),是一個數(shù)據(jù)移動,處理,呈現(xiàn)的過程,其中數(shù)據(jù)移動是整個過程的核心。如上圖所示,數(shù)據(jù)處理和呈現(xiàn)要CPU計算,CPU是固定不動的:(1)db/service/web-server都部署在固定的集群上;(2)端上,不管是browser還是APP,也有固定的CPU處理;數(shù)據(jù)是移動的:(1)跨進程移動:數(shù)據(jù)從數(shù)據(jù)庫和緩存里,轉(zhuǎn)移到service層,到web-server層,到client層;(2)同進程移動:數(shù)據(jù)從model層,轉(zhuǎn)移到control層,轉(zhuǎn)移到view層;數(shù)據(jù)要移動,所以有兩個東西很重要:(1)數(shù)據(jù)傳輸?shù)母袷剑?/span>(2)數(shù)據(jù)在各層次的形態(tài);先看數(shù)據(jù)傳輸?shù)母袷?/strong>,即協(xié)議很重要:(1)service與db/cache之間,二進制協(xié)議/文本協(xié)議是數(shù)據(jù)傳輸?shù)妮d體;(2)web-server與service之間,RPC的二進制協(xié)議是數(shù)據(jù)傳輸?shù)妮d體;(3)client和web-server之間,http協(xié)議是數(shù)據(jù)傳輸?shù)妮d體;再看數(shù)據(jù)在各層次的形態(tài),以用戶數(shù)據(jù)為例:(1)db層,數(shù)據(jù)是以“行”為單位存在的row(uid, name, age);(2)cache層,數(shù)據(jù)是以kv的形式存在的kv(uid -> User);(3)service層,會把row或者kv轉(zhuǎn)化為對程序友好的User對象;(4)web-server層,會把對程序友好的User對象轉(zhuǎn)化為對http友好的json對象;(5)client層:最終端上拿到的是json對象;結(jié)論:互聯(lián)網(wǎng)分層架構(gòu)的本質(zhì),是數(shù)據(jù)的移動。為什么要說這個,這將會引出“分層架構(gòu)演進”的核心原則與方法:(1)讓上游更高效的獲取與處理數(shù)據(jù),復用;(2)讓下游能屏蔽數(shù)據(jù)的獲取細節(jié),封裝;有了上面的鋪墊,水友經(jīng)常問的這些問題:(1)是否需要引入DAO層,什么時機引入;(2)是否需要服務化,什么時機服務化;(3)是否需要抽取通用中臺業(yè)務,什么時機抽?。?/span>(4)是否需要前后端分離,什么時機分離;就非常好回答了,下期和大家深究。畫外音:網(wǎng)友們的這些提問,其實很難回答。在不了解業(yè)務發(fā)展階段,業(yè)務規(guī)模,數(shù)據(jù)量并發(fā)量的情況下,妄下YES或NO的結(jié)論,本身就是不負責任的。總結(jié)(1)互聯(lián)網(wǎng)分層架構(gòu)的本質(zhì),是數(shù)據(jù)的移動;(2)互聯(lián)網(wǎng)分層架構(gòu)中,數(shù)據(jù)的傳輸格式(協(xié)議)與數(shù)據(jù)在各層次的形態(tài)很重要;(3)互聯(lián)網(wǎng)分層架構(gòu)演進的核心原則與方法:封裝與復用;架構(gòu)師之路訓練營,一起玩架構(gòu)希望能引發(fā)大家的思考。閱讀原文,更多收獲。 瀏覽 23點贊 評論 收藏 分享 手機掃一掃分享分享 舉報 評論圖片表情視頻評價全部評論推薦 為何說,MapReduce,顛覆了互聯(lián)網(wǎng)分層架構(gòu)的本質(zhì)?架構(gòu)師之路0為何說,MapReduce,顛覆了互聯(lián)網(wǎng)分層架構(gòu)的本質(zhì)?架構(gòu)師之路0一文讀懂互聯(lián)網(wǎng)的架構(gòu)本質(zhì)喔家ArchiSelf0互聯(lián)網(wǎng)的本質(zhì)互聯(lián)網(wǎng)的本質(zhì)0互聯(lián)網(wǎng)的本質(zhì)互聯(lián)網(wǎng)的真正威力不在于技術(shù)本身,而在于它對人們生活方式的巨大改變,這些改變不僅深刻影響了市場,也影響什么是架構(gòu)和架構(gòu)的本質(zhì)?開源Linux0互聯(lián)網(wǎng)分層架構(gòu),為啥要前后端分離?架構(gòu)師之路0商業(yè)的本質(zhì)和互聯(lián)網(wǎng)商業(yè)的本質(zhì)和互聯(lián)網(wǎng)0商業(yè)的本質(zhì)和互聯(lián)網(wǎng)熊彼特被稱為創(chuàng)新理論之父,他視敢于承擔風險和富于想象力的企業(yè)家為創(chuàng)新的核心要素;而管理學大師德魯克則三層架構(gòu)到DDD分層架構(gòu)的演變跟著阿笨一起玩NET0點贊 評論 收藏 分享 手機掃一掃分享分享 舉報