雲平台下負載均衡集群中會話保持的研究

2021-09-28 18:48:35 字數 2602 閱讀 1129

閱讀材料來自: [1]郭建金. 雲平台下負載均衡集群中會話保持的研究與實現[d].電子科技大學,2018.

這篇**主要研究了如何在雲平台負載均衡集群中保持會話。如我們所知,現如今大多數**都採用部署在伺服器集群中,為了應對隨時可能會產生的大量互動請求,採用負載均衡來排程請求,從而實現每個服務節點高效快速的處理請求,這個技術方案固然是好的,但在部署中仍然會遇到一些難點。例如像電商這類需要在使用者使用過程中一直保持會話的**,如果採用負載均衡在一些時候可能會造成會話資訊的丟失,嚴重影響使用者體驗。這篇文章的重點就是提出了一種會話共享模型,並設計了其實現方案。我i這篇部落格主要內容是這篇**中的內容加自己的理解。

這個會話共享模型,主要分為三個部分:負載均衡模組、會話管理模組和會話儲存模組。負載均衡模組的最主要職責是對請求內容進行分類、根據節點負載指標計算節點權重、依據權重進行請求排程;會話管理模組負責會話資料的建立、管理和維護,其中會話資料會在本地和會話儲存集群各存乙份;會話儲存模組的主要職責就是備份採用粘性會話技術儲存在本地記憶體中的會話資料,提高會話資料的可靠性,該模組使用redis資料庫作為會話儲存方式,並配置相應的持久化機制,同時為便於以後擴容和保證訪問可靠性,採用codis分布式方案作為redis集群部署方案。

其實他這個會話共享模型的主要思路類似於快取技術,將會話資料儲存在本地記憶體和會話儲存集群中,儲存在本地記憶體中是為了保證訪問的速度,儲存在會話儲存集群中是為了保證資料的可循性,如果出現資料丟失的情況仍能夠從會話儲存集群中得到資料。當負載均衡模組處理新的請求時,會優先選擇效能更高的節點(效能高的節點被選中的概率大些)來處理該請求,同時會話產生的資料會由會話管理模組儲存在本地記憶體同時非同步儲存在會話儲存集群中;如果負載均衡模組處理的請求是舊請求的話,會使用會話粘性技術得到之前處理該請求的服務節點,並更具其效能餘量來判斷其能否繼續處理該請求,如果無法繼續處理,則反饋給負載均衡模組,負載均衡模組會為該請求選擇新的服務節點,並且新的服務節點會從會話儲存集群中獲取該請求的會話資料。主要就是以上的流程,當前其中仍然摻雜著一些技術細節,比如為避免後端節點過載,設計了一種閾值觸發機制,該機制採用雙閾值細化節點狀態的判斷;又如在選擇節點時採用基於分發權重的隨機**機制,其根據隨機數所處的位置確定**的目標節點,避免了兩次分發間的關聯,使任務分配更加平衡。

接下來解釋一下這個闕值觸發機制和基於分發權重的隨機**機制。

這個闕值觸發機制的目的是為了防止伺服器集群失衡,因為負載均衡模組處理舊請求時會預設的排程之前處理它的伺服器,這樣可能會造成該伺服器在極端環境下會失衡。這樣我們就需要乙個類似於「哨兵」的角色來監控當前伺服器的效能餘量,及時調整伺服器節點的負載,當餘量低於某乙個值時不再接受任務或者直接停止處理任務來保護伺服器。這種機制的關鍵是設定好閾值,這裡閾值主要有2類:單項引數閾值和權重閾值。單項引數閾值是針對節點的關鍵幾項引數而設定的,主要是cpu剩餘率、記憶體空閒率、磁碟i/o空閒率和程序數剩餘率,一般設定為10%,排程器將節點上報的引數與引數閾值對比,若低於預設的引數閾值,則認為該節點已超負荷,將不再分配請求至該節點直至引數上公升至閾值以上;權重閾值則是針對節點權重p(si)而設定,權重閾值共有2個,分別是臨界負載閾值t和嚴重負載閾值h,其中t>h,用於判斷節點當前狀態。嚴重負載閾值h的目的在於判斷節點是否處於超負載狀態,是否觸發請求重新分配並清除會 話資料,設定臨界負載閾值t主要是為了空出負載餘量t-h,防止在節點資訊收集的時間間隔t突然有大量的訪問請求到來以及緩和請求重 新分配造成的會話連線抖動,t同時也作為是否將本節點加入排程器分發序列的判斷依據,權重小於等於t的節點將不加入分發序列。這個負載餘量相當於緩衝空間,在這個空間裡節點不會發生問題但這個餘量用完就會嚴重負載。所以正如下圖流程圖所示,當檢測到當  >h&&

模組採用的節點擊擇方式有兩種:會話資訊表**和負載**。其中會話資訊表**屬於粘性會話技術,只對處理過的且會話資訊表中有記錄的請求起效,按照會話資訊表中的記錄**,其特點是效率高,時延短,但容易負載失衡;負載**則針對新請求及需要重新分配的舊請求,按照負載計算的分發權重**,其特點是能較好的保證集群的負載均衡,但效率相對低一些。

負載**機制首先要計算節點的分發權重w(si),了解節點的負載情況。之前我們已經得到了權重p(si),且將權重小於等於t的節點全部 剔除出分發佇列,權重越大,表示節點的負載餘量越大,相應的分發權重也越大,即分發權重w(si)與權重p(si)是正相關的,但由於p(si)的總和可能不為1,不能直接使用權重p(si)作為分發權重,為此,通過以下計算公式3-4將分發權重w(si)與權重p(si)關聯起來:

在得出所有節點的分發權重w(si)後,排程器根據每個後端節點的分發權重w(si)為其分配相適應的任務負載。傳統的任務分配方法是將節點的分發權重排序後取權重最大的作為任務分配節點,這種方法雖然簡單易用,但是會帶來一定的問題。之前介紹過節點負載資訊的 獲取是週期性的,在單個週期t內,節點的負載資訊是上一次獲取的,不是當前負載資訊,而分發權重w(si)是依據負載資訊得出的,這意味著在時間t內,分發權重w(si)是固定不變的,導致這段時間內的任務會集中到相同的服務節點上。為了避免這種兩次分配之間關聯 的影響,我們採用一種基於分發權重的隨機**機制。首先,由分發權重公式可知所有節點的分發權重之和為1,這樣可以定義集群的整個概率空間為1,各節點依據分發權重的大小佔據相應比例的空間,分發權重越大,其概率空間也越大。

nginx tomcat 負載均衡 會話保持

nginx tomcat框架 安裝準備 檢查安裝工具 gcc version a utomake version autoconf version libtool version make version g version yum install gcc c zlib find usr name ...

nginx負載均衡保持session會話一致

負載均衡時,為了保證同一使用者session會被分配到同一臺伺服器上,可以使用以下方法 1.使用cookie 將使用者的session存入cookie裡,當使用者分配到不同的伺服器時,先判斷伺服器是否存在該使用者的session,如果沒有就先把cookie裡面的sessoin存入該伺服器,實現ses...

Nginx負載均衡session會話保持方法

負載均衡時,為了保證同一使用者session會被分配到同一臺伺服器上,可以使用以下方法 1.使用cookie 將使用者的session存入cookie裡,當使用者分配到不同的伺服器時,先判斷伺服器是否存在該使用者的session,如果沒有就先把cookie裡面的sessoin存入該伺服器,實現ses...