2009-08-09 27 views
8

在memcached網站上它說memcached是一個分佈式內存緩存。這意味着它可以在多個服務器上運行並保持某種一致性。當我在谷歌應用程序引擎中發出請求時,相同實體組中的請求很有可能由同一臺服務器提供服務。在谷歌應用程序引擎中的服務器上共享memcached共享嗎?

我的問題是,說有兩臺服務器爲我的請求提供服務,這兩臺服務器的memcached視圖是一樣的嗎?也就是說,我在一臺服務器上的memcached中放入的內容反映在其他服務器的memcached實例中,還是這兩個完全獨立的memcached實例(每個服務器一個)?

具體而言,我希望每個服務器實際運行它自己的memcached實例(在其他memcached實例中不復制)。如果這兩個memcached實例更新了它們相關的更改,是否有辦法禁用它?

我很抱歉,如果這些問題很愚蠢,因爲我剛開始閱讀它,但這些都是我遇到的最初問題。謝謝。

回答

12

App Engine並未真正使用memcached,而是實現了API兼容的重新實現(主要由same guy,我相信 - 在他的「20%時間內」;-)。

緩存的值可能在任何時候消失(通過顯式過期,在一臺服務器崩潰,或由於內存稀缺,在這種情況下,他們被驅逐在最近最少使用的順序等),但如果他們不' t消失時,它們在被不同服務器查看時是一致的。

2

通常,memcached不會在服務器之間共享數據。應用程序服務器散列密鑰以選擇memcached服務器,然後與該服務器通信以獲取或設置數據。

4

所選的memcached服務器不依賴於您正在使用的實體組(實體組是來自數據存儲區的概念,即不同的野獸)。

每臺服務器都運行自己的memcached實例,每臺服務器將存儲您在memcache中存儲的一部分對象。它的工作方式是,當您使用memcached API在給定密鑰下存儲某些內容時,會選擇一個memcached服務器(基於密鑰)。

memcached實例之間沒有複製,如果其中一個框出現故障,則會丟失1個memcached數據(N是AppEngine中運行的memcached實例數)。

0

總部設在我所知道的,有你整個應用程序的內存緩存只有一個實例,有可能是在運行每一個與他們的記憶代碼的許多實例,以及世界各地的許多數據存儲,但只一次只能有一個Memcache服務器,並且請記住,這容易出現故障服務,即使它沒有SLA。

相關問題