一文教你什麼是集羣,什麼是負載均衡!

在「高併發,海量數據,分佈式,NoSql,雲計算…」概念滿天飛的年代,相信很多朋友都據說過甚至常與人提起「集羣,負載均衡」等,前端

但不是全部人都有機會真正接觸到這些技術,也不是全部人都真正理解了這些「聽起來很牛的」技術名詞。下面簡單解釋一下吧。node

要了解這些概念首先要了解一下項目架構的演進,我這裏應用一張Dubbo的文檔圖片如圖web

一:項目架構的演進

ORM與MVC:算法

早期的架構都集中在一臺服務器上,這樣對於小型的業務訪問量是徹底能夠的,可是隨着業務的增多,咱們引進的MVC的架構,這種架構是將整個業務分紅不一樣的層(表現層,業務層,數據訪問層)維護也更加方面了,開發更加方便。數據庫

PRC架構:瀏覽器

可是業務若是繼續增大,項目會出現臃腫,一臺服務器已經徹底沒辦法支持了,因此出現了RPC分佈式的架構,RPC架構就是將服務進行合理拆分,分別放入多臺服務器執行,服務器與服務器之間經過遠程調用的方式進行通訊。緩存

  • 服務提供者:運行在服務器端,提供服務接口與服務實現類服務器

  • 服務中心:運行在服務器端,負責將本地服務發佈成遠程服務,管理遠程服務,提供服務給消費者使用。網絡

  • 服務消費者:運行在客戶端,經過遠程代理對象調用遠程服務架構

目前Java中經常使用的RPC框架:

1:Dubbo:

2:Spring Cloud

3:Thrift

SOA架構:

可是業務繼續增長,對RPC架構來講,各個服務與服務之間的通訊愈來愈多,依賴愈來愈多,愈來愈混亂,給開發帶來了困難,因而SOA架構應運而生,SOA架構將服務與服務集中起來進行管理,加上一個服務治理中心。誰發佈了服務來中心進行註冊,誰須要依賴什麼服務來中心進行請求。

而最近很火的微服務,則是將業務拆分更加精細,每個能夠成爲一個完整的服務。演變確定會演變,可是過程得多久誰也很差說。

二:名詞解釋

接下來進入正題,解釋讓外行看起來高大上的名詞

1:集羣

集羣(Cluster)

所謂集羣是指一組獨立的計算機系統構成的一個鬆耦合的多處理器系統,它們之間經過網絡實現進程間的通訊。應用程序能夠經過網絡共享內存進行消息傳送,實現分佈式計算機。通俗一點來講,就是讓若干臺計算機聯合起來工做(服務),能夠是並行的,也能夠是作備份。

大規模集羣,一般具有如下一些特色:

(1)高可靠性(HA)

利用集羣管理軟件,當主服務器故障時,備份服務器可以自動接管主服務器的工做,並及時切換過去,以實現對用戶的不間斷服務。

(2)高性能計算(HP)

即充分利用集羣中的每一臺計算機的資源,實現複雜運算的並行處理,一般用於科學計算領域,好比基因分析、化學分析等。

(3)負載平衡(LB)

即把負載壓力根據某種算法合理分配到集羣中的每一臺計算機上,以減輕主服務器的壓力,下降對主服務器的硬件和軟件要求。

經常使用的集羣又分如下幾種:

load balance cluster(負載均衡集羣)

一共有四兄弟開裁縫鋪,生意特別多,一我的作不下來,總是延誤工期,因而四個兄弟商量:老大接訂單, 三個兄弟來幹活。客戶多起來以後,老大根據必定的原則(policy) 根據三兄弟手上的工做量來分派新任務。

High availability cluster(高可用集羣)

兩兄弟開早餐鋪,生意不大,可是天天早上7點到9點之間客戶不少而且不能中斷。爲了保證2個小時內這個早餐鋪可以保證持續提供服務,兩兄弟商量幾個方法:

方法一:平時老大作生意,老二這個時間段在家等候,一旦老大沒法作生意了,老二就出來頂上,這個叫作 Active/Standby.(雙機熱備)

方法二:平時老大作生意,老二這個時候就在旁邊幫工,一旦老大沒法作生意,老二就立刻頂上,這個叫作Active/Passive.(雙機雙工)

方法三:平時老大賣包子,老二也在旁邊賣豆漿,老大有問題,老二就又賣包子,又賣豆漿,老二不行了,老大就又賣包子,又賣豆漿.這個叫作Active/Active (dual Active)(雙機互備)

high computing clustering(高性能計算集羣)

10個兄弟一塊兒作手工傢俱生意,一個客戶來找他們的老爹要求作一套很是複雜的仿古傢俱,一我的作也能夠作,不過要作好久好久,爲了1個星期就交出這一套傢俱,10個兄弟決定一塊兒作。

老爹把這套傢俱的不一樣部分分開交給兒子們做,而後每一個兒子都在作木製傢俱的加工,最後拼在一塊兒叫貨。

