Net分散式系統之一:系統整體框架介紹

来源:http://www.cnblogs.com/Andon_liu/archive/2016/04/05/5353488.html
-Advertisement-
Play Games

一、設計目的 從事.Net平臺開發系統已有8年多了,一直思考搭建.Net分散式系統架構。基於window平臺搭建的大型分散式系統不多,之前瞭解過myspace、stackoverflow等大型網站。搭建一個大型平臺需要綜合考慮很多方面,不單純是軟體架構,還包括網路和硬體設備等。由於現代大部分應用建設 ...


  一、設計目的

  從事.Net平臺開發系統已有8年多了,一直思考搭建.Net分散式系統架構。基於window平臺搭建的大型分散式系統不多,之前瞭解過myspace、stackoverflow等大型網站。搭建一個大型平臺需要綜合考慮很多方面,不單純是軟體架構,還包括網路和硬體設備等。由於現代大部分應用建設都面臨用戶多、高併發、高可用的需求,傳統軟體架構已不能滿足需求,需要支持分散式軟體架構,能支持橫向擴展,具有高可用、伸縮性、穩定性等特點。結合本人這些年的開發和設計經驗,搭建如下系統架構。


 

  二、系統軟體結構

  

 系統軟體結構示意圖

  系統基於SOA架構設計,系統整體劃分為不同組件或者應用服務,支持分散式的部署及擴展,並通過Nginx組件實現負載均衡。根據邏輯關聯劃分為:表現層、應用層和數據層。表現層負責系統與用戶或者外部系統交互;應用層是服務於表現層,主要實現業務邏輯處理滿足表現層的需求;數據層是負責系統數據的存儲。

  (1)表現層

       主要負責與用戶和外部系統交互,具體提供系統可操作WEB功能、數據交換程式或者數據介面。滿足不同的場景使用。Web Layer主要用asp.net mvc5技術實現;Data Exchange根據需求實現數據交換程式;Data Interface主要基於http協議,用Web API技術實現。

  (2)應用層

       主要負責系統邏輯計算的實現,提供服務介面給展現層使用。此兩層之間通信基於系統內部區域網tcp/ip協議,為了提高數據傳輸效率。根據應用服務職責不同,將分兩大類,分別為業務應用服務和基礎應用服務。業務應用服務實現業務需求的功能服務,比如用戶訂單、某類商品的管理功能等。基礎應用服務實現系統基礎公用的功能服務,比如:日誌服務、緩存服務、用戶認證服務功能等。本系統應用服務一般使用.NET平臺的通信框架WCF技術實現,個別其他組件除外,比如MQ組件、Redis緩存組件。

      (3)數據層

       主要負責系統數據存儲、同步、緩存和備份管理。本系統數據分為結構化數據和非結構化數據。對於結構化數據使用MSSQL2008以上資料庫存儲,基於MSSQL複製同步的機制,可以進行數據讀寫分離的實現,提升數據層面的優化。對於本系統業務日誌數據的存儲選型,由於考慮到業務日誌數據結構多樣化、數據量較大,所以選用MongoDB的NoSQL技術,同時系統面對著高併發的訪問,採取了緩存的機制提升性能,選用Redis緩存組件實現數據緩存存儲。對於非結構化數據存儲,比如文檔、圖片等數據,本系統基於Windows平臺NTFS文件系統實現文檔存儲和讀寫功能。


 

  三、系統物理結構

 

 系統物理結構示意圖

  本系統網路分為:內部區域網和互聯網。伺服器位於內部區域網,通過反向代理伺服器對互聯網公佈系統,用戶通過互聯網訪問系統。從網路層面安全進行隔離。用戶訪問系統基於http協議,系統內部之間伺服器通信基於tcp/ip協議。根據部署應用的劃分,將伺服器分為負載均衡伺服器、Web伺服器、應用伺服器、數據伺服器四大類。

  (1)負載均衡伺服器

    基於Linux之CentOS平臺搭建Nginx服務,作Load Balance。

  (2)Web伺服器

    基於window平臺下IIS web伺服器。部署基於asp.net mvc、web api技術實現的程式。

  (3)應用伺服器

    部署基於.net平臺通信框架之WCF技術實現的服務介面,提供與展現層調用,其中部分公用組件,如MQ則根據組件的要求部署。

  (4)數據伺服器

  本系統數據存儲選用:mssql資料庫、MongoDB、Redis緩存和文件存儲。根據項目情況資料庫可做讀寫分離,同時結合redis做緩存策略提高系統性能。

本章節先大致介紹系統框架及物理結構情況,由於涉及幾個技術點,比如:nginx負載均衡搭建、asp.netmvc與WCF服務之間調用、redis分散式緩存使用、MongoDB存儲日誌、MQ非同步傳輸日誌數據、文件服務實現。後續逐步介紹。

 

 

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

 

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

-Advertisement-
Play Games
更多相關文章
  • i = 0def myFun(): global i i=i +1 return i myFun() accumulate( ) total = 0def accumulate(): global total total += 1 return total ...
  • oauth應該屬於security的一部分。關於oauth的的相關知識可以查看阮一峰的文章:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html 一、目標 現在很多系統都支持第三方賬號密碼等登陸我們自己的系統,例如:我們經常會看到,一些系統使用微 ...
  • 最近遇到的問題小結: 1.django 工程內不要有與項目名稱相同的文件。會導致無法import settings.py文件。 2.django 的 csrf 問題,當發送post請求時,會要求同時發送csrf token,是為了防止跨站請求偽造。 具體使用方法見官方文檔。 http://docs. ...
  • 介紹 我發現了一個問題,今天與大家分享。我把整個過程描述一下。 問題 問題 公司有個框架是基於smarty寫的,我負責php的升級,維護人員把新環境布上來之後,測試人員找我提出經常報錯(錯誤:提示找不到文件的)。 我追蹤了一下代碼,原來是smarty的這個地方報的錯誤。 錯誤:這裡報出文件不存在。 ...
  • 開篇導讀 “養成良好的編程習慣”其實是相當綜合的一個命題,可以從多個角度、維度和層次進行論述和評判。如代碼的風格、效率和可讀性;模塊設計的靈活性、可擴展性和耦合度等等。要試圖把所有方面都闡述清楚必須花很多的精力,而且也不一定能闡述得全面。因此,本系列文章以軟體開發的基礎問題為切入點,闡述程式設計和代 ...
  • 初始化一個map 1 2 3 4 5 Map<String, String> map = new HashMap<String, String>(); map.put("1", "hell"); map.put("2", "hello"); map.put("3", "hel"); map.put( ...
  • 幹掉這道題的那一刻,我只想說:我終於**的AC了!!! 最終記憶體1344K,耗時10282ms,比起歸併樹、劃分樹以及其他各種黑科技,這個成績並不算光彩⊙﹏⊙ 但至少,從最初的無數次TLE到最終的AC,這過程見證了一個二分演算法的艱辛優化 先貼代碼: 1 const int bktSize=1024; ...
  • 現在編程的主流語言基本上都是面向對象的。如C#,C++,JAVA。我們在使用時,已經構造了一個個的類。但是往往由於我們在類內部或外部的設計上存在種種問題,導致儘管是面向對象的語言,卻是面向過程的邏輯,甚至維護起來異常困難。每次增加或修改功能都要改動很多的代碼,如履薄冰。而面向對象的六大原則主要的目的 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...