在分布式環境中,瀏覽器端傳送的請求經負載均衡後分配到不同的伺服器,因此存在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...