分布式系統框架


學習記錄

 

1、適應多web服務器集群、數據庫分布式集群的大型分布式系統
2、采用mongodb內存數據庫,提高並發量
3、多服務器共享緩存、分布式共享Session
4、適應於軟負載均衡(LVS/HAProxy/Nginx)和硬負載均衡等環境
5、可以以5000並發量/1億條記錄大數據為單位,線性擴展負載均衡服務器,支撐千萬級pv並發

 

【分布式系統框架】實現原理

一、引言

通常我們認為靜態網頁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服務器類型:微軟的.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開發框架

 
 
出自:http://www.8088net.com/system.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM