Net分散式系統之五:微服務架構

来源:http://www.cnblogs.com/Andon_liu/archive/2017/05/03/6801534.html
-Advertisement-
Play Games

因工作較忙,抽時間將框架遇到的問題和框架升級設計進行記錄。 一、背景&問題 之前框架是一個基於SOA思想設計的分散式框架。各應用通過服務方式提供使用,服務之間通信是RPC方式調用,具體實現基於.NET的WCF通信平臺。框架存在如下2個問題: 1、高併發處理能力不足。一當高併發請求,可能出現多個服務待 ...


   因工作較忙,抽時間將框架遇到的問題和框架升級設計進行記錄。

 

一、背景&問題

  之前框架是一個基於SOA思想設計的分散式框架。各應用通過服務方式提供使用,服務之間通信是RPC方式調用,具體實現基於.NET的WCF通信平臺。框架存在如下2個問題:

  1、高併發處理能力不足。一當高併發請求,可能出現多個服務待定處理,導致整個系統出現瓶頸。

  2、隨著移動端廣泛應用,服務不能靈活支持APP應用。

  3、系統持續集成部署過於繁瑣,遇到問題不好定位。

  基於以上存在問題升級框架,結合當前主流的架構思想,將系統進行服務化思維,就是“微服務架構”。


  

二、微服務架構

  微服務架構(Microservices Architecture)是將系統拆分為多個服務,俗稱為應用服務。應用服務實現單一、具體的業務應用功能,支持獨立部署維護,多個應用服務構建成系統。應用服務之間通過輕量級通信框架進行,並且支持應用服務用不同技術或者平臺實現。微服務架構是SOA架構設計思想另一種實現方式。微服務架構有如下特點:

 1、微服務架構好處

  (1)橫向擴展應用服務提升系統併發處理能力

  (2)應用服務獨立部署維護,有利於迭代開發升級持續部署

  (3)架構靈活支持多種技術實現

  (4)有利於應用服務實現高可用性

 2、微服務架構不足

  (1)對系統設計有一定要求,尤其是拆分技術應用服務介面

  (2)導致系統實現複雜度的提高

  (3)需要確保系統數據一致性機制

  (4)導致系統維護要求和成本提高

  系統是否需要採用微服務架構進行構建是由項目需求決定。採用微服務架構進行設計構建系統,對團隊成員能力比傳統要求高,尤其是設計能力。


  

三、框架設計原則

  1、可擴展:支持不修改系統功能,按需擴展伺服器資源。

  2、高可用:支持分散式部署雙機熱備機制,滿足系統高可用性的要求。

  3、高併發:支持快捷擴張應用服務處理能力,提升系統處理能力,滿足併發請求。

  4、安全性:訪問安全通過統一認證訪問;信息安全通過加解密、簽名傳輸;網路安全通過網路隔離及防火牆;數據安全通過定時備份及高容錯能力。

  5、一致性:採用數據最終一致性策略。


 

四、框架總體設計

    

                                                                                圖1- 系統架構示意圖

  如圖所示,系統架構基於SOA架構設計思想,並且採用微服務架構方式進行設計和構建。將系統呈現和數據進行分離。系統呈現基於網頁進行實現,支持多種前端UI框架整合及自定義開發;數據由應用服務提供,統一通過“網關API”提供使用。架構支持通過網路層、應用層的負載均衡中間件等,實現高可用和併發處理能力。架構將一些基礎公共功能抽離構建成中間件。

  1、網關API:應用服務通過網關API統一對外提供服務。網關API基於http協議、以restful方式提供統一服務介面,約定介面通信協議,支持系統呈現的功能,以輕量級的通信方式,滿足不同客戶端。網關API實現統一數據訪問許可權控制、路由應用服務、限流等功能。

  2、消息平臺:負責應用服務之間更新同步信息,將原有系統架構分散式事務調用更新信息的方式,調整為通過消息非同步發佈/訂閱處理,保證數據最終一致性,應用服務之間降低耦合度和強依賴關係。高併發能力下,取得緩存作用。

  3、服務註冊監控中心:負責應用服務註冊發佈登記,同時監控應用服務介面運行情況,支持動態控制應用服務接收請求,實現“去中心化”服務控制。組件實現服務註冊登記、監控等功能。

  4、認證中心:負責架構訪問統一身份認證。通過用戶口令和許可權進行控制訪問。結合“網關API”實現安全訪問、限流等功能,同時實現頁面管理功能。

  5、日誌管理系統:負責記錄系統日誌,提供服務介面和組件,業務代碼通過非同步方式將日誌信息傳輸到“消息平臺”,日誌管理系統訂閱“消息平臺”的日誌信息進行處理存儲。同時提供日誌管理功能

  6、緩存中心:基於Redis分散式記憶體資料庫,搭建架構統一緩存中心,提供統一緩存服務。

   

