互聯(lián)網(wǎng)分層架構(gòu)的本質(zhì),是數(shù)據(jù)的移動,。
互聯(lián)網(wǎng)分層架構(gòu)演進的核心原則:
這些在上一篇《互聯(lián)網(wǎng)分層架構(gòu)的本質(zhì)》中有詳盡的描述,,在實際系統(tǒng)架構(gòu)演進過程中,如何利用這兩個原則,,對系統(tǒng)逐步進行分層抽象呢,?咱們先從后端系統(tǒng)開始講解。
本文主要解答兩個問題:
核心問題一:什么時候進行DAO層的抽象一個業(yè)務(wù)系統(tǒng)最初的后端結(jié)構(gòu)如上:
此時,web-server層如何獲取底層的數(shù)據(jù)呢,? web-server層獲取數(shù)據(jù)的一段偽代碼如上,,不用糾結(jié)代碼的細節(jié),也不用糾結(jié)不同編程語言與不同數(shù)據(jù)庫驅(qū)動的差異,,其獲取數(shù)據(jù)的過程大致為:
如果業(yè)務(wù)不復(fù)雜,這段代碼寫1次2次還可以,但如果業(yè)務(wù)越來越復(fù)雜,,每次都這么獲取數(shù)據(jù),就略顯低效了,,有大量冗余,、重復(fù)、每次必寫的代碼,。
如何讓數(shù)據(jù)的獲取更加高效快捷呢,?
通過技術(shù)手段實現(xiàn):
絕大部分公司正在用的ORM,DAO等技術(shù),,就是一種分層抽象,,可以提高數(shù)據(jù)獲取的效率,屏蔽連接,,游標,,結(jié)果集這些復(fù)雜性,。
結(jié)論 當(dāng)手寫代碼從DB中獲取數(shù)據(jù),成為通用痛點的時候,,就應(yīng)該抽象出DAO層,,簡化數(shù)據(jù)獲取過程,提高數(shù)據(jù)獲取效率,,向上游屏蔽底層的復(fù)雜性,。
核心問題二:什么時候要進行數(shù)據(jù)服務(wù)層的抽象抽象出DAO層之后,系統(tǒng)架構(gòu)并不會一成不變:
于是系統(tǒng)架構(gòu)變成了這個樣子: 業(yè)務(wù)系統(tǒng)垂直拆分,,數(shù)據(jù)庫水平切分,,緩存這些都是常見的架構(gòu)優(yōu)化手段。
此時,,web-server層如何獲取底層的數(shù)據(jù)呢,? 根據(jù)樓主的經(jīng)驗,以用戶數(shù)據(jù)為例,,流程一般是這樣的:
如果業(yè)務(wù)不復(fù)雜,這段代碼寫1次2次還可以,,但如果業(yè)務(wù)越來越復(fù)雜,,每次都這么獲取數(shù)據(jù),就略顯低效了,,有大量冗余,、重復(fù)、每次必寫的代碼,。
特別的,,業(yè)務(wù)垂直拆分成非常多的子系統(tǒng)之后:
不相信業(yè)務(wù)會垂直拆分成多個子系統(tǒng)?舉兩個例子:
如果每個子系統(tǒng)都需要關(guān)注緩存,,分庫,,讀寫分離的復(fù)雜性,調(diào)用層會瘋掉的,。
如何讓數(shù)據(jù)的獲取更加高效快捷呢,? 服務(wù)化,,數(shù)據(jù)服務(wù)層的抽象勢在必行,。 通過抽象數(shù)據(jù)服務(wù)層:
服務(wù)化這里就不展開,,更詳細的可參考《互聯(lián)網(wǎng)架構(gòu)為什么要做服務(wù)化,?》。 結(jié)論 當(dāng)業(yè)務(wù)越來越復(fù)雜,,垂直拆分的系統(tǒng)越來越多,,數(shù)據(jù)庫實施了水平切分,數(shù)據(jù)層實施了緩存加速之后,,底層數(shù)據(jù)獲取復(fù)雜性成為通用痛點的時候,,就應(yīng)該抽象出數(shù)據(jù)服務(wù)層,簡化數(shù)據(jù)獲取過程,,提高數(shù)據(jù)獲取效率,,向上游屏蔽底層的復(fù)雜性。
互聯(lián)網(wǎng)分層架構(gòu)是一個很有意思的問題,,服務(wù)化的引入,,并不是越早越好:
千萬別魯莽的在“微服務(wù)”大流之下,草率的進行微服務(wù)改造,,看似“高大上架構(gòu)”的背后,,隱藏著更多并未接觸過的“大坑”。還是那句話,,架構(gòu)和業(yè)務(wù)的特點和階段有關(guān):一切脫離業(yè)務(wù)的架構(gòu)設(shè)計,,都是耍流氓,。
這一篇先到這里,分層架構(gòu),,還有很多內(nèi)容要和大家聊:
末了,,再次強調(diào)下,,互聯(lián)網(wǎng)分層架構(gòu)的本質(zhì),是數(shù)據(jù)的移動,。
互聯(lián)網(wǎng)分層架構(gòu)演進的核心原則,,是讓上游更高效的獲取與處理數(shù)據(jù),讓下游能屏蔽掉數(shù)據(jù)的復(fù)雜性獲取細節(jié),。 |
|