Мы развертываем memcached для нашего приложения, и я хотел бы сделать его как можно более стойким.
Мы планируем использовать расширение memcacheD.
Одна вещь, которую я не полностью понял, - это то, что произойдет, если один из серверов погибнет. По крайней мере, похоже, что клиент memcached просто "отказывается" на этом сервере и ничего не хранит в нем.
С этим поведением я в порядке. Мы можем справиться с кучей промахов. Тем не менее, было бы неплохо, что после того, как один из серверов будет считаться "неудачным", последующие наборы и получат перераспределение на оставшиеся серверы.
Так как это не происходит автоматически; Я предполагаю, что единственный способ подойти к этой проблеме - заставить внешнюю систему выполнять проверки работоспособности в системах memcached и соответствующим образом обновлять список серверов.
Но если есть список из 10 серверов, и, скажем, пятый умирает.. даже с хетами Ketama казалось бы, что это вызовет большое перераспределение ключей (это просто основано на здравом смысле).
В идеале я просто хотел бы, чтобы расширение PHP выясняло, что сервер выключен, отметьте его в течение указанного количества времени (10 минут), и в течение этих 10 минут отходят на другие серверы (красиво распределенные) для устанавливает и получает.
Как другие люди решают это?
Изменить: уточнение моей точки libketama.
Скажем, у нас есть 10 серверов:
1,2,3,4,5,6,7,8,9,10
Один из них умирает. Тогда Libketama предоставит очень высокую вероятность, что обращения к отсутствующему серверу будут одинаково распределены на оставшиеся серверы:
1,2,3,4,inactive,6,7,8,9,10
НО: если мы предоставляем и управляем этим списком вручную, это не так:
1,2,3,4,6,7,8,9,10 // There are now 9 servers!
6 получит 5 предыдущих ключей, 7 - 6. 8 получит 7, 9 получит 8 и 10 получит 9 очков. Все хиты, которые использовали 10-й сервер, не будут распределены между остальными. Результатом является высокая вероятность того, что почти 50% всех ключей будут отправлены на новые серверы.