五、軟體架構設計

        

                                                                                 圖2- 軟體架構示意圖

  如圖所示,系統架構以微服務架構方式進行開發,從切麵觀察每個應用服務進行垂直獨立開發,根據職責劃分層次,從上而下分為四個層次,分別為Web層、服務介面層、業務邏輯層及數據訪問層。Web層主要負責系統功能呈現表達,直接面對用戶;服務介面層主要負責提供標準化服務介面,與呈現層對接;業務邏輯層主要實現應用業務邏輯,是應用服務核心部分;數據訪問層負責數據持久化,支持業務邏輯層。各層次之間通過介面進行隔離,有利於後續維護擴展,減低依賴和影響。

  應用服務完成開發後進行集成部署。Web層將根據約定集成到Web應用容器,其餘層次構建為應用服務進行部署,並將服務介面進行註冊登記發佈使用。

六、結語

  基礎架構大致設計就這樣,還需要考慮實施部署,可以考慮雲平臺彈性資源,再結合docker容器技術。

  後續再逐步介紹相關基礎組件設計及實現原理。技術框架重於解決問題,設計依賴需求,需求來源實際業務場景。

 

 

作者:劉蔡濤
出處:http://www.cnblogs.com/Andon_liu
關於作者:專註於微軟平臺項目架構、管理。熟悉設計模式、領域驅動、架構設計、敏捷開發和項目管理。現主要從事ASP.NET MVC、WCF/Web API、SOA、MSSQL、redis方面的項目開發、架構、管理工作。 如有問題或建議,請一起學習討論!
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
如有問題,可以郵件:[email protected] 聯繫我,謝謝。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 咱不要多, 就一個隱身技能, 嘿嘿嘿 定義 橋接模式(bridge): 在軟體系統中, 某些由於自身的邏輯, 它具有兩個或多個維度的變化, 那麼如何應對這種"多維度的變化"? 如何利用面向對象的技術來使得該類型能夠輕鬆的沿著多個方向進行變化, 而又不引入額外的複雜度?這就是Bridge模式. 而具體 ...
  • 任何事都是平衡的,沒有完美,得到了一些東西,自然會失去一些東西。 捨得!捨得!做人做事都是這樣。關鍵想好最想要的是什麼,接受由此失去的。 系統設計也是這樣,需要關註重點,深入思考,架構要簡單、可控、模塊化、直覺化; 當時間有限時,抓大放小,不要在過於瑣碎的地方浪費太多的時間。 此外:每種技術、方案都 ...
  • 回到目錄 SchedulingTask產生的原因 任務調試主要指定期執行某些任務代碼,之前用過quartz,感覺有些重,使用時需要添加包包,配置管理項時,對於簡單的項目用它就顯得有些臃腫了,不如直接上個簡單的東西來實現,所有才有了今天的SchedulingTask,它被大叔集成到了最新的lindAg ...
  • 簡單工廠模式的類圖如下: 簡單工廠根據具體的指令創建指定的對象,簡單工廠能創建的對象各類事先都是在代碼裡面寫好的。 工廠方法模式的類圖如下: 兩種方式做一個對比,以需求的變化,來顯示更改的內容和位置 什麼樣的需求?計算器要求添加新的運算種類 開平方 簡單工廠裡面需要加上開平方的功能類,然後去更改工廠 ...
  • 1 #include 2 #include 3 4 using namespace std; 5 6 class CPrototype 7 { 8 public: 9 CPrototype() 10 { 11 12 } 13 CPrototype(int iAge): m_iAge(iAge) 14... ...
  • 一、Abp中的後臺工作及後臺工作者類 請閱讀這篇文章 二 、Abp官方實現的缺點 Abp官方實現方式很簡單,也很容易上手,但缺點是工作者類依賴了具體的基類(PeriodicBackgroundWorkerBase),就會存在應用程式耦合。 為什麼會耦合呢,假設以後想採用HangFire或Quartz ...
  • 在做項目時,遇到需要創建DAO、Service等類的實例的時候,想到用工廠方法來運作,而簡單工廠方法又有明顯的缺點: ①由於工廠類集中了所有實例的創建邏輯,違反了高內聚責任分配原則,將全部創建邏輯集中到了一個工廠類中; ②它所能創建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。 ...
  • 一、什麼是雙重認證 所謂雙重認證簡單來說就是除了用戶名密碼方式外,還額外增加了一道登錄屏障。登錄時先輸入用戶名和密碼,正確後會向郵箱或手機號發送一個驗證碼(取決於您採用何種方式,甚至可以採用銀行的電子KEY啥的),輸入的驗證碼如果正確的話,才可以登錄系統。 二、AbpZero中使用雙重認證特別需要註 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...