分散式Session共享解決方案.直的一看
阿新 • • 發佈:2018-12-17
Author:SimpleWu
分散式Session一致性?
說白了就是伺服器叢集Session共享的問題
Session的作用?
Session 是客戶端與伺服器通訊會話跟蹤技術,伺服器與客戶端保持整個通訊的會話基本資訊。
客戶端在第一次訪問服務端的時候,服務端會響應一個sessionId並且將它存入到本地cookie中,在之後的訪問會將cookie中的sessionId放入到請求頭中去訪問伺服器,如果通過這個sessionid沒有找到對應的資料那麼伺服器會建立一個新的sessionid並且響應給客戶端。
分散式Session存在的問題?
假設第一次訪問服務A生成一個sessionid並且存入cookie中,第二次卻訪問服務B客戶端會在cookie中讀取sessionid加入到請求頭中,如果在服務B通過sessionid沒有找到對應的資料那麼它建立一個新的並且將sessionid返回給客戶端,這樣並不能共享我們的Session無法達到我們想要的目的。
解決方案:
使用cookie來完成(很明顯這種不安全的操作並不可靠)
使用Nginx中的ip繫結策略,同一個ip只能在指定的同一個機器訪問(不支援負載均衡)
利用資料庫同步session(效率不高)
使用tomcat內建的session同步(同步可能會產生延遲)
使用token代替session
我們使用spring-session以及整合好的解決方案,存放在redis中
目前專案中存在的問題
啟動兩個專案埠號分別為8080,8081。
依賴: