分布式大數據高并發的web開發框架

jopen 10年前發布 | 27K 次閱讀 Web框架 Web開發框架

分布式大數據高并發的web開發框架


作者:一燈


一、引言


通常我們認為靜態網頁html的網站速度是最快的,但是自從有了動態網頁之后,很多交互數據都從數據庫查詢而來,數據也是經常變化的,除了一些新聞資訊類的網站,使用html靜態化來提高訪問速度是不太現實的方案。我們不得不在代碼與數據庫之間尋求一種更合適的解決方案。


減少數據庫訪問次數,文件和數據庫分離,大數據分布式存儲,服務器的集群負載均衡,頁面緩存的使用,nosql內存數據庫代替關系型數據庫,這些方案措施都是提高系統高并發性能的關鍵,下面一一分解。


二、分解


(1)      分布式服務器集群


A) 文件服務器集群


圖片、視頻、其他下載文件,它們的下載通常是占用網絡帶寬的罪惡魁首,這些資源一定要獨立放在帶寬好的文件服務器上,能提供http協議訪問地址使用,不至于在下載文件時影響web服務器的cpu運算。


文件服務器最好使用磁盤陣列中心存儲,比如阿里云提供的文件云服務器,這樣使用簡單,使用多大帶寬多大存儲空間選擇就好了。


如果沒有中心存儲,也可以做文件服務器集群,如下圖


分布式大數據高并發的web開發框架


說白了就是每個文件服務器都安裝一個簡單的web api作為文件傳輸和訪問的接口,可以手動分配服務器地址給 web 程序使用,當然也可以做一層簡單的負載均衡器供web程序統一接口調用。


需要注意的是:web api 接口上傳文件結果一定要返回特定服務器完整的http文件下載地址,這個地址要存入數據庫。


文件服務器的數量:文件服務器之間都相對獨立,沒有數據關聯,因此數量的多少主要是看帶寬的承載量和硬盤空間的大小,動態擴展服務器后,只需把服務器地址加入 web程序的調用列表即可達到無限擴展容量的機制。


 


 


 


B) Web服務器集群


不管是windows系統,還是linux系統,單臺服務器的性能和資源都是有限的,支持的連接并發數都有上限,因此必須采用多服務器集群的方法才能提高連接并發數。連接并發數的容量計算也很容易:


  連接并發數= 服務器1并發數+服務器2并發數+……+ 服務器n并發數


當然,我們不能都給每臺web服務器分配一個域名地址訪問,肯定是同一個域名同一個入口,例如百度后面有成百上千臺web服務器,但是我們都是使用 www.baidu.com 一個入口,至于這個入口會自動給我們分配一臺web服務器訪問,我們不會在意這臺web服務器的具體地址是多少,這就是負載均衡器的作用。


分布式大數據高并發的web開發框架


但是,web服務器集群并不像文件服務器集群那么簡單,因為web服務器的程序使用的數據是共享的,具有一致性和實時性的要求。


如果獲取數據時都從數據庫讀取數據,可以保證數據的一致性,但數據量大時,影響性能而又不能保證實時性,這就是我們后面說到的使用緩存技術解決這個問題。


Web服務器類型:微軟的.net iis ,阿帕奇 tomcat 都是出名的輕量級web服務器


 


C) 數據庫服務器集群


通常大型的關系型數據庫 oracle ,mysql , sqlserver 都已經提供了集群的功能,但是,由于磁盤讀寫速度的限制,難以勝任高并發實時性的要求,我們建議使用帶有集群功能的內存數據庫。


Mongodb內存數據庫:


Mongodb是一個開源的nosql 內存數據庫,基于json格式的文檔存儲,數據對象通過json的序列化與反序列化傳輸。在服務器內存足夠大時,把所有的數據裝載到內存中,便于快速訪問;當內存不夠大時,把不常使用的數據持久化到磁盤文件;最新版本的mongodb 3.0 已經提供了服務器集群的功能,并且引入了hadoop大數據的mapreduce并行運算模式,這讓海量數據全部存儲與多臺服務器的內存上提供很好的解決方案。


現在服務器內存的硬件價格已經十分低廉,配置128G內存的服務器已經很普遍,但是我們還是建議一臺服務器存儲數據量不要超過1億條記錄,便于提高并行計算的效率。


