併發session共享問題

2021-08-19 01:36:21 字數 2306 閱讀 9378

讓負載均衡器能夠根據每次的請求的會話標識來進行請求的**,這樣就能保證每次都能落到同一臺伺服器上面,這種方式稱為session sticky方式。如下圖:

存在問題:

1. 如果這一台web伺服器宕機或者重啟了,伺服器上的會話資料會丟失,使用者需要重新登陸等。

2. 會話標識是應用層的資訊,那麼負載均衡器要將同乙個會話的請求都儲存到同乙個web伺服器上的話,就需要進行應用層的解析,這個開銷比第四層交換(lvs負載均衡器屬於第四層)要大。

3. 負載均衡器變為乙個有狀態的節點,要將會話儲存到具體的web伺服器的對映。和無狀態的節點相比,記憶體消耗會更大,容災方面會更麻煩。

打個比方,比如web伺服器是飯店,會話資料是碗筷。要保證每次吃飯都用自己的碗筷的話,我就把餐具存在某一家飯店,並且每次都去這家店吃飯。

還是以吃飯的例子,如果我們在每個飯店都存放一套自己的碗筷,就可以自己的選擇去哪家吃飯了。這就是session replication。如下圖:

此方案不用再要求負載均衡器保證同乙個會話的多次請求必須到同乙個web伺服器上了。我們在web伺服器之間增加了會話資料的同步,通過同步就保證了不同web伺服器之間session資料的一致。一般應用容器都支援session replication方式,與session sticky方案相比,session replication方式對負載均衡器沒有那麼多的要求。

存在問題:

1. 同步session資料造成了網路頻寬的開銷。只要session資料有變化,就需要將資料同步到所有其他機器上,機器越多,同步帶來的網路頻寬開銷就越大。

2. 每台web伺服器都要儲存所有session資料,如果整個集群的session資料很多(很多人同時訪問**)的話,每台機器用於儲存session資料的內容占用會很嚴重。

這個方案是靠應用容器來完成session的複製從而解決session的問題的,應用本身並不關心這個事情。

這個方案不適合集群機器數多的場景。如果只有幾台機器,用這個方案是可以的。

將session資料集中儲存,然後不同web伺服器從同樣的地方獲取session,如下圖:

session資料不儲存到本機而且存放到乙個集中儲存的地方,修改session也是發生在集中儲存的地方。web伺服器使用session從集中儲存的地方讀取。這樣保證了不同web伺服器讀取到的session資料都是一樣的。儲存session的具體方式可以是資料庫、分布式儲存系統等。這個方案解決了session replication方案中記憶體的問題,對於網路頻寬也比session replication要好。

存在問題:

2. 如果集中儲存session的機器或者集群有問題,就會影響到我們的應用。

相對於session replication,當web伺服器數量比較大、session數比較多的時候,這個集中儲存方案的優勢是非常明顯的。

這個方案對於同乙個會話的不同請求也是不限制具體處理機器的。它是通過cookie來傳遞session資料的,如下圖:

從上圖可以看出,我們的session資料放到cookie中,然後在web伺服器上從cookie中生成對應的session資料。這就好比我們每次都把自己的碗筷帶在身上,這樣去那家飯店就可以隨意選擇了。相對前面的集中儲存方案,不會依賴外部的儲存系統,也就不存在從外部系統獲取、寫入session資料的網路時延、不穩定性了。

存在問題:

1. cookie長度的限制。我們知道cookie是有長度限制的,而這也會限制session資料的長度。

2. 安全性。session資料本來都是服務端資料,而這個方案是讓這些服務端資料到了外部網路及客戶端,因此存在安全性上的問題。我們可以對寫入的cookie的session資料做加密,不過對於安全來說,物理上不能接觸才是安全的。

3. 頻寬消耗。指的是我們資料中心的整體外部頻寬的消耗。

4. 效能影響。每次http請求和響應都帶有session資料,對web伺服器來說,在同樣的處理情況下,響應的結果輸出越少,支援的併發請求就越多。生成session資料也會影響處理速度。

這4個方案都是可用的方案,但是對於大型**來說,session stick和session資料集中儲存是比較好的方案,這兩個方案各有優劣,需要在具體的場景中做出選擇和權衡。

session共享問題

http協議是無狀態的 第一次訪問會生成jsessionid儲存在tomcat的concurrentmap裡伺服器,把jsessionid寫到客戶端的cookie裡面。關於cookie和session的聯絡 cookie中會包含哪些資訊 名字 值 過期時間 路徑 域 cookie會帶到http請求偷...

session共享問題

1,spring session使用的場景?httpsession是通過servlet容器進行建立和管理的,在單機環境中。通過http請求建立的session資訊是儲存在web伺服器記憶體中,如tomcat jetty。假如當使用者通過瀏覽器訪問應用伺服器,session資訊中儲存了使用者的登入資訊...

session共享問題以及解決

1.通過組播的方式進行集群間的共享,優點 web容器自身支援,配置簡單,適合小型 缺點 當一台機器的上的session變更後會將變更的資料以組播的形式分發給集群間的所有節點,對網路和所有的web容器都是存在開銷。集群越大浪費越嚴重。不能做到線性的擴充套件。2.利用共享儲存來共享session資料 所...