解決方法
- Session Sticky
讓負(fù)載均衡器能夠根據(jù)每次的請求的會話標(biāo)識來進(jìn)行請求的轉(zhuǎn)發(fā),這樣就能保證每次都能落到同一臺服務(wù)器上面。 - Session Replication
即 session 復(fù)制,一般應(yīng)用容器都支持 Session Replication 的方式。這種方式開銷大,只適合幾臺機(jī)器的場景。 - Session數(shù)據(jù)集中存儲
是對方案 2 的優(yōu)化,Session數(shù)據(jù)不保存到本機(jī)而且存放到一個集中存儲的地方,如 redis。 - Cookie Based
所有 session 數(shù)據(jù)放在 cookie 中。
每種方式的具體原理及優(yōu)缺點,可以查看附錄1. 可以發(fā)現(xiàn), 大多數(shù)情況下,方法 3 最優(yōu)。
session基于redis共享有兩種基本的方案
基于容器自身的擴(kuò)展,比如tomcat的session-manage,以及
https://github.com/jcoleman/tomcat-redis-session-manager.基于spring-session的方案. spring-session的好處不僅僅是session共享,它還可以與容器解耦,應(yīng)用于多終端session共享,websocket,restful api等場景。
環(huán)境
- jdk 8 意味著老的 jar 包不能用
- tomcat 8.5
- spring 5
- spring boot 2
- maven 依賴管理。建立公司內(nèi)部的私服。
技術(shù)選型要有一定的前瞻性,帶來的好處大于學(xué)習(xí)成本。
參考資料
- 分布式集群Session共享 http://blog.csdn.net/jerome_s/article/details/52658946
- 單點登錄實現(xiàn)(spring session+redis完成session共享)
https://www.cnblogs.com/hujunzheng/p/6395966.html - 使用nexus3搭建私有倉庫 http://www.itdecent.cn/p/dbeae430f29d