基於 abp vNext 微服務開發的敏捷應用構建平臺 - 框架分析

叮咚z發表於2020-11-22

總體架構

    本平臺從技術上採用ABP vNext.NET Core編寫的微服務架構。客戶端層主要以現代瀏覽器為主,適配了PC端和移動端的訪問,採用API和應用程式進行互動,同時提供第三方使用的API,支援通過Web服務或訊息代理與其他應用程式整合。資料工廠用於整合資料,將分散資料整合到一起,並進行彙總計算,採用統一資料介面向服務層提供資料支撐。如果您之前瞭解過資料倉儲技術,就可以把資料工廠理解為ETL工具。應用支撐層採用Docker部署叢集,使用 Kubernetes 進行容器編排和叢集管理,靜態檔案資源使用第三方提供的 CDN 服務進行加速。

  • ETL,是英文 Extract-Transform-Load 的縮寫,用來描述將資料從來源端經過抽取(extract)、轉換(transform)、載入(load)至目的端的過程。

微服務概念

    微服務體系架構(簡稱微服務)是開發軟體系統的一種架構風格,該架構試圖集中精力構建具有明確定義的介面和操作的單功能模組。它將應用程式構建為以業務領域為模型的小型自治服務集合。近年來,隨著企業希望變得更加敏捷並朝著DevOps和持續測試邁進,這一趨勢變得越來越流行。

微服務的利與弊

    微服務不是靈丹妙藥,通過微服務的實施,將暴露出團隊溝通、合作以及其它以前可能隱含但現在被迫公開的問題。但是微服務中的API閘道器可以大大減少構建和質量檢查的時間和精力。微服務體系結構是否適合您取決於您的業務場景複雜度,當業務不復雜,團隊規模不大的時候,單塊架構比微服務架構具有更高的生產率,因為它們各有優缺點。以下是一些優點和缺點:

  • 優點:
    • 微服務架構使開發人員可以自由地獨立開發和部署服務;
    • 可以由相當小的團隊來開發微服務;
    • 易於整合和自動部署(使用開源持續整合工具,例如Jenkis);
    • 易於擴充套件並與第三方服務整合;
    • 可以使用不同的語言來編寫用於不同服務的程式碼;
    • 故障隔離:如果一個微服務失敗,則另一個將繼續工作。
  • 缺點:
    • 由於分散式部署,測試可能變得複雜;
    • 服務數量的增加可能會導致資訊壁壘;
    • 作為分散式系統,可能會導致重複工作;
    • 當服務數量增加時,整個產品的整合和管理可能會變得複雜;
    • 開發人員必須付出額外的努力來實現服務之間的通訊機制。

系統架構

    微服務層中提供了各種服務,服務之間使用http相互通訊或者通過佇列服務進行排程來支撐整個業務系統。其中基礎服務提供了應用中心、模板中心、表單和流程引擎等功能;資料視覺化服務提供資料展示分析包含模板管理、元件管理等功能;二、三維服務提供元件管理、圖層管理、三維模型管理及空間分析等功能;Iot管控服務提供裝置接入管理、協議解析、裝置閘道器管理等功能;第三方服務與阿里雲、騰訊雲、華為雲等服務商提供的雲服務功能進行融合,並與釘釘、企業微信整合;系統管理服務提供整體系統管理功能包含租戶管理、功能管理、許可權管理、單點登入、企業組織管理等功能。同時系統提供統一日誌、訊息列隊、定時任務、檔案處理等服務。日誌採用ELK(Elasticsearch、Logstash、Kibana)進行管理,Elasticsearch是實時全文搜尋和分析引擎,提供蒐集、分析、儲存資料三大功能;Logstash是一個用來蒐集、分析、過濾日誌的工具;Kibana是一個基於Web的圖形介面,用於搜尋、分析和視覺化儲存在 Elasticsearch指標中的日誌資料。訊息佇列服務主要提供了各類通知訊息的推送,使用佇列的方式防止因訊息過多導致推送服務過載。定時任務服務主要用於定時提醒、定時推送等功能。檔案處理服務主要用於PDF列印、資料檔案匯入匯出和二維碼生成等功能。

  • Ocelot閘道器,多個Web應用程式, 每個應用都使用不同的API閘道器.
  • 包含使用IdentityServer4身份認證服務,SSO(單點登陸)應用程式.
  • 採用不同型別的資料庫: SQL Server、MySql、MongoDB.
  • 使用 Redis 做分散式快取.
  • 使用 RabbitMQ 做服務間的訊息傳遞.
  • 使用 Docker 來部署&執行所有的服務和應用程式.
  • 使用 Elasticsearch & Logstash & Kibana 來儲存和視覺化日誌

持續整合(CI)、自動化構建

    個人理解持續整合是為了配合敏捷開發的速度和效率而產生的一個用於編譯、測試、釋出、部署的工具。為什麼叫持續呢?其實就是編碼人員提交了原始碼,那麼該工具就可以進行編譯,測試等一系列運作。怎麼能夠讓編碼人員很快的知道編碼的異常。
工作流程:

相關文章