如何通過J2Cache實現分散式session儲存
做 Java Web 開發的人多數都會需要使用到 session (會話),我們使用 session 來儲存一些需要在兩個不同的請求之間共享資料。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它們會在記憶體中儲存 session 資料。這樣做會有兩個不足:
1.服務重啟後 session 資料丟失
2.應用做叢集部署的時候,不同的節點無法共享 session 資料
我們以使用比例最高的 Tomcat 為例,針對第二個問題 Tomcat 提供了叢集 session 複製的解決方案,詳情請看官方文件。看完文件你會發現 Tomcat 自帶的方法配置非常複雜,而且它沒有解決第一個問題 —— 服務重啟導致 session 資料丟失的問題。
現在還有另外一種方案就是使用 memcached 或者是 redis 來儲存 session 資料,於是就有了這麼一些開源專案:
- https://www.oschina.net/p/tomcat-redis-session-manager
- https://www.oschina.net/p/redis-manager
- https://www.oschina.net/p/memcached-session-manager
這些開源專案使用和配置都比較簡單,而且對應用完全透明,只需要在 server.xml 中配置好 Manager 即可。例如:
但是這幾個開源專案都有一個最根本的問題沒法解決,當存放在 session 中的資料量比較大,而且讀取 session 資料非常頻繁時會導致 memcached 或者是 redis 吞吐量受頻寬限制使得效能變得非常差。逼迫你必須通過 memcached 或者 redis 的擴容和叢集來解決問題,大大的增加了硬體投入的成本和運維的成本。
——–
那麼用 J2Cache 的 session-manager 模組就可以有效解決前面提到的所有問題。J2Cache 在 redis 的基礎上引入了記憶體快取的概念,可以確保服務重啟後 session 資料不會丟失,其次極大的降低了 redis 的資料吞吐量,保證在高併發情況下依然有很好的效能表現。
與前面提到的幾個開源專案不同,J2Cache 的 session manager 採用 Filter 方式實現,支援各種 Java 的 Web 容器服務。
使用方法:
1. Web 專案新增 J2Cache 的 session-manager 模組依賴:
2. 在 web.xml 中配置 Filter:
3. 啟動應用,即可開啟分散式 session 儲存。
當重啟 Web 應用時,記憶體中的 session 資料為空,會自動從 redis 中讀取重啟前儲存的 session 資料。所有節點又通過 redis 進行 session 資料的共享,當有 session 資料更新時會通過 Redis Pub/Sub 來通知其他節點重新從 Redis 中讀取資料,確保不同節點的 session 資料是一致的。
本文來自雲棲社群合作伙伴“開源中國”
本文作者:王練
相關文章
- vertica 如何實現儲存過程?儲存過程
- 通過redis實現session共享RedisSession
- 分散式系統Session 實現方式分散式Session
- python如何分散式儲存檔案?Python分散式
- Redis 分散式儲存Redis分散式
- HDFS分散式儲存分散式
- 分散式儲存概述分散式
- Filecoin分散式儲存,能否實現區塊鏈3.0時代?分散式區塊鏈
- java web 中分散式 session 的實現JavaWeb分散式Session
- Hadoop 分散式儲存分散式計算Hadoop分散式
- 分散式塊儲存系統Ursa的設計與實現分散式
- HttpServletRequestWrapper模擬實現分散式SessionHTTPServletAPP分散式Session
- NodeJS+Redis實現分散式Session方案NodeJSRedis分散式Session
- 分散式中使用 Redis 實現 Session 共享(上)分散式RedisSession
- 分散式中使用 Redis 實現 Session 共享(中)分散式RedisSession
- 分散式中使用 Redis 實現 Session 共享(下)分散式RedisSession
- DAOS 分散式非同步物件儲存|儲存模型分散式非同步物件模型
- 分散式儲存ceph 物件儲存配置zone同步分散式物件
- 分散式儲存系統可靠性如何估算?分散式
- Hive 如何方便地實現儲存過程?Hive儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- 許可權處理 - 用redis實現分散式session~ (cookie && session )Redis分散式SessionCookie
- nginx+iis+redis+Task.MainForm構建分散式架構 之 (redis儲存分散式共享的session及共享session運作流程)NginxRedisAIORM分散式架構Session
- 分散式儲存轉崗記分散式
- 分散式儲存技術概念分散式
- 分散式系統中資料儲存方案實踐分散式
- Gartner:浪潮儲存進入分散式儲存前三分散式
- 哪些企業需要分散式式儲存?分散式
- Django通過session實現多語言切換DjangoSession
- Redis如何實現分散式鎖Redis分散式
- 區塊鏈資訊儲存是如何實現安全儲存區塊鏈
- PHP實現多儲存過程呼叫PHP儲存過程
- 分散式日誌儲存架構程式碼實踐分散式架構
- 什麼是HDFS 分散式儲存分散式
- 分散式儲存高可用設計分散式
- FastDFS分散式儲存原理簡介AST分散式
- 搭建FastDFS分散式儲存環境AST分散式
- 分散式儲存glusterfs詳解【轉】分散式