分佈式系統框架

學習記錄html

 

一、適應多web服務器集羣、數據庫分佈式集羣的大型分佈式系統
二、採用mongodb內存數據庫,提升併發量
三、多服務器共享緩存、分佈式共享Session
四、適應於軟負載均衡(LVS/HAProxy/Nginx)和硬負載均衡等環境
五、能夠以5000併發量/1億條記錄大數據爲單位,線性擴展負載均衡服務器,支撐千萬級pv併發java

 

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

1、引言mysql

一般咱們認爲靜態網頁html的網站速度是最快的,可是自從有了動態網頁以後,不少交互數據都從數據庫查詢而來,數據也是常常變化的,除了一些新聞資訊類的網站,使用html靜態化來提升訪問速度是不太現實的方案。咱們不得不在代碼與數據庫之間尋求一種更合適的分佈式系統解決方案。linux

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

2、分解sql

(1)       分佈式服務器集羣mongodb

A) 文件服務器集羣數據庫

圖片、視頻、其餘下載文件,它們的下載一般是佔用網絡帶寬的罪惡魁首,構建分佈式系統時這些資源必定要獨立放在帶寬好的文件服務器上,能提供http協議訪問地址使用,不至於在下載文件時影響web服務器的cpu運算。json

分佈式系統文件服務器最好使用磁盤陣列中心存儲,好比阿里雲提供的文件雲服務器,這樣使用簡單,使用多大帶寬多大存儲空間選擇就行了。windows

若是沒有中心存儲,也能夠作文件服務器集羣,以下圖

分佈式大數據高併發的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內存數據庫大有代替關係型數據庫的趨勢。

 

構建分佈式系統朋友們能夠去研究每一個內存數據庫的優劣勢,無論使用那種產品,咱們無非就是解決兩個問題:一、內存數據庫保證快速訪問;二、服務器集羣存儲大數據。至於如何搭建環境你們能夠查找相關資料。

 

(2)       負載均衡器

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

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

軟件服務器使用具備代理功能的軟件做爲轉發服務器,好比Nginx,HAProxy,LVS 等等,具體安裝部署你們能夠搜索相關資料。

 

(3)       緩存技術

從上面咱們能夠看出,分佈式系統web服務器與數據庫服務器是分佈在不一樣的服務器上的,也就是web程序從數據庫獲取數據時,經過網絡tcp/ip協議進行網絡數據傳輸,當查詢的數據量過大時,網絡帶寬速率極可能變爲瓶頸,高併發在線時,將會很大影響總體系統的效率。

咱們使用緩存技術解決這個問題。這裏就涉及到相關業務了,通常來講,咱們根據具體的業務,把數據分爲兩類:

一、  一類是不常常變的數據,好比表結構,公共設置數據,省市縣名錄等等,這些數據咱們將會做爲永久緩存數據,咱們將會一次性讀取數據庫所有記錄緩存到web服務器本地長久保存,而且定時檢測數據庫是否有更新的數據,若是有更新,則再更新本地緩存數據;

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

 

緩存的工具也不少,好比 .net裏自帶的MemoryCache,java 的有 ehcache ,都是比較出名的緩存。

3、綜合

綜上所述,咱們就能夠設計咱們的分佈式系統總體方案圖以下:

  分佈式系統大數據高併發的web開發框架

 
 
出自:http://www.8088net.com/system.html
相關文章
相關標籤/搜索