​中臺戰略:業務中臺的8個設計原則

技術瑣話發表於2022-12-05

​中臺戰略:業務中臺的8個設計原則

業務中臺是一個充滿生命力的個體,它承載業務邏輯、沉澱業務資料、產生業務價值,並隨著業務不斷髮展進化。它的設計遵循如下圖所示的8個原則。

​中臺戰略:業務中臺的8個設計原則

業務中臺設計的8大原則

01 服務松耦合原則

1)面向介面實現

這是服務松耦合的基本要求,即每一個服務都按介面的定義進行實現。服務的消費方不需要依賴某個特定的服務實現,避免服務提供方的內部變更影響到消費方。另外,在服務提供方切換到其他系統時,不影響服務消費方的正常執行。
 
(2)非同步事件解耦

服務間的事件通訊採用非同步訊息佇列來實現。由於有訊息佇列這個中介,因此生產者和消費者不必在同一時間都保持實時處理能力,而且消費生產者也不需要馬上等到回覆。
 
(3)服務提供者位置解耦

服務消費者不需要直接瞭解服務提供者的具體位置資訊,例如IP地址、埠。典型解決方法是服務註冊中心,服務提供者啟動時將自己註冊到服務註冊中心,服務消費者透過服務註冊中心查詢具體服務提供者來訪問。同時,服務註冊中心可以提供負載均衡及fail-over的能力。
 
(4)版本松耦合

消費端不需要依賴服務契約的某個特定版本來工作,這就要求服務契約在升級時儘可能提供向下相容性。

02 服務依賴原則

(1)有價值的領域模型

  • 價值導向:確保業務中心的服務都與企業的商業理想保持一致,相關聯。 
  • 簡捷為美:業務邏輯和流程避免複雜化。 
  • 領域洞察:緊貼業務的核心目的,從業務原則指導業務邏輯的設計。

 
(2)服務間最小依賴 

  • 高內聚:同一類服務應歸在一起。
  • 低耦合:服務間保持最小聯絡。
  • 能力與介面:業務流程和業務邏輯的操作都作為中心服務實現,而提供給外部呼叫的介面資料模型都會轉化為服務。
  • 識別通用性:識別出每個通用能力的可擴充套件的型別,從設計上支援它不斷擴充套件,並在介面定義上滿足其不斷升級的需求。

(3)能力實體具有層次性

  • 能力與介面:分離介面實體與能力實體。
  • 介面實體與限定元素:將介面實體核心元素與介面操作的限定元素分離。
  • 介面實體的層次結構:建設介面實體和上下文限定元素的層次結構。

 
(4)延遲對技術元件的依賴

  • 捆綁依賴:

    避免在無關的元件技術之間引入新的依賴。

  • 延遲繫結:

    在使用點才捆綁依賴關係。

03 服務設計原則

(1)最佳化遠端呼叫

服務間的遠端呼叫分為同步呼叫和非同步呼叫兩種模式。應當分析服務呼叫場景,選擇較優的呼叫模式。
 
(2)去掉冗餘資料

儘量去掉介面實體中客戶端不需要的冗餘欄位,既能減少網路開銷,又能避免給前端解析帶去複雜性。
 
(3)設計粗粒度的服務介面

服務介面若能與前端一個用例或一個業務場景相對應(粒度較粗)則既能減少遠端呼叫次數,又能降低學習成本。
 
(4)識別並設計通用的服務介面

由於中心服務不限定應用範圍,因此一般要支援不同的應用。但不同應用在功能豐富性上有很大差異,這就決定了服務介面需要儘可能保證廣泛相容性。譬如,服務介面的引數和返回值必須是被廣泛支援的較簡單的資料型別。
 
(5)隔離服務內部的變化

避免服務內部的領域模型直接傳導給客戶端。如未能提供合理的隔離措施,則當服務進行內部重構時,勢必導致客戶端頻繁變化。
 
(6)服務介面先行

詳細規定服務與客戶端雙方對接的內容與形式等,對雙方形成強有力的約束和保障。
 
(7)服務介面向下相容

由於應用的廣泛性,在服務公開發布之後就要保證相當的穩定性,不能隨便重構,即使升級也要儘可能考慮向下相容性。

04 服務命名原則

強烈建議使用服務使用者專業領域內有意義的名稱,優先選用業務概念而不是技術概念。
 
使用名詞命名服務,使用動詞命名操作。

05 服務顆粒度原則

服務應是內聚而完整的,能夠獨立完成一個職責。在服務內部可以是由多個邏輯上密切相關的程式碼塊共同組成。

06 服務的無狀態性原則

微服務體系的基本要求是服務無狀態。無狀態的服務是可伸縮、高可用性的基礎。

07 服務操作設計原則

操作表示業務動作,應當使用具體的業務含義而不是泛型操作來定義操作。相關的最佳實踐如下:

  • 重要的服務不能依賴非重要服務。
  • 任何服務呼叫都要設定超時時間。
  • 任何服務的呼叫結果只有三種可能:成功、失敗或未知。
  • 能非同步呼叫的服務儘量使用非同步呼叫,從而提高系統響應速度,降低系統之間的耦合性。
  • 系統拆分時,粒度大小以一個系統3~8個開發人員維護為宜。
  • 系統拆分時,往往先拆分資料服務層,因為資料服務層通常是複用性高的一層。
  • 服務的實現不能有單點。
  • 線上遵循fast-fail原則,避免服務呼叫時間過長,導致效能下降。fast-fail原則是隻要發生錯誤,則呼叫立即返回。
  • 需要對高壓場景下的服務呼叫鏈路進行特殊處理,可採用將鏈路縮短、預熱等方式。
  • 服務設計過程中,要避免同類服務由不同服務單元提供。
  • 服務要做到向後相容,如果無法做到,則需要採取管控機制確保服務消費者升級服務。
  • 服務化架構的變化要使組織的架構能適應這種變化。
  • 在部署服務單元時,要將讀服務和寫服務分離,將核心服務和非核心服務分離,以保證整個服務單元的穩定性和可靠性。
  • 服務化時,要同時考慮安全。
  • 靜態資源也可以實現服務化,實現靜態資源與動態資源分離,從而提高效能。
  • 透過在外層系統埋點,可以實現面向終端使用者服務的精細管理,比如服務的容量、服務的效能等。
  • 需要將每個業務領域的通用規則沉澱成服務。

08 服務約束原則

  • 上可依賴下;
  • 下不可依賴上;
  • 上可跨級依賴下;
  • 平級可允許單向呼叫,堅決禁止迴圈依賴;
  • 高階別不可依賴低階別;
  • 簡單就是美;
重要的服務不能依賴非重要服務。
文章摘自:機械工業出版社《中臺戰略:中臺建設與數字商業》 20199月出版

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31562044/viewspace-2657765/,如需轉載,請註明出處,否則將追究法律責任。

相關文章