Net分布式系統之一:系統整體框架介紹
一、設計目的
從事.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異步傳輸日志數據、文件服務實現。后續逐步介紹。