web集羣session同步方法

網站在作了web集羣后,你確定會首先考慮session同步問題,由於經過負載均衡後,同一個IP訪問同一個頁面會被分配到不一樣的服務器上,若是session不一樣步的話,一個登陸用戶,一會是登陸狀態,一會又不是登陸狀態。因此本文就在網站建設中根據這種狀況給出三種不一樣的集羣方法來解決這個問題:mysql

一,利用數據庫同步sessionweb

1,用一個低端電腦建個數據庫專門存放web服務器的session,或者,把這個專門的數據庫建在文件服務器上,用戶訪問web服務器時,會去這個專門的數據庫check一下session的狀況,以達到session同步的目的。sql

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

說明:這種方法實現起來簡單,方便,也不會加大數據庫的負擔,可是若是客戶端把cookie禁掉了的話,那麼session就無從同步了,這樣會給網站帶來損失;cookie的安全性不高,雖然它已經加了密,可是仍是能夠僞造的。session

三,利用memcache同步session負載均衡

memcache能夠作分佈式,若是沒有這功能,他也不能用來作session同步。他能夠把web服務器中的內存組合起來,成爲一個」內存池」,無論是哪一個服務器產生的sessoin均可以放到這個」內存池」中,其餘的均可以使用。分佈式

優勢:以這種方式來同步session,不會加大數據庫的負擔,而且安全性比用cookie大大的提升,把session放到內存裏面,比從文件中讀取要快不少。

缺點:memcache把內存分紅不少種規格的存儲塊,有塊就有大小,這種方式也就決定了,memcache不能徹底利用內存,會產生內存碎片,若是存儲塊不足,還會產生內存溢出。

四,總結

上面三種方法都是可行的

第一種方法,最影響系統速度的那種,網站開發中不推薦使用;

第二種方法,效果不錯,不過安全隱患同樣的存在;

第三種方法,我的以爲第三種方法是最好的,網站製做中推薦你們使用

相關文章
相關標籤/搜索