Я столкнулся с проблемой, когда данные в моей базе данных возвращаются к старому состоянию. Я думаю, что я сузил проблему до этой ситуации.Несогласованные данные с неуправляемым узлом кэша
Представьте последовательность двух покупок происходит так:
- Все узлы кэша работают
- журналы пользователь на (их данные извлекается из БД и хранится в Memcached)
- Кэш-память узел опускается
- Пользователь продолжает просматривать (и поскольку их данные не могут быть найдены в кеше, он извлекается из БД и сохраняется в memcached)
- Пользователь выполняет некоторые действия, которые преобразуют ms их запись [например, выравнивание] (их запись обновляется в кеше и базе данных)
- Кэш-узел возвращается
- Мы снова извлекаем данные пользователя из кеша и исходим из исходного кеш-узла, который ранее было
- Теперь у нас есть проблема: узел в кеше устарел!
- Пользователь делает другое действие, которое превращает их запись
- Это сохраняется в кэше и базах данных, но так как она была основана на устаревшей записи он топает по сравнению с предыдущими изменениями и эффективно возвращается его
Мы потеряли данные, потому что запись базы данных была переписана с частично устаревшей информацией.
Как я могу предотвратить это с помощью PHP5 и libmemcached с постоянными соединениями? Я думаю, что я хочу, чтобы кэш-узел не переключился на другой ресурс; он должен просто не читать и записывать на этот узел, но не удалять его из пула, чтобы я не получал дубликаты записей.
Это увеличит нагрузку на мою базу данных на 1/n (где n - общее количество узлов кэша), когда узел опускается, но это лучше, чем заканчиваться несогласованными данными.
К сожалению, у меня возникли проблемы с пониманием того, какие настройки я должен изменить, чтобы получить такое поведение.
Узел кэша, который «возвращается», запускается, должен считаться недействительным вообще и должен быть опущен – bebbo
@bebbo Есть ли настройка для этого в memcached? Я не уверен, что кэш-узел знает, что он стал недоступным (возможно, только подмножество серверов) –
Мне не известны такие параметры. Мой подход заключается в том, чтобы сохранить только данные не транзакций в кеше, чтобы быть в безопасности. – bebbo