Избегание собачьего или громового стада в сценарии истечения срока действия memcached - PullRequest
7 голосов
/ 25 марта 2012

У меня есть результат запроса, который очень дорогой.Это объединение нескольких таблиц и задания по сокращению карты.

Это кэшируется в memcached на 15 минут.Когда срок действия кеша истекает, запросы, очевидно, выполняются и кеш снова нагревается.

Но в момент истечения может возникнуть проблема thundering herd problem.

Один из способов решения этой проблемы, который я делаю прямо сейчас, - это запустить запланированное задание, которое запускается на 14-й минуте.Но почему-то это выглядит очень субоптимальным для меня.

Другой подход, который мне нравится - это механизм nginx proxy_cache_use_stale updating;.

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

Кто-то применил это к сценарию memcachedхотя я так понимаю это стратегия на стороне клиента?

Если это выгодно, я использую Django.

Ответы [ 2 ]

3 голосов
/ 25 марта 2012

Возможно, вы посмотрите на https://github.com/ericflo/django-newcache

1 голос
/ 25 марта 2012

Вы хотите http://pypi.python.org/pypi/dogpile/ - он реализует алгоритм точно так же, как proxy_cache_use_stale updating, и даже работает с memcachd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...