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

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

        https://pan.baidu.com/s/1Xb6zkzebDpHhMeMWh_mhnQ&shfl=sharepset

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

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

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

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

      這個闕值觸發機制的目的是爲了防止服務器集羣失衡,因爲負載均衡模塊處理舊請求時會默認的調度之前處理它的服務器,這樣可能會造成該服務器在極端環境下會失衡。這樣我們就需要一個類似於“哨兵”的角色來監控當前服務器的性能餘量,及時調整服務器節點的負載,當餘量低於某一個值時不再接受任務或者直接停止處理任務來保護服務器。這種機制的關鍵是設置好閾值,這裏閾值主要有2類:單項參數閾值和權重閾值。單項參數閾值是針對節點的關鍵幾項參數而設置的,主要是Cpu剩餘率、內存空閒率、磁盤I/O空閒率和進程數剩餘率,一般設置爲10%,調度器將節點上報的參數與參數閾值對比,若低於預設的參數閾值,則認爲該節點已超負荷,將不再分配請求至該節點直至參數上升至閾值以上;權重閾值則是針對節點權重P(Si)而設置,權重閾值共有2個,分別是臨界負載閾值T和嚴重負載閾值H,其中T>H,用於判斷節點當前狀態。嚴重負載閾值H的目的在於判斷節點是否處於超負載狀態,是否觸發請求重新分配並清除會 話數據,設置臨界負載閾值T主要是爲了空出負載餘量T-H,防止在節點信息收集的時間間隔T突然有大量的訪問請求到來以及緩和請求重 新分配造成的會話連接抖動,T同時也作爲是否將本節點加入調度器分發序列的判斷依據,權重小於等於T的節點將不加入分發序列。這個負載餘量相當於緩衝空間,在這個空間裏節點不會發生問題但這個餘量用完就會嚴重負載。所以正如下圖流程圖所示,當檢測到當  >H&&<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,各節點依據分發權重的大小佔據相應比例的空間,分發權重越大,其概率空間也越大。

具體的看論文吧,內容細節還是比較多的。在開頭的百度盤裏面,我已經轉換爲ptf了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章