系統發展到一定的程度,或者初期,我們要及時對系統採取分治的思想。系統分治,首先必先分層。但是分層的層次也不應該太多,我們不能為了分層而分層。層次太多,架構太複雜、效能太差。那我們到底要分幾層呢?我們來分析一下系統的基本流程,其流程大致都是這樣的:客戶端->伺服器(cgi)->資料庫。從客戶端到資料庫,我們現有這樣的層次觀,如圖2.0所示。
2.0 基於分層的系統
在電商系統中,我們的服務處理的業務領域是:商品、訂單、購物車、使用者、**等。
這麼多業務領域,我們是糅合在一起,還是採用分割的思想,進行領域建模?糅合在一起,導致系統極其臃腫,遷一而動全身,系統公升級代價大、風險也大,而且也不容易進行分工協作。因此,我們必須對服務層進行分割、領域建模,這時的系統如圖2.1所示。
2.1 基於分割、領域建模的系統
很顯然,各個領域之間肯定是存在依賴關係的,這時我們必須對領域進行粒度、依賴控制。如果在領域之間進行之間依賴,會是怎麼樣呢?假如領域a依賴領域b,b又賴領域b,領域c依賴領域a、b。各種依賴導致系統錯綜複雜。因此,我們要對領域服務做一些粒度控制,對服務分為:流程服務、領域組合服務、領域基礎服務、服務閘道器。
進行這樣的服務粒度、依賴管理、控制後,這時的系統架構概貌如圖2.2所示。
2.2 粒度、依賴管理、控制
通過這樣的服務粒度、依賴管理、控制是為了對系統做扁平化管理,同時也為外部服務變化做適配,減少外部變化對內部系統的入侵。
通過分治:分層、分割、領域建模後,這時的系統概貌如圖2.3所示。
2.3 分治後的系統
但是這樣的系統,服務、領域服務隨著業務的發展,也會變得越來越多。這時我們該怎麼辦呢?
對於系統,我們不能一蹴而就,畢其功於一役。好的系統是邊生活邊重構出來的。
但是重構出來的系統會長成啥樣子,可能依賴人的系統審美觀念吧。
堅固、效用、情趣
——marcus vitruvius(西元前22年),<>
風格是思想的外衣,良好的思想就像是穿著考究的紳士一樣更具優勢。
——chesterfield 勳爵(1774)
面對複雜的系統,要再次重構,重構後要成為什麼模樣?不同的系統架構師有不同的品味,不同的品味的人,重構出來的系統也是不一樣。而且重構也受具體的業務驅動影響,重構出來的系統也是為了滿足業務需求,不能為了重構而重構。但是無論如何,我們重構的出發點就是為了讓系統簡單一點、乾淨一點。
因此我們對2.3的系統,可能會重構成如圖2.4所示。
2.4 重構後的系統
大到乙個複雜系統,小到乙個簡單系統,都要先設計、再實現,只是不同的系統,需要不同程度的設計。那什麼是設計,或者說設計是一種什麼活動?
設計是構思、精神(實現)、以及互動的一串行迴圈活動,是對問題形成計畫或模式,運用思維整理或考量,以便後續執行的活動。這代表著:
1)概念性構想的形成;
2)在真實的**中實現;
3)在真實的體驗中與使用者互動。【摘自設計原本】
設計必需運用思維整理或考量,尤其是考量。考量意味著對一件事進行權衡考慮,不斷斟酌、反覆推敲。設計是天馬行空的,還是約束的?天馬行空的設計會使任務變得更加困難而非更加簡單,因為約束會縮小設計的探索空間。譬如有個客戶走到你的跟前說:小夥子,給我設計乙個我需要的桌子。這裡唯一的約束就是設計出來的桌子需要滿足客戶的需求,除此之外沒有任何約束條件。這個任務貌似很簡單,其實是很難的,你要不斷探索什麼樣的桌子是客戶需要的?探索空間如圖2.5所示。
2.5 系統探索空間
隨著探索的深入,以及你對客戶的需求不斷了解,你會發現在形狀、材料、美觀、成本、期限、功能之間是存在約束的,而你的設計就是權衡這幾個約束,在規定的期限內設計出滿足客戶需要的桌子。
因此,乙個良好的設計,就是妥善處理好各種約束的設計,但我們如何處理好各種約束條件呢?譬如我們怎麼認為乙個桌子是美的。有人認為簡單是美,也有人認為相對不簡單才是美的。
不管是哪一種觀點,系統設計都逃脫不了處理約束關係。
系統的美,就是合理、簡單地處理了彼此之間的約束關係。
在處理約束關係,我們可以採用經濟策略。經濟策略的核心就是經濟,即最小投資最大回報。小到乙個系統,我們必須用經濟策略去處理cpu、記憶體、i/o、資料拷貝、網路傳輸的關係;大到乙個集群系統我們得處理網路傳輸、網路頻寬、節點負載、節點互動數次的關係。
或許有人會說,既然是經濟策略,那一切都按最少的來考慮吧。這個或許是對,或許是不對的。舉個例子,假如你要運10頓的沙,運沙方案如下:
方案運量(千克)
**(元)
數次(小時)成本1
1000
1000
1010000
2500
45020
9000
3250
26040
10400
4100
70100
7000 因素
描述記憶體使用量
ftp 程序最大能夠使用多少mb的記憶體。
cpu利用率
ftp 最多能夠占用多少cpu時間。
i/o buffer大小
4k/1mb/2mb/…/xmb 的i/o延遲。
使用者併發數
執行緒(程序)數
需要開啟的執行緒(程序數),執行緒(程序)排程時間。
網路傳輸時間
4k/1mb/2mb/…/xmb 網路i/o傳輸時間。
檔案系統
不同的檔案系統,效能不一樣。
硬碟固定是7200轉的sata 硬碟。
**堅固、效用、情趣**
——marcus vitruvius(西元前22年)[do architecture]
好的系統要滿足堅固、效用,在兩者的基礎上滿足情趣。系統設計不像做飯,按照菜譜就能做出一頓好飯。雖然我們根據分治、重構的思想進行系統構建,但在構建的過程中,我們如何處理系統內的依賴、約束關係,又如何處理系統之間的依賴、約束關係?這些依賴、約束關係的處理,需要我們去權衡。但是無論如何,我們都是為了把這些關係處理得更經濟些、更簡單些。
千里之行,路在腳下
逛2年,然後到註冊帳號也將近1年了。看著園子裡的大牛的各類文章,也期望自己將來有一天能寫出不錯技術部落格,對職業有意義的部落格,讓幫助到園友與園友一起 關於職業的方方面面如技術 面試 與同事相處 甚至創業等等。一直本著有一定的技術實力,有一定的職場經驗,生活閱歷才開始寫部落格。希望自己寫的能對園友有...
千里之行,始於足下
公司訂有乙份電腦報,一般也沒有時間看它,有時去廁所的時候會找一張隨便翻翻,呵呵。前天就無意中翻到了乙個大專題,說什麼計算機專業就業率低,正規軍幹不過游擊隊,甚至有個香港的大學教授說內地的計算機教學基本沒有等等,佔據了該期電腦報的好幾個主要版面,其批判原力度不可謂不大。昨天,在csdn上發現也有 由於...
千里之行始於足下
有句話叫 萬事開頭難 說得有道理,但是我覺得更難的是開頭之後,怎麼堅持下去。自己活了26年了,耳濡目染和親身經歷,我都覺得,能夠一直堅持做某件事,確實太難了,不管這個事情有多麼微小,多麼容易做到。我仔細思考了下,我理解應該有以下這麼幾個原因 1 懶惰 不愛動,不愛寫,不想跑步,不想健身,不想記錄,不...