Memcached存Session數據、訪問安全性、使用場景總結(3)


最近做了一個單點登錄SSO,登陸后的憑證放到Memcached令牌放到Cookies;但是用戶經常掉線,開發環境和測試卻沒有這個問題,最后從Memcached找到原因。

Memcached概念、作用、運行原理、特性、不足簡單梳理(1)

Memcached下載安裝、NET對Memcached進行CRUD操作(2)

Memcached存Session數據、訪問安全性、使用場景總結(3)

一、Session數據放入到Memcached?

Memcached創建者Dormando寫過兩篇文章:

Sessions in Memcached

Cache your sessions. Don't piss off your users

第一篇文章中指出:如果用memcached存儲Session,那么當memcached集群發生故障(比如內存溢出)或者維護(比如升級、增加或減少服務器)時,用戶會無法登錄,或者被踢掉線。

第二篇文章中指出:Memcached的回收機制可能會導致用戶無緣無故地掉線。

對於Dormando的那兩篇文章,他認為第一篇文章給出的原因很容易理解,而人們經常會對第二篇文章給出的原因認識不足。因此他對這個原因進行了詳細地闡述:

Memcached for Dummies

Memcached使用“最近最少使用(LRU)”算法回收緩存。但memcached的LRU算法針對每個slab類執行,而不是針對整體。這意味着,如果所有Session的大小大致相同,那么它們會分成兩三個slab類。所有其它大小大致相同的數據也會放入同一些slab,與Session爭用存儲空間。一旦slab滿了,即使更大的slab中還有空間,數據也會被回收, 而不是放入更大的slab中……在特定的slab中,Session最老的用戶將會掉線。用戶將會開始隨機掉線,而最糟糕的是,你很可能甚至都不會注意到它,直至用戶開始抱怨……

可以看來Memcached是一個設計用於緩存數據而不是存儲數據的系統,因此不應該用於存儲Session。

建議開發人員不要用memcached存儲Session。

 

二、什么樣的數據適合放Memcached

不適合的情況:

1.如果是一個小網站,pv值不大,不考慮Memcached

2.變化頻繁, 一變化就要入庫(股票,金融),不考慮Memcached

3.過大的數據不能放入到Memcached

4.緩存對象的大小大於1MB 

5.key的長度大於250字符

 

適合的情況:

1.變化頻繁,查詢頻繁,但是不一定寫入數據庫(比如用戶在線狀態、在線人數..適合Memcached)

2.變化不頻繁,查詢頻繁,不管入不入庫,都比較適合Memcached。

 

三、Memcached訪問安全性

Memcache服務器端都是直接通過客戶端連接后直接操作,沒有任何的驗證過程,這樣如果服務器是直接暴露在互聯網上的話是比較危險,輕則數據泄露被其他無關人員查看,重則服務器被入侵,因為Mecache是以root權限運 行的,況且里面可能存在一些我們未知的bug或者是緩沖區溢出的情況,這些都是我們未知的,所以危險性是可以預見的。

內網訪問:最好把兩台服務器之間的訪問是內網形態的,一般是Web服務器跟Memcache服務器之間。普遍的服務器都是有兩塊網卡,一塊指向互聯網,一塊指向內網,那么就讓Web服務器通過內網的網卡來訪問Memcache服務器,我們 Memcache的服務器上啟動的時候就監聽內網的IP地址和端口,內網間的訪問能夠有效阻止其他非法的訪問。

防火牆是簡單有效的方式,如果卻是兩台服務器都是掛在網的,並且需要通過外網IP來訪問Memcache的話,那么可以考慮使用防火牆或者代理程序來過濾非法訪問。

 

四、總結

到這里我想你對memcached也有了些了解。

Memcached不是一個數據庫,不是存儲數據的系統,他只是內存緩存數據系統。

Memcached不是信息的唯一來源,是來輔助數據庫操作的,來提升信息的查詢速度。

Memcached是key-value存儲,所以key約定和命名規范很重要,方便以后進行維護。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM