### 分布式session實現方案
* **Session復制**
在支持Session復制的Web服務器上,通過修改Web服務器的配置,可以實現將Session同步到其它Web服務器上,達到每個Web服務器上都保存一致的Session。
優點:代碼上不需要做支持和修改。
缺點:需要依賴支持的Web服務器,一旦更換成不支持的Web服務器就不能使用了,在數據量很大的情況下不僅占用網絡資源,而且會導致延遲。
適用場景:只適用于Web服務器比較少且Session數據量少的情況。
可用方案:開源方案tomcat-redis-session-manager,暫不支持Tomcat8
* **Session粘滯**
將用戶的每次請求都通過某種方法強制分發到某一個Web服務器上,只要這個Web服務器上存儲了對應Session數據,就可以實現會話跟蹤。
優點:使用簡單,沒有額外開銷。
缺點:一旦某個Web服務器重啟或宕機,相對應的Session數據將會丟失,而且需要依賴負載均衡機制。
適用場景:對穩定性要求不是很高的業務情景
* **Session集中管理**
在單獨的服務器或服務器集群上使用緩存技術,如Redis存儲Session數據,集中管理所有的Session,所有的Web服務器都從這個存儲介質中存取對應的Session,實現Session共享。
優點:可靠性高,減少Web服務器的資源開銷。
缺點:實現上有些復雜,配置較多。
適用場景:Web服務器較多、要求高可用性的情況。
可用方案:開源方案Spring Session,也可以自己實現,主要是重寫HttpServletRequestWrapper中的getSession方法
* **基于Cookie管理**
這種方式每次發起請求的時候都需要將Session數據放到Cookie中傳遞給服務端。
優點:不需要依賴額外外部存儲,不需要額外配置。
缺點:不安全,易被盜取或篡改;Cookie數量和長度有限制,需要消耗更多網絡帶寬。
適用場景:數據不重要、不敏感且數據量小的情況
【_**這四種方式,相對來說,Session集中管理更加可靠,使用也是最多的】**_
### Session集中管理方案應該具備的特點
A、中間存儲介質的讀寫速度要快。之前的Session管理方案將Session對象存放在服務器內存中,有著很高的讀寫速度,進行Session集中管理后將會在Session讀寫中引入網絡傳輸,速度會有所降低,所以必須保證中間存儲介質的讀寫速度。
B、中間存儲介質要保證高可用。進行Session集中管理后,整個企業應用的Session都會存放在中間存儲介質中,如果存儲介質是不穩定的,那整個企業應用都將不穩定。
C、對Session的使用者來說,Session管理方案應該是透明的,切換成集中管理方案后用戶無感知。
D、Session管理方案不該和某一Web服務器耦合,應該適用于所有常規Web服務器。
根據上述標準可以看出,Session集中管理方案的技術選型應該從Session存儲介質和管理方案實現兩方面考慮。
### 管理方案實現
目前常用的Session集中管理方案有兩種,一種是Memcache-Tomcat-Session,另一種是Spring Session。
Memcache-Tomcat-Session是一個基于Memcache和Tomcat實現Session集中管理的開源方案。通過擴展Tomcat的SessionManager,并且在配置文件中替換Tomcat默認的SessionManager來實現Session管理。雖然實現起來比較簡單,但是與Tomcat耦合,不適用于其他Web服務器。
Spring Session是Spring提供的一套Session管理方案,通過一個SessionFilter將所有請求進行攔截,然后使用Request包裝類來接管Session管理。Spring Session不與Web服務器耦合,能夠適用于常規的服務器。同時還提供了統一瀏覽器多Session等功能。
Spring Session雖然優點頗多,但是實現Session管理功能的代碼量也比較大,還需要配合Spring-data-redis使用,學習成本比較大,遇到問題不好維護

_**參考資料**_
[https://www.jianshu.com/p/3dd4e06bdfa4](https://www.jianshu.com/p/3dd4e06bdfa4)
- 概述
- 網絡時延
- 進程間通信
- URI
- URL
- URN
- NAT
- 操作系統基礎
- 內核
- 用戶空間
- 網絡協議模型
- 四層網絡協議模型
- 鏈路層
- 以太網協議
- ARP協議
- RARP協議
- MAC地址
- 網絡層
- IP協議
- ICMP協議
- 子網掩碼
- 傳輸層
- TCP協議
- TCP慢啟動
- TCP性能
- UDP協議
- SCTP協議
- 應用層
- DNS
- TCP/IP協議族
- Socket
- Socket通信模型
- socket和TCP/IP協議族
- Socket三次握手四次揮手
- OSI七層模型
- 物理層
- 數據鏈路層
- 網絡層
- 傳輸層
- 應用層
- HTTP
- 基礎
- HTTP/1.0
- HTTP/1.1
- http2.0
- HTTP報文
- WEB瀏覽器工作機制
- HTTP事務時延
- HTTP與HTTPS區別
- 持久連接
- 用戶驗證
- web結構組件
- 代理
- 正向代理
- 反向代理
- 緩存
- 網關
- 隧道-tunnel
- Agent代理
- http協議補充
- Servlet3異步請求
- ajax
- Comet
- WebSocket
- SPDY協議
- HTTP/2
- QUIC
- WebDAV
- http方法
- http連接
- 短連接&長連接
- 管線化
- 網絡會話
- cookie
- session
- token
- jwt
- cookie與session的區別
- Spring Session
- 分布式session實現方案
- 同源策略
- 跨域
- CORS
- HTTP三大安全問題
- JWT vs OAuth
- HTTPS
- SSL&TLS
- OpenSSL
- HTTPS和TLS/SSL的關系
- X509標準和PKI
- IO模型
- IO
- I/O模型
- 傳統阻塞式I/O
- 非阻塞式I/O
- IO復用
- Connection Per Thread模式
- IO多路復用模型流程
- Reactor模式
- 單Reactor單線程
- 單Reactor多線程
- 主從Reactor多線程
- Proactor模型
- Selector模型
- 信號驅動I/O
- 異步I/O
- select/poll/epoll
- select
- poll
- epoll
- select/poll/epoll適用場景
- 零拷貝原理
- 讀取文件發送網絡內存拷貝
- 零拷貝
- Netty零拷貝
- 密碼學
- 密碼學Hash算法分類
- 加密算法
- 對稱加密
- 非對稱加密
- 數字簽名
- RSA數字簽名算法
- DSA數字簽名算法
- 數字證書
- MAC算法
- web安全
- CSRF攻擊
- XSS
- cookie劫持
- SQL注入
- DDos攻擊
- 常見面試題
- 瀏覽器工作機制和原理
- XSS如何預防
- 如何防止cookie被劫持
- 附錄
- HTTP狀態碼
- 常用的網絡端口