微服務架構中的服務邊界與服務識別
前言
在我們進行微服務架構設計和改造過程中,一個不可避免的問題是如何確定服務邊界、如何進行服務識別,微服務的劃分粒度究竟如何確認。我們可能會聽到,服務既不能太大,也不能太小,當然這是一個籠統的概念。那麼,問題來了,究竟多大是大,多小是小。
比如,以下原則是否可行?
一個微服務應該包含N行程式碼
將系統中每一個功能都定義為一個服務
另外,考慮一個問題:如果服務劃分太細,會出現什麼問題?
服務爆炸
服務交叉引用
程式碼過度耦合
所以,接下來,我們將討論在微服務架構設計中,如何進行服務定義與劃分。
良好設計的服務包含的五個特徵
一個設計良好的服務應包含以下五個特徵:
特徵一:服務不與其他服務共享資料庫
舉個例子:如果你定義了一個微服務後臺需要訪問某個表,與此同時存在別的多個服務也需要訪問同一個表,那麼這就意味著你的資料庫就是一個耦合資料來源。一個良好設計的服務應只包含特定的獨有的資料庫表,並且不與其他服務共享。
我們在開發新服務時一個主要基本原則是,它們不應該跨越資料庫邊界。每個服務都應該依賴於它自己的底層資料儲存集,在這樣的前提下,我們才可以進行集中訪問控制,審計日誌記錄,快取邏輯。
特徵二:服務應包含儘可能少的資料庫表
正如我們之前所提及,微服務的理想大小是足夠小,但不能無限小。每個服務的資料庫表數量也是如此。
特徵三:一個服務要麼包含完整的業務含義,要麼是放之四海皆通用的公共服務。
我們通常會通過定義服務的輸入輸出來確定服務邊界,比如:服務既可以是一個開放的API,也可以是一個處理程式(處理檔案並進行資料儲存,比如我們常見的日誌處理服務),把握好這一點,你才有可能設計良好的服務。
特徵四:一個良好的服務應首先確保其資料可用性。
在設計微服務時,我們需要考慮系統中哪些服務將依賴於這個新服務,假如服務當機導致資料不可用會對系統產生哪些影響。考慮到這一點,我們就可以適當地為該服務設計資料備份和恢復系統。
特徵五:在一個業務系統中,一個服務只能是並且唯一的可信來源。
舉個例子,當我們從電子商務網站訂購東西時,會生成一個訂單ID。其他服務可以使用此訂單ID查詢訂單服務,以獲得關於訂單的完整資訊,基於釋出/訂閱的理念,在服務之間傳遞的資料應該只能是訂單ID,而不是訂單本身的屬性資訊,只有訂單服務擁有完整的訂單資訊,並且只有訂單服務是特定訂單資訊的唯一可信來源。
更大組織的服務設計考量
對於更大的組織,整個團隊都可以專注於擁有某個特定服務,在確定服務邊界時,需要考慮組織機構因素。另外,還有兩個需要注意的問題:獨立的釋出計劃和不同的正常執行時間的重要性。實際實踐中,比較成功的做法是,微服務的實現要麼是基於軟體設計原則,比如基於領域驅動設計或者是面向服務架構設計,要麼是基於可以很好的反映組織架構的設計原則。
比如,對於支付團隊來說,他們可以支付服務或信用卡驗證服務,這就是他們向外界提供的服務,這其實與軟體無關,這就是從組織架構的角度來講,他們作為一個業務部門可以向外界提供的所有服務。
說到團隊,這就涉及到一個著名的“兩個披薩原則”:即團隊大小不宜超過兩個披薩可以供給的人數
如何確認一個服務是否太小或者沒有正確定義
這裡有幾個指標可以來判斷:
服務之間是否過度依賴:如果兩個服務在不斷地相互呼叫,那麼這就是過度耦合,將他們整合到一起或許是一個更好的選擇。
如果單獨定義、設定服務所花費的精力和代價遠遠大於其帶來的好處和便利,那麼你就需要考慮你所定義的這個服務是否過小。
相關文章
- 微服務架構中的服務發現策略微服務架構
- 單體架構&微服務架構&中臺服務架構架構微服務
- 微服務架構—服務降級微服務架構
- 服務端指南 服務端概述 | 微服務架構概述服務端微服務架構
- 重新認識Java微服務架構-認證服務Java微服務架構
- 微服務架構中的服務發現策略2微服務架構
- 微服務架構之「 服務註冊 」微服務架構
- 微服務架構 | 5. 服務容災微服務架構
- 微服務邊界微服務
- 微服務的服務間通訊與服務治理微服務
- 微服務架構 | 3. 註冊中心與服務發現微服務架構
- Spring Cloud微服務架構—服務註冊與發現SpringCloud微服務架構
- 微服務架構中整合閘道器、許可權服務微服務架構
- SpringCloud構建微服務架構-Hystrix服務降級SpringGCCloud微服務架構
- 挑戰 - 微服務架構下的服務端測試微服務架構服務端
- 應用量化時代 | 微服務架構的服務治理之路微服務架構
- 架構之:微服務和單體服務之爭架構微服務
- Spring Cloud構建微服務架構—服務容錯保護(Hystrix服務降級)SpringCloud微服務架構
- Spring Cloud構建微服務架構-服務閘道器SpringCloud微服務架構
- Spring Cloud構建微服務架構-Hystrix服務降級SpringCloud微服務架構
- 微服務架構 | *3.5 Nacos 服務註冊與發現的原始碼分析微服務架構原始碼
- 微服務架構 | 4.2 基於 Feign 與 OpenFeign 的服務介面呼叫微服務架構
- Spring Cloud分散式微服務雲架構服務元件SpringCloud分散式微服務架構元件
- 微服務架構下的服務呼叫與鑑權——某保險公司微服務平臺實施案例分享微服務架構
- 面向服務的架構架構
- Spring Cloud構建微服務架構服務消費RibbonSpringCloud微服務架構
- Spring Cloud構建微服務架構—服務消費(Feign)SpringCloud微服務架構
- Spring Cloud構建微服務架構服務消費-RibbonSpringCloud微服務架構
- Spring Cloud構建微服務架構—服務消費FeignSpringCloud微服務架構
- Spring Cloud構建微服務架構—服務消費RibbonSpringCloud微服務架構
- Spring Cloud構建微服務架構—服務消費基礎SpringCloud微服務架構
- Spring Cloud構建微服務架構服務容錯保護SpringCloud微服務架構
- 微服務架構初識微服務架構
- 服務架構學習與思考(12):從單體架構到微服務架構的演進歷程架構微服務
- 微服務架構 | 5.2 基於 Sentinel 的服務限流及熔斷微服務架構
- 微服務架構,客戶端如何catch服務端的異常?微服務架構客戶端服務端
- [雲原生微服務架構](十)微服務架構的基礎知識微服務架構
- etcd套路(九)微服務架構之理解服務註冊與發現微服務架構