老爹是scheduler任務調度器,兒子們是compute node. 他們作的工做叫作做業。

2:負載均衡

HTTP重定向負載均衡

當用戶發來請求的時候,Web服務器經過修改HTTP響應頭中的Location標記來返回一個新的url,而後瀏覽器再繼續請求這個新url,實際上就是頁面重定向。經過重定向,來達到「負載均衡」的目標。例如,咱們在下載JAVA源碼包的時候,點擊下載連接時,爲了解決不一樣國家和地域下載速度的問題,它會返回一個離咱們近的下載地址。重定向的HTTP返回碼是302。優勢:比較簡單。缺點:瀏覽器須要兩次請求服務器才能完成一次訪問,性能較差。重定向服務自身的處理能力有可能成爲瓶頸,整個集羣的伸縮性國模有限;使用HTTP302響應碼重定向,有可能使搜索引擎判斷爲SEO做弊,下降搜索排名。

DNS域名解析負載均衡

DNS(Domain Name System)負責域名解析的服務,域名url其實是服務器的別名,實際映射是一個IP地址,解析過程,就是DNS完成域名到IP的映射。而一個域名是能夠配置成對應多個IP的。所以,DNS也就能夠做爲負載均衡服務。事實上,大型網站老是部分使用DNS域名解析,利用域名解析做爲第一級負載均衡手段,即域名解析獲得的一組服務器並非實際提供Web服務的物理服務器,而是一樣提供負載均衡服務的內部服務器,這組內部負載均衡服務器再進行負載均衡,將請求分發到真是的Web服務器上。優勢:將負載均衡的工做轉交給DNS,省掉了網站管理維護負載均衡服務器的麻煩,同時許多DNS還支持基於地理位置的域名解析,即會將域名解析成舉例用戶地理最近的一個服務器地址,這樣能夠加快用戶訪問速度,改善性能。缺點:不能自由定義規則,並且變動被映射的IP或者機器故障時很麻煩,還存在DNS生效延遲的問題。並且DNS負載均衡的控制權在域名服務商那裏,網站沒法對其作更多改善和更強大的管理。

反向代理負載均衡

反向代理服務能夠緩存資源以改善網站性能。實際上,在部署位置上,反向代理服務器處於Web服務器前面(這樣纔可能緩存Web相應,加速訪問),這個位置也正好是負載均衡服務器的位置,因此大多數反向代理服務器同時提供負載均衡的功能,管理一組Web服務器,將請求根據負載均衡算法轉發到不一樣的Web服務器上。Web服務器處理完成的響應也須要經過反向代理服務器返回給用戶。因爲web服務器不直接對外提供訪問,所以Web服務器不須要使用外部ip地址,而反向代理服務器則須要配置雙網卡和內部外部兩套IP地址。優勢:和反向代理服務器功能集成在一塊兒,部署簡單。缺點:反向代理服務器是全部請求和響應的中轉站,其性能可能會成爲瓶頸。

負載均衡策略

  • 輪詢
  • 加權輪詢
  • 最少鏈接數
  • 最快響應
  • Hash法

image

3:緩存

緩存就是將數據存放在距離計算最近的位置以加快處理速度。緩存是改善軟件性能的第一手段,如今CPU愈來愈快的一個重要因素就是使用了更多的緩存,在複雜的軟件設計中,緩存幾乎無處不在。大型網站架構設計在不少方面都使用了緩存設計。

CDN緩存

內容分發網絡,部署在距離終端用戶最近的網絡服務商,用戶的網絡請求老是先到達他的網絡服務商哪裏,在這裏緩存網站的一些靜態資源(較少變化的數據),能夠就近以最快速度返回給用戶,如視頻網站和門戶網站會將用戶訪問量大的熱點內容緩存在CDN中。

反向代理緩存

反向代理屬於網站前端架構的一部分,部署在網站的前端,當用戶請求到達網站的數據中心時,最早訪問到的就是反向代理服務器,這裏緩存網站的靜態資源,無需將請求繼續轉發給應用服務器就能返回給用戶。

本地緩存

在應用服務器本地緩存着熱點數據,應用程序能夠在本機內存中直接訪問數據,而無需訪問數據庫。

分佈式緩存

大型網站的數據量很是龐大,即便只緩存一小部分,須要的內存空間也不是單機能承受的,因此除了本地緩存,還須要分佈式緩存,將數據緩存在一個專門的分佈式緩存集羣中,應用程序經過網絡通訊訪問緩存數據。

3:流控(流量控制)

流量丟棄

經過單機內存隊列來進行有限的等待,直接丟棄用戶請求的處理方式顯得簡單而粗暴,而且若是是I/O密集型應用(包括網絡I/O和磁盤I/O),瓶頸通常再也不CPU和內存。所以,適當的等待,既可以替身用戶體驗,又可以提升資源利用率。

經過分佈式消息隊列來將用戶的請求異步化。