Apache shiro叢集實現 (八) web叢集時session同步的3種方法
在做了web集群后,你肯定會首先考慮session同步問題,因為通過負載均衡後,同一個IP訪問同一個頁面會被分配到不同的伺服器上, 如果session不同步的話,一個登入使用者,一會是登入狀態,一會又不是登入狀態。所以本文就根據這種情況給出三種不同的方法來解決這個問題:
一,利用資料庫同步session
在做多伺服器session同步時我沒有用這種方法,如果非要用這種方法的話,我想過二種方法:
1,用一個低端電腦建個數據庫專門存放web伺服器的session,或者,把這個專門的資料庫建在檔案伺服器上,使用者訪問web伺服器時,會去這個專門的資料庫check一下session的情況,以達到session同步的目的。
2,這種方法是把存放session的表和其他資料庫表放在一起,如果mysql也做了叢集了話,每個mysql節點都要有這張表,並且這張session表的資料表要實時同步。
說明:用資料庫來同步session,會加大資料庫的負擔,資料庫本來就是容易產生瓶頸的地方,如果把session還放到資料庫裡面,無疑是雪上加霜。上面的二種方法,第一點方法較好,把放session的表獨立開來,減輕了真正資料庫的負擔
二,利用cookie同步session
session是檔案的形勢存放在伺服器端的,cookie是檔案的形勢存在客戶端的, 怎麼實現同步呢?方法很簡單,就是把使用者訪問頁面產生的session放到cookie裡面,就是以cookie為中轉站。你訪問web伺服器A,產生了 session把它放到cookie裡面了,你訪問被分配到web伺服器B,這個時候,web伺服器B先判斷伺服器有沒有這個session,如果沒有, 在去看看客戶端的cookie裡面有沒有這個session,如果也沒有,說明session真的不存,如果cookie裡面有,就把cookie裡面的 sessoin同步到web伺服器B,這樣就可以實現session的同步了。
說明:這種方法實現起來簡單,方便,也不會加大資料庫的負擔,但是如果客戶端把cookie禁掉了的話,那麼session就無從同步了,這樣會給網站帶來損失;cookie的安全性不高,雖然它已經加了密,但是還是可以偽造的。
三,利用Nosql資料庫redis或者memcache同步session
redis或memcache可以做分散式,如果沒有這功能,他也不能用來做session同步。他可以把web伺服器中的記憶體組合起來,成為一個"記憶體池",不管是哪個伺服器產生的sessoin都可以放到這個"記憶體池"中,其他的都可以使用。
優點:以這種方式來同步session,不會加大資料庫的負擔,並且安全性比用cookie大大的提高,把session放到記憶體裡面,比從檔案中讀取要快很多。
缺點:redis或memcache把記憶體分成很多種規格的儲存塊,有塊就有大小,這種方式也就決定了,memcache不能完全利用記憶體,會產生記憶體碎片,如果儲存塊不足,還會產生記憶體溢位。
四,總結
上面三種方法都是可行的
第一種方法,最影響系統速度的那種,不推薦使用;
第二種方法,效果不錯,不過安全隱患一樣的存在;
第三種方法,個人覺得第三種方法是最好的,推薦大家使用,也印證了我的文章
相關推薦
Apache shiro叢集實現 (八) web叢集時session同步的3種方法
在做了web集群后,你肯定會首先考慮session同步問題,因為通過負載均衡後,同一個IP訪問同一個頁面會被分配到不同的伺服器上, 如果session不同步的話,一個登入使用者,一會是登入狀態,一會又不是登入狀態。所以本文就根據這種情況給出三種不同的方法來解決這個問題: 一,利用資料庫同步sessio
redis叢集實現(八)redis+twemproxy叢集
redis的確是一個非常高效的快取伺服器,但是單臺redis伺服器的記憶體管理能力有限,如果一味的加大記憶體的話會導致redis伺服器的效能下降,所以就必須要搭建redis叢集來提供服務。在redis官方在3.0.0版本給出叢集方案之前,大部分的企業都使用twemproxy
Apache shiro叢集實現 (三)shiro身份認證(Shiro Authentication)
<span style="font-size:18px;">package com.api6.shiro.demo1; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; impo
Apache shiro叢集實現 (六)分散式集群系統下的高可用session解決方案---Session共享
Apache Shiro的基本配置和構成這裡就不詳細說明了,其官網有說明文件,這裡僅僅說明叢集的解決方案,詳細配置:shiro web config Apache Shiro叢集要解決2個問題,一個是session的共享問題,一個是授權
apache shiro叢集實現(一) session共享
Apache Shiro的基本配置和構成這裡就不詳細說明了,其官網有說明文件,這裡僅僅說明叢集的解決方案,詳細配置:shiro web config Apache Shiro叢集要解決2個問題,一個是session的共享問題,一個是授權資訊的cache共享問
Apache shiro叢集實現 (一) shiro入門介紹
近期在ITOO專案中研究使用Apache shiro叢集中要解決的兩個問題,一個是Session的共享問題,一個是授權資訊的cache共享問題,官網上給的例子是Ehcache的實現,在配置
linux伺服器(centos7)Apache+Tomcat 安裝配置以及叢集實現(上)
解壓apr-1.5.2命令 [[email protected] ~]# tar zxvf apr-1.5.2.tar.gz 切換解壓目錄 [[email protected] ~]# cd apr-1.5.2 指令碼編譯配置指定安裝目錄 [[email protected] a
Apache Shiro 使用手冊(一)Shiro架構介紹
springmvc+mybatis dubbo+zookeeper restful redis分布式緩存 shiro kafka 一、什麽是Shiro Apache Shiro是一個強大易用的Java安全框架,提供了認證、授權、加密和會話管理等功能: 認證 - 用戶身份識別,常被稱為用戶“
Redis 設計與實現 (八)--排序、慢查詢日誌、監視器
監視 strong add 2.4 bsp log 格式 sadd 請求 一、排序 SORT <key> 對一個數字值的key進行排序 1、alpha 對字符串類型的鍵進行排序 2、asc / desc redis 默認升序排序asc
【轉】Verilog學習筆記簡單功能實現(八)...............異步FIFO
另一個 gif 多個 可靠 基本原理 drs bar next 不同 基本原理: 1.讀寫指針的工作原理 寫指針:總是指向下一個將要被寫入的單元,復位時,指向第1個單元(編號為0)。 讀指針:總是指向當前要被讀出的數據,復位時,指向第1個單元(編號為0)
SpringBoot使用WebSocket實現服務端推送--叢集實現(2)
書接上文,本文介紹了一種實現叢集管理和訊息傳送方式。 在叢集模式情況下,一般是Nginx反向代理到多臺Tomcat或者SLB代理到多臺Tomcat的方式,怎麼實現給某個人推送訊息?比如WebSocket1連線到Tomcat1,但是在Tomcat2需要給WebSocket1傳送訊息,怎麼辦?一
Apache Shiro 許可權控制(2)
Shiro的 /WEB-INF目錄下的shiro.ini 配置檔案url匹配方式: ① ? 可以匹配一個字元 /admin? ---->可以匹配到/admin1 /admin12匹配不到 ② *
Apache Shiro 許可權認證(1)
Shiro的許可權認證 : 程式設計式授權 :  
TCP/IP實現(八) 插口層
一.概述 插口層可以說是在使用者程式與TCP/IP協議之間的一個呈上啟下的層次,它將使用者與某協議相關的請求對映到具體的協議實現。不同型別的套接字在產生時就會關聯到相關協議實現(通過一組函式指標來實現的)。比如在一個TCP套接字上
ORB-SLAM2從理論到程式碼實現(八):Tracking.cc程式詳解(下)
本人郵箱[email protected],歡迎交流! 接著講tracking.cc。 bool Tracking::NeedNewKeyFrame() 函式功能 判斷是否需要生成新的關鍵幀,確定關鍵幀的標準 步驟 1. 在上一次進行重
redis叢集實現(三)叢集刪除節點
redis叢集裡的節點支援動態刪除,但是一般情況下不會這麼做,只有在節點軟硬體升級的時候才會主動讓節點下線。刪除節點的方式就是redis-cli客戶端連線到伺服器,然後執行cluster forget node-id就可以了,如果是刪除一個從節點的話,叢集仍然是可用狀態,如
redis叢集實現(四) 資料的和槽位的分配
不知道有沒有人思考過redis是如何把資料分配到叢集中的每一個節點的,可能有人會說,把叢集中的每一個節點編號,先放第一個節點,放滿了就放第二個節點,以此類推。。如果真的是這樣的話,伺服器的利用率和效能
(八)Redis叢集常用命令、叢集節點新增刪除
一、cluster info :列印叢集資訊 二、cluster nodes:列出叢集中已知的所有節點(node),以及這些節點相關 資訊 可以看到上面有六個節點,三個主節點(master),三個備份節點(slave),其中有一個埠為7001的主節點前有mysel
redis叢集實現(二)叢集新增節點
在redis-3.0.0裡,叢集新增節點是通過客戶端執行cluster meet命令來實現的,命令格式是cluster meet <ip> <port>,如果客戶端向A節點發送這條命令,ip和port分別是B節點的ip和port,就會把ip:port
微信小程式 蒐藏功能實現(八)
搜尋功能用到了小程式的快取功能:wx.setStorage 如果沒有向用戶提供removeStorageSync或clearStorageSync,小程式的快取永久存在,沒有失效期,快取的最大不超過10MB 四類操作,八種方法: setStorage,getStorage