在Django文檔,它說的:django如何處理多個memcached服務器?
...
的Memcached的一個極好的特性是它在 多個服務器共享緩存的能力。這意味着您可以在多臺 機器上運行Memcached守護進程,並且該程序會將該組機器視爲單個的 緩存,而無需在每臺機器上覆制緩存值。至 利用此功能,包括位於 LOCATION中的所有服務器地址,以分號或列表分隔。
...
Django's cache framework - Memcached
究竟是如何工作的呢?我在這個網站上讀到了一些答案,表明這是通過基於密鑰哈希的服務器進行分片來完成的。
Multiple memcached servers question
How does the MemCacheStore really work with multiple servers?
這很好,但我需要一個更具體的,詳細的解答比。使用django與pylibmc或python-memcached如何實際執行分片?配置設置中的IP地址順序是否重要?如果運行同一個django應用程序的兩個不同的web服務器有兩個不同的設置文件,其中memcached服務器的IP地址以不同的順序排列?這會導致每臺機器使用不同的分片策略,導致重複密鑰和其他低效率?
如果一個特定的機器出現兩次,該怎麼辦?例如,如果我要這樣做127.0.0.1實際上與172.19.26.240相同的機器,那該怎麼辦?
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'127.0.0.1:11211',
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
如果其中一個memcached服務器的容量比其他容量更大,該怎麼辦?如果機器有64MB memcached,機器2有128MB,那麼sharding算法是否會考慮到這一點,併爲機器2提供更大比例的密鑰?
我也讀過,如果一個memcached服務器丟失,那麼這些密鑰丟失。涉及分片時,這很明顯。更重要的是,如果memcached服務器出現故障,我將其IP地址保留在設置文件中會發生什麼情況? django/memcached會不會得到任何已經分解到失敗服務器的密鑰,還是會意識到服務器已經失敗並提出了新的分片策略?如果存在新的分片策略,它是否智能地將最初用於故障服務器的密鑰分開並將它們分配到剩餘的服務器中,或者是否提出了一個全新的策略,就好像第一個服務器不存在一樣,導致密鑰被複制?
我嘗試閱讀python-memcached的源代碼,但根本找不到這個。我打算嘗試閱讀libmemcached和pylibmc的代碼,但我想如果有人已經知道,在這裏問問會更容易。
謝謝!這並沒有完全回答我所有的問題,但它指出了我自己正確回答問題的方向。唯一的錯誤是服務器的順序在一個案例中很重要。如果您有多個Web服務器,並且您希望它們都將相同的密鑰放在相同的Memcached服務器上,則需要使用相同的權重以相同的順序將它們配置爲具有相同的服務器列表。 – Apreche