單體架構——一個可部署單元,一個資料庫 · 心智圖
單體架構——一個可部署單元,一個資料庫. 可編輯嘅心智圖,以彩色分支、子題目同曲線連結呈現概念。 曲線表示關聯;只有方向重要時先用箭嘴。
單體是一個以單一單元建置並部署的應用程式:UI、業務邏輯與資料存取全部在同一個處理程序中運行,對著一個共用的資料庫,而擴展就意味著複製整件東西。
單體架構——一個可部署單元,一個資料庫 · 心智圖
The interactive MindMap canvas for this explanation — every lane, row and arrow above is a real QueryChart diagram you can open and edit.
點樣閱讀呢張心智圖
- 由中央主題開始,沿住彩色分支探索相關概念。
- 曲線表示關聯;只有方向重要時先用箭嘴。
Client request
呢個分支匯集 “Client sends a request”.
One application
呢個分支匯集 “Request enters the single deployable application”, “Business logic module processes it”, “The response returns through the same modules”, “UI module routes and renders”, “Data access module queries the database”.
Shared database
呢個分支匯集 “All modules share a single schema, which keeps joins and transactions simple — the main reason a monolith is so fast to build at first.”.
Scaling tradeoff
呢個分支匯集 “One busy feature forces the entire codebase and database connection pool to be copied to another server — the scaling ceiling that pushes teams toward splitting it.”.
跨分支關聯
所有模組共用一個處理程序、一個代碼庫與同一次部署——這種包覆關係就是定義。
那個共用的資料庫把每一個模組都耦合到同一份結構描述之上。
請求在一趟來回中穿過每一個模組——沒有獨立的服務呼叫。
擴展是粗顆粒的:整個應用程式都會被複製一份,不論那項功能是否繁忙。
單體的開發速度是真實的;它拿去交換的,就是那道擴展天花板。
Key relationships and takeaways
- 所有模組共用一個處理程序、一個代碼庫與同一次部署——這種包覆關係就是定義。
- 那個共用的資料庫把每一個模組都耦合到同一份結構描述之上。
- 請求在一趟來回中穿過每一個模組——沒有獨立的服務呼叫。
- 擴展是粗顆粒的:整個應用程式都會被複製一份,不論那項功能是否繁忙。
- 單體的開發速度是真實的;它拿去交換的,就是那道擴展天花板。
When to use this visual
- 解釋為甚麼一個團隊的應用程式明明容易開發,卻難以擴展。
- 講解那種令微服務變得可以理解的對照——只有對著單體的天花板來看,拆分才說得通。
- 在規劃如何把一個舊有系統拆開之前,先記錄它的結構。
運作方式
調整中央主題
按項目或課堂修改中央主題名稱。
擴展分支
編輯概念並加入例子或註解。
連結相關概念
畫出跨分支連結;只有方向重要時先用箭嘴。
常見問題
甚麼是單體架構?
單體是一個把 UI、業務邏輯與資料存取當成一個單元去建置、部署與擴展的應用程式——單一代碼庫產出單一可部署的產物,並對著一個共用的資料庫運行。圖解顯示請求在同一條應用程式泳道之內穿過全部三個模組,因為這種包覆關係就是定義。
團隊為甚麼會由單體開始?
因為對大多數團隊、以及應用程式生命中的大部分時間而言,單體是最快出貨的方式。模組之間沒有網絡,共用的結構描述令連接查詢與交易都變得簡單,部署也只有一份產物。圖解中那個共用資料庫的方框直接點明了這一點——只有當獨立擴展或團隊自主成為關鍵瓶頸時,這場交換才會變得不划算。
單體最主要的問題是甚麼?
擴展天花板與耦合。擴展意味著複製整個應用程式,所以一項繁忙的功能會在其餘一切之上浪費容量;而每一次改動,觸碰的都是所有人都依賴的同一個代碼庫與同一份結構描述。隨著團隊與代碼庫變大,這兩種效應會拖慢部署並逼出協調成本——這正是團隊開始把服務抽出來的條件。
單體怎樣變成微服務?
逐步地,每次抽出一項能力。第一步是找出一個可以獨立存在的模組——它有自己邊界明確的資料——然後給它自己的資料庫、一個 API,最終是獨立部署。圖解中那個抽取候選模組的步驟示範的正是這件事:標出模組、切斷耦合、拆開。錯誤的做法是一次過重寫整個單體,遷移正是這樣失敗的。
喺 QueryChart 編輯呢張心智圖
喺可編輯畫布開啟心智圖。移動概念、加入分支同畫連結。