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

2022-09-15 21:06:15 字數 2813 閱讀 4680

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

由於我們的業務越來越好,有些客戶也越來越喜歡我們的客戶小姐姐,哦,不對,越來喜歡我們的服務。有些客戶就問了,你們除了訂機票,還能不能訂酒店啊?

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

兩話不說,開幹,招人!

再招一組小姐姐,專門從事訂酒店。你指示下屬,加緊聯絡相關酒店,經過一段時間,你們的酒店業務也跑起來了。

這個時候,我們就有了兩個不同的業務,這就是:垂直拆分。

所謂,垂直拆分,就是不同的業務或服務,拆分開來,獨立也一組,為外面提供服務。

當然隨著業務規模發展越來越大,乙個客服小姐姐做為轉接員,也忙不過來,我們就設立了乙個小姐,統一做**轉接的工作。

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

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

現在我們的公司業務大概是這樣的,如下圖:

我們來說說轉接業務組,這個業務組因為直接面向客戶,當然工作量最大,責任最大。

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

如果接到機票的**,就轉接到機票業務組。

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

小姐姐:老闆,我有乙個提議。可以幫你省很多錢。

你:請說。

小姐姐:轉接組只是接了**,就把酒店的業務**轉給酒店組,機票**就轉給機票組。那我們能否直接在我們的****上設定:訂機票請按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位址的客戶端,當後端伺服器列表不變時,它每次都會對映到同一台後端伺服器進行訪問。

現在,又有乙個情景,每個小姐姐都有很多**等待處理,但有點小姐處理快,等待**就少了。如果現在又有新**進來,如何處理?

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

這就是:負載均衡的最小連線數法

最小連線數法

最小連線數演算法比較靈活和智慧型,由於後端伺服器的配置不盡相同,對於請求的處理有快有慢,它是根據後端伺服器當前的連線情況,動態地選取其中當前

積壓連線數最少的一台伺服器來處理當前的請求,盡可能地提高後端服務的利用效率,將負責合理地分流到每一台伺服器。

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

集群 分布式 負載均衡

1 linux集群主要分成三大類 高可用集群,負載均衡集群,科學計算集群 負載均衡集群 load balance cluster 負載均衡系統 集群中所有的節點都處於活動狀態,它們分攤系統的工作負載。一般web伺服器集群 資料庫集群和應用伺服器集群都屬於這種型別。負載均衡集群一般用於相應網路請求的網...

集群,負載均衡,分布式

簡潔明瞭的解釋 記錄一下 集群 一堆伺服器互聯 負載均衡 一堆伺服器分攤壓力 分布式 一堆伺服器分開工作 相對來說,集群一般是指一堆伺服器去做同一項工作,一般是集中高速互聯實現快速的運算,對外的感覺是一台伺服器。負載均衡也是一堆伺服器做同一項工作,不同的伺服器做的事情基本相同,但是對外能發現是不同的...

集群 分布式 負載均衡

計算機集群通過一組鬆散整合的計算機軟體和 或硬體連線起來高度緊密地協作完成計算工作。集群系統中的單個計算機通常稱為節點。集群計算機通常用來改進單個計算機的計算速度和可靠性。單個重負載的運算分擔到多台節點裝置上做並行處理,每個節點裝置處理結束後,將結果彙總,返回給使用者,系統處理能力得到大幅度提高。乙...