集群(Cluster)
指一組計算機系統構成一個松耦合的多處理器系統,它們之間通過網絡實現進程間的通信,實現分布式計算。在客戶端看來就像是只有一個服務器。集群可以利用多個計算機進行並行計算從而獲得很高的計算速度,也可以用多個計算機做備份,從而使得任何一個機器壞了整個系統還是能正常運行。
集群技術的分類
- 高可用集群(High Availability,HA):高可用的含義是最大限度地可以使用。從集群的名字上可以看出,此類集群實現的功能是保障用戶的應用程序持久、不間斷地提供服務。
- 負載均衡集群:分為前端負載調度和后端服務兩個部分。負載調度部分負責把客戶端的請求按照不同的策略分配給后端服務節點,而后端節點是真正提供應用程序服務的部分。與高可用集群不同的是,負載均衡集群中,所有的后端節點都處於活動動態,它們都對外提供服務,分攤系統的工作負載。
- 科學計算集群(High Performance Computing,HPC):高性能計算集群。這類集群致力於提供單個計算機所不能提供的強大計算能力,包括數值計算和數據處理,並且傾向於追求綜合性能。HPC 與超級計算類似,但是又有不同,計算速度是超級計算追求的第一目標。最快的速度、最大的存儲、最龐大的體積、最昂貴的價格代表了超級計算的特點。
負載均衡(Load Balance)
負載均衡建立在現有網絡結構之上,它提供了一種廉價、有效、透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。
主要的負載均衡的技術有如下這些:
- DNS 負載均衡:它是最早的負載均衡技術,通過 DNS 來實現,在 DNS 中為多個地址配置同一個名字,因而查詢這個名字的客戶機將得到其中某一個地址,從而使得不同的客戶訪問不同的服務器,達到負載均衡的目的。DNS 負載均衡是一種簡單而有效的方法,但是它不能區分服務器的差異,也不能反映服務器的當前運行狀態。
- 代理服務器負載均衡:使用代理服務器,可以將請求轉發給內部的服務器,使用這種加速模式顯然可以提升靜態網頁的訪問速度。然而,也可以考慮這樣一種技術,使用代理服務器將請求均勻轉發給多台服務器,從而達到負載均衡的目的。
- 地址轉換網關負載均衡:支持負載均衡的地址轉換網關,可以將一個外部 IP 地址映射為多個內部 IP 地址,對每次 TCP 連接請求動態使用其中一個內部地址,達到負載均衡的目的。
- 協議內部支持負載均衡:除了這三種負載均衡方式之外,有的協議內部支持與負載均衡相關的功能,例如 HTTP 協議中的重定向能力等,HTTP 運行於 TCP 連接的最高層。
- 反向代理負載均衡:普通代理方式是代理內部網絡用戶訪問 internet 上服務器的連接請求,客戶端必須指定代理服務器,並將本來要直接發送到 internet 上服務器的連接請求發送給代理服務器處理。反向代理(Reverse Proxy)方式是指以代理服務器來接受 internet 上的連接請求,然后將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給 internet 上請求連接的客戶端,此時代理服務器對外就表現為一個服務器。
- 混合型負載均衡:在有些大型網絡,由於多個服務器群內硬件設備、各自的規模、提供的服務等的差異,可以考慮給每個服務器群采用最合適的負載均衡方式,然后又在這多個服務器群間再一次負載均衡或群集起來以一個整體向外界提供服務(即把這多個服務器群當做一個新的服務器群),從而達到最佳的性能。此種方式有時也用於單台均衡設備的性能不能滿足大量連接請求的情況下。
負載均衡從應用的地理結構上又分為本地負載均衡(Local Load Balance)和全局負載均衡(Global Load Balance)。
- 本地負載均衡:能有效地解決數據流量過大、網絡負荷過重的問題,並且不需花費昂貴開支購置性能卓越的服務器,充分利用現有設備,避免服務器單點故障造成數據流量的損失。其有靈活多樣的均衡策略把數據流量合理地分配給集群內的服務器共同負擔。即使是再給現有服務器擴充升級,也只是簡單地增加一個新的服務器到集群中,而不需改變現有網絡結構、停止現有的服務。 它關注一個地理位置上的設備群,是微觀的。
- 全局負載均衡:主要用於在一個多區域擁有自己服務器的站點,為了使全球用戶只以一個 IP 地址或域名就能訪問到離自己最近的服務器,從而獲得最快的訪問速度。它關注的是一個網絡的整體,是對放在不同位置、為完成同一個任務的設備群體做負載均衡,是宏觀的。全局負載均衡有以下的特點:
- 實現地理位置無關性,能夠遠距離為用戶提供完全的透明服務
- 除了能避免服務器、數據中心等的單點失效,也能避免由於 ISP 專線故障引起的單點失效
- 解決網絡擁塞問題,提高服務器響應速度,服務就近提供,達到更好的訪問質量
負載均衡又分為硬件均衡服務器和軟件均衡服務器:
- 硬件服務器:就是直接購買獨立的服務器作為負載均衡服務器,硬件負載均衡效率高,但是價格貴,例如,阿里雲已經提供。
- 軟件服務器:使用具有代理功能的軟件作為轉發服務器,比如 Nginx,HAProxy,LVS 等等,軟件負載均衡系統價格較低或者免費,效率較硬件負載均衡系統低。
負載均衡的應用(以 IPTV 業務為例)
華燈初上的時候,打開電視機,點播一個你愛看的電影,電影頃刻間就開演了!你可否想過,和你一樣點播電視節目的有千家萬戶,為什么每家每戶想看的節目都能及時送到眼前呢?這是怎么做到的呢?
在電視上點播節目是一種 IPTV 業務,被點播的電影、電視劇等節目我們稱為內容。向眾多用戶提供內容是由一個專門的網絡完成的,這個網絡我們叫它內容分發網絡(CDN),我們將這個分發網絡上負責給電視傳送內容的服務器叫做 CDN 節點(CDN node)。
在網絡建設之初、IPTV 用戶還較少的時候,這個網絡並不龐大,可能一台設備就能輕松處理完全部用戶的要求。然而隨着業務的發展,用戶量和業務量與日俱增,一台設備已經招架不住了。這時我們就需要給這台設備找些幫手。於是我們為這台設備“克隆”一些兄弟,然后將用戶的要求分攤給所有兄弟,大家一起共同面對。對於這個網絡來說,大家要完成的任務即是負載,如此多隊員的合作以及團隊運作,即是負載均衡。
大家合作,處理業務的能力是夠了,但是任務來了后究竟由誰來處理呢?隊員們會不會都不知道應該做什么?會不會都搶着做而打起來?因此必須要有一個領隊(CDN Manager)來管理他們,指揮他們誰應該做什么、要達到什么樣的目的。在向各隊員發出指示之前,領隊需要首先統一接收任務,然后分析並分解任務、挑選合適的隊員(CDN node)來執行任務,再將任務安排下去由合適的隊員具體來執行。在領隊的合理安排下,隊員們都有條不紊地執行任務,不會出現有的太閑而有的過忙的現象,“CDN 團隊”融洽高效地完成了任務。
那么領隊如何決定把某個任務或子任務分給哪個隊員呢?領隊的決定可不是隨意做出的,而是相當謹慎且科學的。領隊是依據一些策略來做出決定的。這些策略包括用戶的網絡地址、用戶的分組、先到先得規則等。根據這些策略,領隊可以把一個大任務分解成多個子任務,讓每個隊員執行其中一個小任務,大家完成后由領隊匯總,達到完成大任務的目的,這樣這個任務就會執行得很快(如分布式計算);領隊也可以把一批任務中的每一個任務分散到每個隊員去分頭執行,由隊員直接完成這些任務,這樣這批任務也會執行得很快。大規模的 CDN 網絡通常是一級一級、一層一層的,我們叫它分布式網絡,相鄰的層級之間形成依賴和備份關系。而你點播的節目最終通常由最靠近你的CDN 節點送達你的電視機,這就是為什么節目總是那么及時地開演。當最靠近你的 CDN 節點出現故障或者服務能力無法提供服務時,領隊能夠根據依賴和備份策略選取其他合適的節點提供服務。
說到這里,大家應該明白了,負載均衡就是團隊運作。為了一個共同的團隊目標,位於不同位置上“隊員”們在領隊的統一調度下,協同工作,將大的任務相對平均地分擔起來,把任務完成的更快、更好!在整個網絡這個大范圍內的負載均衡是全局負載均衡,局部的小范圍內的負載均衡是本地負載均衡。
單兵作戰到團隊作戰:
全局負載均衡分布式架構(網絡規模大):
大規模網絡中,局部的本地負載均衡: