SaaS 架構:應用服務、應用結構設計原則

應用架構設計通常包括以下步驟:

本文主要分享一下應用服務、應用結構設計設計。

應用服務設計

應用服務的概念

應用服務是對一個或一組密切相關的業務對象及其操作的封裝。

應用服務應明確定義其責任範圍,將相關業務功能和對象組合在一起,避免暴露內部細節。它需要整合因同一原因變化的功能和數據,同時分離因不同原因變化的部分。這種設計方法確保了服務的內聚性和靈活性。

應用服務的概念源於 SOA 和微服務架構的興起,通過將系統功能拆分爲多個獨立的服務,可以提高系統的可維護性、可擴展性和靈活性。

應用服務如何劃分?

應用服務在應用架構中起着至關重要的作用,它將系統的核心功能” 打包 “,並提供給外部的業務流程使用,可以視爲 SaaS 系統對外的 “門面”。

用戶或其他系統通過調用應用服務來實現特定的業務功能。那麼,如何設計應用服務呢?

1、對齊業務能力,設計顆粒度適中的服務,職責單一,避免跨服務調用。

在設計應用服務的粒度時,可以參考領域驅動設計(DDD)中的 "限界上下文" 概念。業務對象類似於限界上下文中的聚合根,是應用服務的核心。

通常情況下,每個業務能力都對應一到多個獨立的應用服務,同時每個應用服務也支持特定的業務能力。如圖所示。

如果一個應用服務支撐了過多的業務能力,需要評估其內部是否關聯了過多的業務對象。在這種情況下,可以考慮對多個業務對象進行分組,從而將該應用服務拆分爲多個更小、更專注的服務。

2、圍繞業務對象,提供具體的業務功能,具有明確的業務含義,不能包含不相關的功能。

從外部視角看來,應用服務通常是帶有明確的業務含義,一般圍繞某一個或一組密切相關的業務對象業務對象操作,不應該包含不相關的業務功能。

例如,” 商城交易服務” 專注於訂單確認、下單和支付等功能,不應處理用戶認證、商品推薦等其他業務。

3、服務可註冊、可監控、可度量

應用服務的公共 API 應註冊到 API 管理平臺,形成一份服務列表,供消費者訂閱調用。

應用服務對外提供服務時候,應能監控其運行狀態,並支持啓停操作。同時,服務應可度量,包括訂閱數量、調用次數、響應時間等指標。

服務化架構的價值

面向服務的架構最大的價值就在於它的敏捷性和靈活性。

敏捷性體現在服務可以快速調整,獨立演化。

靈活性則體現在每個服務都有清晰的業務邊界,功能內聚性強,能夠單獨管理生命週期。具體來說:

    1. 輕量級應用:採用基於服務設計的輕應用,各個服務獨立開發、部署和運營,可以獨立交付,影響範圍小,提升交付效率。
    1. 服務複用、靈活編排:通過服務的複用,柔性編排,可以快速響應業務的變化,支持複雜的業務流程。
    1. 局部擴展性高:系統被拆分爲獨立服務後,易於橫向擴展,只需擴展必要的部分,成本更低,效果更好。

示例:訂單履約能力的應用服務劃分

如圖所示,訂單履約能力是零售企業業務能力地圖中的 L2 業務能力。訂單履約能力可以細分爲多個末級業務能力:ToC 履約服務、訂單派單、訂單管理、揀貨管理、發貨管理和履約逆向。

基於這些末級業務能力,我們可以設計出相應的應用服務。

應用結構設計

應用結構描述了應用服務內部的層次結構和組織關係,它決定了系統的模塊化程度,以及後續的開發和維護難度。

應用結構的抽象層次

在應用結構設計中,我們通常會把系統抽象爲不同的層次。比如,將系統劃分爲系統級、應用級、模塊級和代碼級。

這種抽象級別的劃分幫助我們在不同層面處理複雜性,確保系統結構清晰且易於維護。如圖所示:

抽象級別的存在,主要是爲了幫助我們更好地管理系統的複雜性。

1、分解複雜度

如果將所有的細節混雜在一起,整個系統將變得難以理解、維護和擴展。通過設置不同的抽象級別,我們可以將系統的複雜性分解到各個層次,每個層次只需關注特定的功能和職責。

這種分層處理方式使開發人員在專注於系統某一部分時,無需過多關注其他部分的細節,從而大大簡化了系統的設計和開發過程。

2、團隊協作邊界清晰

在大型項目中,通常會有多個團隊並行開發。如果系統沒有明確的邊界,各團隊之間很容易產生衝突和重複勞動。

通過清晰的抽象級別劃分,不同團隊可以專注於系統的不同層次或模塊,互不干擾。

3、擴展性強

隨着業務需求的變化,系統往往需要不斷地擴展和升級。如果系統的架構設計沒有合理的抽象級別,擴展和升級就會變得異常困難,甚至可能引發系統的全面重構。

而在有抽象級別的系統中,變更往往只需要聚焦在特定的層次上進行,而不會影響整個系統。例如,一次業務改造隻影響模塊級別,我們可以在不改變系統整體架構的情況下,替換或新增某個模塊,以滿足新的業務需求。

應用結構如何劃分?

在前文中,我們提到應用服務的設計方法,那麼應用服務如何通過一步步轉化爲代碼結構呢?

應用服務會由一系列的應用結構來實現。如圖所示。

基於應用服務的劃分方案,我們可以進一步細化應用結構,以便更好地組織和管理系統功能。

這個過程涉及多個層次的設計方法:

在上述設計方法中,一個應用服務可以單獨部署,也可以多個應用服務組合在一起部署。

那應用單元有哪些劃分的具體原則呢?應用的劃分原則可以參考以下:

1、業務劃分原則

最關鍵的是參考應用服務的劃分邊界。如果需要提高應用的粒度,可以參考業務域和業務子域的劃分。

將相同業務變更因素的功能和數據整合,提升系統內聚性。同時,把不同業務變更因素的功能和數據分開,減少系統耦合度。

2、技術劃分原則

在業務初期,儘量從單體應用開始,避免過早劃分應用單元,以減少分佈式數據庫事務和數據不一致的問題。

應用單元內部可進一步分層,避免應用間出現循環依賴或雙向依賴,始終保持不同層級間的單向依賴,高層級可以依賴低層級,同層級間不應互相依賴。

僅當真正遇到技術痛點時,例如規模、性能、安全等問題,才考慮拆分應用。如果不拆分會嚴重影響業務穩定性,則應進行拆分。不要爲了拆分而拆分,因爲每次拆分都會增加系統複雜度。

示例:訂單履約的應用結構劃分

如圖所示,是訂單履約的應用結構劃分。

應用層定義軟件的應用功能,它負責接收用戶請求,協調領域層能力來執行任務,並將結果返回給用戶,核心模塊包括:

領域層是業務邏輯的核心,專注於表示業務概念、業務狀態流轉和業務規則,沉澱可複用的服務能力,模塊包括:

訂單履約系統與其他系統的依賴關係:

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Yd7ZisEE6pALVRoy-afM6g