PHP實現負載均衡的加權輪詢方法分析

2021-09-30 17:18:02 字數 1222 閱讀 9133

負載均衡演算法有哪些?

輪詢法:將請求按順序輪流地分配到後端伺服器上,它均衡地對待後端的每一台伺服器,而不關心伺服器實際的連線數和當前的系統負載。

隨機法:通過系統的隨機演算法,根據後端伺服器的列表大小值來隨機選取其中的一台伺服器進行訪問。

源位址雜湊法:根據獲取客戶端的ip位址,通過雜湊函式計算得到乙個數值,用該數值對伺服器列表的大小進行取模運算,得到的結果便是客服端要訪問伺服器的序號。採用源位址雜湊法進行負載均衡,同一ip位址的客戶端,當後端伺服器列表不變時,它每次都會對映到同一台後端伺服器進行訪問。

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

加權隨機法:與加權輪詢法一樣,加權隨機法也根據後端機器的配置,系統的負載分配不同的權重。不同的是,它是按照權重隨機請求後端伺服器,而非順序。

最小連線數法:由於後端伺服器的配置不盡相同,對於請求的處理有快有慢,最小連線數法根據後端伺服器當前的連線情況,動態地選取其中當前積壓連線數最少的一台伺服器來處理當前的請求,盡可能地提高後端服務的利用效率,將負責合理地分流到每一台伺服器。

2.如何用php實現加權輪詢?

實現思路:

通過傳入不同的使用者id,然後給他們分配不同的主機。

首先,需要乙個接收使用者id的陣列。

其次,需要乙個存主機的陣列,這些主機有不同的權重。這裡的權重可以這麼考慮:

假設有abc三颱主機,權重分別為3,1,1,那麼a的佔比為0.6,b和c的佔比各為0.2。

直接遍歷主機的陣列,假如使用者來了100個人,到a的時候,a的佔比是0.6,就從使用者陣列裡隨機取60個人分給a;輪到b時,b的佔比是0.2,就從使用者陣列裡隨機取20人;同理,c20人,這樣就完成了100個請求的**。

可是真實場景不是固定一批使用者,而是持續不斷的使用者請求,由於**非常快,當來的新使用者非常少時,每次從使用者佇列中取完、**後立馬去使用者佇列中取,很有可能每次只取2條,造成請求全部給了a,b和c一直沒有的情況。這時候可以考慮按照不同策略從使用者佇列中取資料。假設以前5ms就處理完一次**,則現在定義兩種策略,如果使用者佇列中有100個使用者時,就取出來,按著主機佔比進行**,如果使用者佇列中不足100人,但是當前時間和上一次取值時間相差10ms,就取出來進行**,這樣就可以累積5ms,而這5ms裡佇列中又會多一些使用者請求,這樣就不會把所有請求都分給一台機器了。

負載均衡演算法 加權輪詢

輪詢演算法沒有考慮每台伺服器的處理能力,實際情況是每台伺服器的配置 安裝的業務應用等不同,其處理能力會不一樣。所以,加權輪詢演算法的原理就是 根據伺服器的不同處理能力,給每個伺服器分配不同的權值,使其能接受相應權值數的服務請求。首先看乙個簡單的nginx負載均衡配置。按照上述配置,nginx每收到7...

Nginx負載均衡 輪訓策略與加權輪詢

nginx 負載均衡排程策略 排程策略 含義輪詢 按照時間順序,逐一分配到不同的後端伺服器 加權輪詢 weight值越大,分配到的訪問機率越高 ip hash 每個請求按訪問ip的hash結果分配,這樣來自同乙個ip的請求固定訪問乙個後端伺服器,可以解決分布式session問題,但不是最優的解決辦法...

通過dns輪詢實現負載均衡

dns介紹 dns是網域名稱系統的英文縮寫,是一種組織成就域層次結構的計算機和網路服務命名系統,使用的是udp協議的53號埠,它用於tcp ip網路,他所提供的服務是用來將主機名和網域名稱轉換的工作。大多數網域名稱註冊商都是支援多條記錄解析的,這就是dns輪詢技術,dns伺服器將解析按照a記錄的順序...