Как бороться с устаревшим элементом (из-за TTL) в memcached на высоконагруженном веб-сайте? - PullRequest
3 голосов
/ 15 июля 2010

Когда у вас есть пики 600 запросов в секунду, то очистка элемента памяти из-за истечения срока действия TTL имеет некоторые довольно негативные последствия.Почти в то же время 200 потоков / процессов находят кэш пустым и запускают запрос БД для его повторного заполнения

Как лучше всего справляться с этими ситуациями?

ps чемсрок для этой ситуации?(дает мне шанс получить лучшие результаты Google по теме)

Ответы [ 2 ]

6 голосов
/ 15 июля 2010

Если у вас есть объекты memcached, которые понадобятся для большого количества запросов (что вы подразумеваете, так и есть), то я хотел бы изучить отдельный процесс или задание cron, которое регулярно рассчитывает и обновляет эти объекты. Таким образом, он никогда не должен идти TTL. Это обычный компромисс: вы добавляете небольшую ненужную нагрузку во время низкого трафика, чтобы помочь уменьшить нагрузку во время пика (время, которое вам, вероятно, больше всего нужно).

Я узнал, что это называют "стадным штампованием" людьми из memcached, и они обсуждают это здесь: http://code.google.com/p/memcached/wiki/NewProgrammingTricks#Avoiding_stampeding_herd

Моим следующим предложением фактически было использование ограничений мягкого кэша, как обсуждалось в ссылке выше.

0 голосов
/ 15 июля 2010

Если у вашего объекта истекает срок действия, потому что вы установили срок его действия, а срок его действия истек, вы ничего не можете сделать, кроме как увеличить срок действия.

Если вас беспокоит устаревшие данные, воспользуйтесь несколькими методами.существует, вы могли бы рассмотреть:

  • Подумайте о том, чтобы сделать кэш авторитетным источником для любых данных, которые вы просматриваете, и создайте поток, задача которого - поддерживать его свежим.Это заставит другие потоки блокироваться при повторном заполнении кэша, поэтому это может иметь смысл, только если вы можете

  • Вместо того, чтобы устанавливать TTL для данных, измените любой процесс, обновляющий данные для обновления.кеш.Одна техника, которую я использую для частого изменения данных, заключается в том, чтобы делать это вероятностно - 10% времени записи данных обновляется.Вы можете настроить это для чего угодно, в зависимости от того, насколько дорогим является запрос к БД и насколько сильно устарели данные.

...