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