負載均衡關鍵技術:session共享和會話保持

負載均衡關鍵技術:session共享和會話保持

負載均衡的session是什麼

session也叫會話,用於提供服務器端和客戶端系統間的必要交互。這是因為http協議本身是無狀態的,所以經常需要通過session來提供服務端和客戶端保持狀態的解決方案。session一般是應用服務器維持的一個服務端的存儲空間,客戶端在連接服務器時,會由服務器生成一個唯一的ID,該ID作為標識符來存取服務器端的session存儲空間。

sessionID這數據是用Cookie保存到客戶端的,用戶提交頁面時,會將這ID提交服務器端,服務器也通過URL重寫的方式傳遞sessionID的值,因此他不是完全依賴cookie,如果客戶的瀏覽器禁用cookie,也沒什麼影響,服務器可以自動通過重寫URL方式保存session的值。

session共享

負載均衡關鍵技術:session共享和會話保持


當我們把web程序做成分佈式部署到多臺服務器上,並且獨立為幾個二級域名,由於session存在實現原理上的侷限性,使得web用戶不得不經常在幾個頻道間來回輸入用戶名和密碼,用戶體驗很差。原本程序可以直接從用戶session變量中讀取參數,因為無法跨服務器同步更新session變量,所以必須實時讀取數據庫,增加數據庫負擔,於是就有了跨服務器session共享的解決方案。

(1)基於cookie的session共享

原理是將全站用戶的session信息加密,序列化後以cookie的方式存在根域名下,當瀏覽器訪問該根域名下所有二級域名站點時,將與域名相對應的所有cookie內容的特性傳遞給它,從而實現 用戶的cookie化session在多服務器間的共享訪問。

優點:無需而外的服務器,缺點:受http協議頭長度限制,只能存儲小部分用戶信息。

(2)基於數據庫的session共享

一般首選mysql數據庫,建議使用內存表Heap,提高session操作的讀寫效率。目前使用的地方不少,缺點在於session的併發讀寫能力取決數據庫性能,同時需要自己實現session過期策略,可定時從數據庫中更新和刪除session記錄,如果併發很高,容易出現鎖。

(3)基於Redis的session共享

redis作為一種緩存數據庫,提供了豐富數據類型,可以將大量數據的排序從單機內存放到redis集群中處理,並可以實現輕量級消息中間件,所以足以應付session數據存儲。

會話保持

會話保持並不是session共享,在一般稍微複雜點的web應用系統中,一個客戶與服務器經常會經過幾次交互過程才能完成一次業務訪問。由於這幾次交互過程是有關係的,服務器需要在進行交互過程中,要完成一次業務操作往往需要了解上一次交互的處理結果,或者前幾步的交互結果,這就要求所有相關交互過程由一臺服務器完成,而不能負載分散到不同服務器。

會話保持就是指在負載設備有這麼一種機制,可以識別客戶與服務器之間交互過程的關聯性,在做負載均衡的同時,保證一系列相關訪問請求被分配到同一個服務器上。


分享到:


相關文章: