開發

?中臺戰略:業務中臺的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 服務約束原則

  • 上可依賴下;
  • 下不可依賴上;
  • 上可跨級依賴下;
  • 平級可允許單向調用,堅決禁止循環依賴;
  • 高級別不可依賴低級別;
  • 簡單就是美;

重要的服務不能依賴非重要服務。

文章摘自:機械工業出版社《中臺戰略:中臺建設與數字商業》 2019年9月出版

原文鏈接:https://mp.weixin.qq.com/s/yArlYBvIuZaEKJwm_Y5Z_g

最干貨的java+分布式技術公眾號,兼及研發管理。本號專家陣容:螞蟻金服右軍、易寶CTO陳斌、米么金服總監李偉山、奧琪金科首席架構曲健、螞蟻金服高級技術專家張翔、美團高級技術專家楊彪等。

中國頂級程序員圖鑒,最后一個厲害了!

上一篇

技術蒼穹與平臺沃土:華為構筑產業數字化的太極之道

下一篇

你也可能喜歡

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

長按儲存圖像,分享給朋友

ITPUB 每周精要將以郵件的形式發放至您的郵箱


微信掃一掃

微信掃一掃
双色球常规走势图 1月29比分推荐 蜂窝配资 甘肃十一选五开奖一 孝感卡五星麻将规则 下载本地哈灵杭州麻将 足球比分直播 792 江苏足球e彩开奖结 优选策略 排列三定下期和值方法 cba比分最低分 湖南微信麻将群二维码 2019年物联网新龙头