【发布时间】:2011-10-16 02:48:03
【问题描述】:
在 django 文档中是这样说的:
...
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 服务器的容量比其他服务器大怎么办?如果机器 1 的内存缓存为 64MB,机器 2 的内存缓存为 128MB,分片算法是否会考虑这一点并给予机器 2 更大比例的密钥?
我还了解到,如果 memcached 服务器丢失,那么这些密钥也会丢失。当涉及分片时,这一点很明显。更重要的是,如果 memcached 服务器出现故障并且我将其 IP 地址留在设置文件中会发生什么? django/memcached 会简单地无法获取任何将被分片到该故障服务器的密钥,还是会意识到该服务器已发生故障并提出新的分片策略?如果有一个新的分片策略,它是智能地获取原本用于故障服务器的密钥并将它们分配给剩余的服务器,还是提出一个全新的策略,就好像第一台服务器不存在一样?导致密钥重复?
我尝试阅读 python-memcached 的源代码,但根本无法弄清楚这一点。我打算尝试阅读 libmemcached 和 pylibmc 的代码,但我想如果有人已经知道,在这里问会更容易。
【问题讨论】:
标签: python django memcached sharding