程式設計開發分布式Session介紹

2021-12-30 03:18:55 字數 1220 閱讀 7405

當專案使用分布式時,session問題就顯得比較突出,因為有不同伺服器的緣故,如果你按照一般方式儲存session,那麼你的session會儲存在某一台伺服器上,如果下個請求並不是訪問這台伺服器,那麼會發生讀取不到session的情況。這種情況的解決方案有許多種,例如:

1、採用session sticky方式,但是這樣會對負載均衡器造成相當大的負擔,而且某太伺服器掛了,會造成session丟失。

2、採用session replication方式,但是如果伺服器數量一多,就造成了十分龐大的頻寬開銷,而且,如果很多客戶端同時訪問伺服器的話,那麼每台伺服器都需要儲存大量的session資料,而session資料時儲存在記憶體中的,這樣每台機器使用者儲存session資料占用記憶體就太多了。

3、cookie,這樣方式十分不可取,session資料放到客戶端造成安全問題,cookie本身長度也有限制,再加上有些**支援移動終端等,使得採用cookie來進行session同步的方式弊端更為凸顯。

4、session集中處理,可以儲存在資料庫中,也可以採用其他分布式儲存系統,主要採用這種方式。

使用redis儲存的實現方案有如下幾種:

第一種是使用容器擴充套件來實現,一般都是通過容器外掛程式來實現,例如基於tomcat的tomcat-redis-session-manager,基於jetty的jetty-session-manager等等。好處是對專案來說透明的,無需更改**,但是目前還不支援tomcat8.過於依賴容器,一旦更換容器或者容器公升級,那麼就得重新來過。而且**並不在專案中,對於開發者的維護也是個麻煩。

第二種是自定義會話管理的工具類,這樣的話靈活性很大,可以根據自身需求來實現,但是需要額外的開發時間。

第三種使用框架的會話管理工具,例如spring-session,shiro等,可以理解是替換了servlet那一套會話管理工具,不依賴容器,不用改動**。如果採用spring-session的話,使用的是spring-data-redis那一套連線池,前期是使用spring框架。

redis分布式session:

多例項下可以使用redis實現分布式session管理,客戶端請求,經過負載均衡分發至tomcat例項,再經過session管理實現session在redis中訪問。配置redis主從集群,主redis熱備份至redis,當主機redis宕機了,系統自動自動切換至從redis,從而保證系統快取方面高可用。

分布式session共享

為什麼會出現session共享問題?客戶端與伺服器互動時會產生唯一的sessionid用於標記使用者,但是在分布式架構中,如果還是採用 session 的方式,使用者發起請求,通過 nginx 做請求 時,並不知道是 到伺服器1還是伺服器2,所以就會出現session共享問題。今天主要記錄使用 sp...

session分布式處理

在支援session複製的web伺服器上,通過修改web伺服器的配置,可以實現將session同步到其他web伺服器上,達到每個web伺服器上都儲存一致的session。1.優點 上不需要做支援和修改。2.缺點 需要依賴支援的web伺服器,一旦更換成不支援的web伺服器就不能使用了,在資料量很大的情...

分布式session共享

什麼是session 伺服器為每個使用者建立乙個會話,儲存使用者的相關資訊,以便多次請求能夠定位到同乙個上下文。當使用者請求來自應用程式的 web 頁時,如果該使用者還沒有會話,則 web 伺服器將自動建立乙個 session 物件。當會話過期或被放棄後,伺服器將終止該會話並銷毀。分布式sessio...