總體架構
所有應用服務、API網關、身份認證服務均部署在Kubernetes容器中,由Kubernetes提供應用配置、服務治理、服務監控等功能。
客戶端所有訪問均通過Kubernetes的Nginx-Ingress接入服務集群,並由API網關負責路由匹配和身份認證后轉發至響應的應用服務處理。應用微服務中不需要二次做身份認證。
身份認證服務提供OAuth2.0協議的令牌獲取、驗證等接口。
數據庫、緩存、日志服務等服務中間件建議部署於獨立的服務器上,按需求也可以部署於容器中。
具體架構如下圖:
分層架構
這里我們主要講述服務端,服務分層架構如下:
- 網關層作為業務服務的總出入口,所有服務調用均需要通過API網關。這里我們使用.Net Core中常用的Ocelot網關
- 身份認證服務我們采用ABP vNext框架模板提供的身份服務模塊,其核心為封裝了IdentityServer4.0框架用於提供OAuth2.0協議各種接口。身份認證服務所需數據直接來自數據庫或緩存。
- 聚合服務層主要用於聚合、調度服務層一個或多個微服務。客戶端訪問的所有接口(除身份認證服務接口以外)均由應用層提供。應用層服務不直接訪問數據庫,而是通過調用服務層對應服務實現數據操作。通常我們做詳細的接口權限管理,也是應用層接口與權限做對應。應用層服務我們采用WebApi+ABP vNext框架實現。
- 基礎服務層,建議依據領域驅動設計思想划分,每個領域設計為一個微服務。該層服務提供具體的領域模型、領域業務的實現。通常每個微服務對應一個數據庫,通過倉儲實現數據庫操作。服務層服務不直接提供客戶端訪問接口,收到請求時也不需要做身份認證、鑒權處理。這里我把服務層服務分為兩類:第一種是身份管理服務,負責用戶角色權限管理,使用ABP vNext框架Application模板構建;第二種是其他業務微服務,提供用戶角色權限管理以外的其他業務功能,使用ABP vNext框架Module模式構建。
- 數據庫這里我們采用MySQL、緩存這里采用Redis、日志服務采用Elasticsearch+Logstash+Kibana(ELK)。
- 具體服務圖中服務划分以Demo為例,實際開發中請依據各自項目實際需求對服務進行拆分設計。
- 由於Demo中設計的應用場景相對簡單,更多技術及ABP框架詳細用法請參考ABP官方文檔。