В документации django говорится следующее:
...
Одной из замечательных особенностей Memcached является возможность совместного использования кеша несколько серверов. Это означает, что вы можете запускать демоны Memcached на нескольких машины, и программа будет обрабатывать группу машин как единую кеш, без необходимости дублировать значения кеша на каждой машине. к воспользуйтесь этой функцией, включите все адреса серверов в LOCATION, либо разделенные точкой с запятой, либо как список.
...
Структура кэша Django - Memcached
Как именно это работает? Я прочитал несколько ответов на этом сайте, которые предполагают, что это достигается путем обхода серверов по хэшам ключей.
Вопрос о нескольких серверах memcached
Как MemCacheStore действительно работает с несколькими серверами?
Это хорошо, но мне нужен гораздо более конкретный и подробный ответ. Используя django с pylibmc или python-memcached, как это происходит на самом деле? Является ли порядок IP-адресов в настройке конфигурации? Что делать, если два разных веб-сервера, на которых работает одно и то же приложение django, имеют два разных файла настроек с IP-адресами серверов memcached в другом порядке? Это приведет к тому, что каждая машина использует другую стратегию очертания, которая вызывает дублирование ключей и другую неэффективность?
Что делать, если конкретная машина отображается в списке дважды? Например, что делать, если я должен был сделать что-то вроде этого, где 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 имеет большую емкость, чем другие? Если машина имеет 64 МБ memcached, а машина 2 имеет 128 Мбайт, будет ли учитываться алгоритм очертания и дать машине 2 большую долю ключей?
Я также прочитал, что если memcached-сервер потерян, эти ключи будут потеряны. Это очевидно, когда речь идет о шрапане. Что еще важнее, что произойдет, если сервер memcached опустится, и я оставлю свой IP-адрес в файле настроек? Будет ли django/memcached просто не получить какие-либо ключи, которые были бы отложены на этот неудавшийся сервер, или он поймет, что сервер потерпел неудачу и придумал новую стратегию ошпаривания? Если есть новая стратегия ошпаривания, разумно ли она использует ключи, которые изначально были предназначены для отказавшего сервера, и делить их между оставшимися серверами, или же она придумала совершенно новую стратегию, как если бы первый сервер не существовал и привести к дублированию ключей?
Я пробовал читать исходный код python-memcached и не мог понять это вообще. Я планирую попробовать прочитать код libmemcached и pylibmc, но я решил, что спрашивать здесь было бы легче, если бы кто-то уже знал.