分布式大數據高并發的web開發框架


在硬件充裕的情況下,mongodb集群建議采用多副節點的集群模式,不僅提高訪問性能,也保證了數據安全完整性能。


 


Gemfire內存數據庫


Gemfire是很多年前就已經商業化了的nosql內存數據庫,經過了多家大型機構的使用考驗,更幸運的是,在2015年4月發布其開源版本Geode,可能在不久的將來得到更廣泛的使用。


除了開源nosql內存數據庫,國內外的巨頭都已經在研究自己的內存數據庫,比如oracle, ibm , 阿里等等,nosql內存數據庫大有代替關系型數據庫的趨勢。


 


朋友們可以去研究每個內存數據庫的優劣勢,不管使用那種產品,我們無非就是解決兩個問題:1、內存數據庫保證快速訪問;2、服務器集群存儲大數據。至于如何搭建環境大家可以查找相關資料。


 


(2)      負載均衡器


負載均衡服務器分為硬件均衡服務器和軟件均衡服務器,目的就是統一提供一個訪問入口來訪問服務器集群,并且能夠動態監控每個服務器的負載,把新的用戶請求轉給負載小的服務器。


硬件服務器就是直接購買獨立的服務器作為負載均衡服務器,例如阿里云已經提供。


軟件服務器使用具有代理功能的軟件作為轉發服務器,比如Nginx,HAProxy,LVS 等等,具體安裝部署大家可以搜索相關資料。


 


(3)      緩存技術


從上面我們可以看出,web服務器與數據庫服務器是分布在不同的服務器上的,也就是web程序從數據庫獲取數據時,通過網絡tcp/ip協議進行網絡數據傳輸,當查詢的數據量過大時,網絡帶寬速率很可能變為瓶頸,高并發在線時,將會很大影響整體系統的效率。


我們使用緩存技術解決這個問題。這里就涉及到相關業務了,一般來說,我們根據具體的業務,把數據分為兩類:


1、 一類是不經常變的數據,比如表結構,公共設置數據,省市縣名錄等等,這些數據我們將會作為永久緩存數據,我們將會一次性讀取數據庫全部記錄緩存到web服務器本地長久保存,并且定時檢測數據庫是否有更新的數據,如果有更新,則再更新本地緩存數據;


2、 另一類是經常變的數據,對于這種數據,需要每次讀取時都從數據庫讀取,往往這類數據也包含海量的數據,讀取數據庫時將不能一次性讀取,只能分頁讀取,緩存數據保存的時間也不宜太長。


 


緩存的工具也很多,比如 .net里自帶的MemoryCache,java 的有 ehcache ,都是比較出名的緩存。


三、綜合


綜上所述,我們就可以設計我們的整體方案圖如下:


 分布式大數據高并發的web開發框架


 


四、開發框架


ErpCore是一套強大的快速開發框架,集數據庫設計、軟件建模、模型自動生成、界面可視化設計、業務流可自定義、全自動生成用戶所需系統于一體。在此框架上擴展出所有行業的業務系統,它讓軟件工程師從“建模——寫代碼——測試”所有繁瑣重復的工作變為全自動化生成,大大簡化了企業軟件的開發時間和成本。


1、自動建模


 


  框架內部帶有虛擬數據庫系統,用戶可在虛擬數據庫上創建表、字段、表間關聯,企業根據自己的具體業務需求構建合適的數據庫架構,即通過自動化實現銷售業務人員將能完成DBA的工作。業務流程將變成企業自定義。


 


2、自定義對象


 


  對應于虛擬數據庫上創建表、字段、表間關聯,用戶可自定義對象、對象屬性、對象關聯。奠定了可以擴展出符合所有行業所有業務系統可能性。


 


3、窗體表單可視化設計


 


  通過拖拽拉的方式,業務人員即可創建軟件使用界面,把界面關聯起來即可實現不用編碼就能創建所需的業務系統。


 


4、全自動創建子系統


 


  管理員在后臺通過創建對象、創建窗體,并集成成一個子系統,普通使用人員就能使用子系統進行工作,不需額外開發工作。


 


五、開源產品下載


請訪問 http://www.8088net.com 下載開發框架源碼


.net版 https://git.oschina.net/bigcore/bigcore.net


Java版 https://git.oschina.net/bigcore/bigcore

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!