什麼是集羣?什麼又是負載均衡?你說得清楚嗎?

點擊上方藍色“碼猿技術專欄”,選擇“設爲星標

在“高併發,海量數據,分佈式,NoSql,雲計算......”概念滿天飛的年代,相信不少朋友都聽說過甚至常與人提起“集羣,負載均衡”等,

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

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

一:項目架構的演進

img

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法

3:緩存

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

CDN緩存

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

反向代理緩存

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

本地緩存

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

分佈式緩存

大型網站的數據量非常龐大,即使只緩存一小部分,需要的內存空間也不是單機能承受的,所以除了本地緩存,還需要分佈式緩存,將數據緩存在一個專門的分佈式緩存集羣中,應用程序通過網絡通信訪問緩存數據。

3:流控(流量控制)

流量丟棄

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

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

END

有熱門推薦????
往期推薦一文搞定分佈式系統ID生成方案安利!阿里程序員常用的 15 款開發者工具~MySQL性能優化實踐(很全面,值得收藏)看完這篇接口限流,又能和面試官扯皮了~盤它!一萬多字,兩小時帶你入門 Docker !
文章有幫助的話,在看,轉發吧。
謝謝支持喲 (*^__^*)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章