分布式Session解決方案

2021-10-03 05:45:47 字數 2540 閱讀 4005

在分布式環境中,瀏覽器端傳送的請求經負載均衡後分配到不同的伺服器,因此存在session無法共享的問題。

解決方案有如下幾種

即將資訊儲存在cookie中。

由於cookie是儲存在客戶端瀏覽器中的,存在一些安全隱患,而且cookie的儲存大小和型別存在限制,只能儲存少量資料。

session複製是小型企業使用比較多的一種伺服器集群session管理機制。它的原理是,乙個伺服器上的session發生變化,則廣播到區域網內其他伺服器上進行同步,這樣所有的伺服器上的session都是同步的,任何一台伺服器宕機的時候,都可以從其他伺服器上獲取到session,不會影響業務功能。

缺點:會對網路負荷造成一定壓力。當session量比較大時,可能會造成網路阻塞,拖慢伺服器效能。

配置:tomcat內部已經支援分布式框架開發管理機制,修改tomcat安裝目錄下config目錄下的配置檔案server.xml,支援集群部署。同時在應用中修改web.xml檔案,開啟session複製。

nginx是一款高效能的http伺服器和反向**伺服器,它可以做正向**、負載均衡、http伺服器和反向**。nginx預設使用輪訓機制,將客戶端請求負載均衡地分配到不同的伺服器,因此來自同乙個客戶端的不同請求可能會被分配到不同的伺服器,這樣就無法獲取到之前儲存的session。

除了輪訓機制,nginx還有ip_hash機制進行負載均衡,即根據ip進行分配,將客戶端和伺服器進行繫結,來自同乙個客戶端的請求會被指定分配到固定的伺服器上。

缺點:缺乏容錯性,如果當前訪問的伺服器出現故障,請求被轉移到其他伺服器,則之前的session都將失效。

配置:在nginx的配置檔案中,在upstream模組指定使用ip_hash模式。

在分布式專案,大多都會使用redis做快取,而且redis還可以集群部署,天然支援資料共享。因此將session儲存到redis中無縫接入,不存在任何安全隱患,是目前企業中使用最多的一種方式。spring為我們封裝了spring-session框架,直接引入依賴即可。

基於redis儲存session方案流程示意圖

pom依賴

<dependency

>

<groupid

>

org.springframework.boot

groupid

>

<artifactid

>

spring-session-data-redis

artifactid

>

dependency

>

<dependency

>

<groupid

>

org.springframework.boot

groupid

>

<artifactid

>

spring-boot-data-starter-redis

artifactid

>

dependency

>

redis配置

#redis資料庫索引(

預設是0)

spring.redis.database=0

spring.redis.host=127.0.0.1

spring.redis.port=6379

#預設密碼為空

spring.redis.password=

#連線池最大連線數

(負數表示沒有限制

)spring.redis.jedis.pool.max-active=1000

#連線池最大阻塞等待時間

(負數表示沒有限制

)spring.redis.jedis.pool.max-wait=-1ms

#連線池中的最大空閒連線

spring.redis.jedis.pool.max-idle=10

#連線池中的最小空閒連線

spring.redis.jedis.pool.min-idle=2

#連線超時時間(毫秒

)spring.redis.timeout=500ms

將伺服器端的session持久化到資料庫中,這樣所有的伺服器都可以去資料庫中獲取session。但是如果伺服器訪問量很大,會對資料庫造成很大的壓力。其次每次訪問資料庫效率也不高。

解決方案 分布式session

多個伺服器之間同步session,使每台伺服器上都儲存所有的session資訊。優點 缺點 通過在負載均衡器上進行配置,根據session的一些特有標誌,如ip位址,sessionid等,分配後端應用伺服器,氣候該使用者的所有請求都會 到第一次分配到的伺服器上。優點 缺點 客戶端利用cookie記錄...

分布式系統session同步解決方案

session的概念 當瀏覽器端第一次訪問web server時,server端會呼叫getsession 方法建立session物件,經過特殊演算法計算出sessionid,儲存在伺服器端,同時response給瀏覽器 第二次在來請求時會在request header中帶著sessionid訪問伺...

分布式事務解決方案

一 結合mq訊息中介軟體實現的可靠訊息最終一致性 二 tcc補償性事務解決 三 最大努力通知型方案 第一種方案 可靠訊息最終一致性,需要業務系統結合mq訊息中介軟體實現,在實現過程中需要保證訊息的成功傳送及成功消費。即需要通過業務系統控制mq的訊息狀態 第二種方案 tcc補償性,分為三個階段tryi...