輕鬆學習分佈式|系列2|負載均衡算法。

上篇文章,咱們用客服公司的例子來簡單介紹什麼是分佈式系統。算法

今天,咱們繼續咱們的創業遊戲。(本系列,打算相似於打怪升級的遊戲模式來說解一些深奧的內容,喜歡嚴肅古板的同窗,能夠選擇離開 )。後端

因爲咱們的業務愈來愈好,有些客戶也愈來愈喜歡咱們的客戶小姐姐,哦,不對,越來喜歡咱們的服務。有些客戶就問了,大家除了訂機票,還能不能訂酒店啊?服務器

作老闆的你,第一時間,眼睛冒出兩個¥¥。有錢賺,傻子才拒絕。架構

兩話不說,開幹,招人!負載均衡

再招一組小姐姐,專門從事訂酒店。你指示下屬,加緊聯繫相關酒店,通過一段時間,大家的酒店業務也跑起來了。分佈式

這個時候,咱們就有了兩個不一樣的業務,這就是:垂直拆分。函數

所謂,垂直拆分,就是不一樣的業務或服務,拆分開來,獨立也一組,爲外面提供服務。架構設計

固然隨着業務規模發展愈來愈大,一個客服小姐姐作爲轉接員,也忙不過來,咱們就設立了一個小姐,統一作電話轉接的工做。設計

由於轉接業務,是同時爲後面兩個業務服務的,這種獨立設立或拆分的方式,就是水平拆分。blog

所謂,水平拆分,就是把公共的服務,拆分出來,獨立成組,爲外界提供服務。

如今咱們的公司業務大概是這樣的,以下圖:

 

 咱們來講說轉接業務組,這個業務組由於直接面向客戶,固然工做量最大,責任最大。

她們天天接到酒店的電話,就把電話轉接到酒店 業務組。

若是接到機票的電話,就轉接到機票業務組。

有一天,一位轉接業務組的小姐姐忽然跑到你的辦公室。

小姐姐:老闆,我有一個提議。能夠幫你省不少錢。

你:請說。

小姐姐:轉接組只是接了電話,就把酒店的業務電話轉給酒店組,機票電話就轉給機票組。那咱們可否直接在咱們的熱線電話上設置:訂機票請按1,訂酒店講按2,就直接轉給相關組了,不須要咱們業務組再轉接了。

你:對啊!好意見!這個月開始,你的工資漲一倍。任命你爲業務經理。你去從新規劃分配轉接組的工做安排。

如今轉接組的業務,就自動讓電話軟件代替了,這就叫自動化。固然,自動化,也不屬於分佈式系統中一個關鍵的概念,可是在軟件開發或架構設計中,它是極其重要的思惟方式或工做原則。

這個原則就是:能自動化的儘可能自動化。

咱們再跳回到遊戲中。

自動化處理後,業務愈來愈好,客戶的電話愈來愈多。如今問題來了。

好比,10個酒店的訂單電話,分配給10個小姐姐去處理。咱們應該怎麼處理呢?

有同窗說,誰有空誰接,隨機處理好了。這就是負載均衡的隨機法:

隨機法

     經過系統的隨機算法,根據後端服務器的列表大小值來隨機選取其中的一臺服務器進行訪問。由機率統計理論能夠得知,隨着客戶端調用服務端的次數增多,

其實際效果愈來愈接近於平均分配調用量到後端的每一臺服務器,也就是輪詢的結果。

那若是,有的小姐姐能力強一點,有的能力弱一點,又怎麼處理呢?

有同窗說,那就讓能力強的多幹點活,工資提成也多給點就行。對的,這就是負載均衡的加權隨機法

加權隨機法

    加權隨機法也根據後端機器的配置,系統的負載分配不一樣的權重。它是按照權重隨機請求後端服務器。

那可否作到公平一點呢?每人接儘可能分配一些工做。

有同窗說,這好辦,第1個給編號1,第2個給編號2,等等,如此類推。

那,20個電話呢?

同窗說,也好辦,1,3給編號1;2,4給編號2,等等,如此類推。

那,30個,40個呢?

同窗:這.......

怎麼辦?

很簡單,學過數學 的你,很天然想到用整除求餘函數mod。

比較,有10個小姐姐,30個電話,就是:21mod10=1,  22mod10=2,等等,如此類推。

那每一個電話均可以平均分配到每一個小姐姐。這個就是:負載均衡的輪詢法

輪詢法

  將請求按順序輪流地分配到後端服務器上,它均衡地對待後端的每一臺服務器,而不關心服務器實際的鏈接數和當前的系統負載。

固然輪詢法中,也一樣可讓能力強的幹多點活,多拿點錢。這個就是,負載均衡的加權輪詢法

加權輪詢法

  不一樣的後端服務器可能機器的配置和當前系統的負載並不相同,所以它們的抗壓能力也不相同。給配置高、負載低的機器配置更高的權重,讓其處理更多的請;而配置低、負載高的機器,給其分配較低的權重,下降其系統負載,加權輪詢能很好地處理這一問題,並將請求順序且按照權重分配到後端。

 

這時,有個VIP客戶,每次電話都特別喜歡找2號的小姐姐。不是2號的小姐姐,他就不訂票,客戶就是上帝,固然要知足客戶需求,怎麼辦呢?

簡單,把這個客戶的電話記下來,編號爲2,軟件設置一下,下次編號2的客戶就直接轉接到編號2的小姐姐。

這個就是負載均衡中的源地址哈希法

源地址哈希法

     源地址哈希的思想是根據獲取客戶端的IP地址,經過哈希函數計算獲得的一個數值,用該數值對服務器列表的大小進行取模運算,獲得的結果即是客服端要訪問服務器的序號。採用源地址哈希法進行負載均衡,同一IP地址的客戶端,當後端服務器列表不變時,它每次都會映射到同一臺後端服務器進行訪問。

 

如今,又有一個情景,每一個小姐姐都有不少電話等待處理,但有點小姐處理快,等待電話就少了。若是如今又有新電話進來,如何處理?

簡單,把電話轉給等待電話少的小姐姐。

這就是:負載均衡的最小鏈接數法

最小鏈接數法

     最小鏈接數算法比較靈活和智能,因爲後端服務器的配置不盡相同,對於請求的處理有快有慢,它是根據後端服務器當前的鏈接狀況,動態地選取其中當前

積壓鏈接數最少的一臺服務器來處理當前的請求,儘量地提升後端服務的利用效率,將負責合理地分流到每一臺服務器。

 

以上就是咱們今天要講得負載均衡算法 。

相關文章
相關標籤/搜索