2012-03-25 9 views
6

Tengo el resultado de una consulta que es muy cara. Es la unión de varias tablas y un trabajo de reducción de mapa.Evitar el apilamiento de perros o la manada atronadora en un escenario de caducidad de memcached

Esto se almacena en caché en memcached durante 15 minutos. Una vez que el caché expira, las consultas se ejecutan obviamente y el caché se calienta nuevamente.

Pero en el punto de expiración puede ocurrir el problema thundering herd problem.

Una forma de solucionar este problema, lo que hago ahora es ejecutar una tarea programada que se activa en el minuto 14. Pero de alguna manera esto se ve muy subóptimo para mí.

Otro enfoque que me gusta es proxy_cache_use_stale updating; mecanismo de nginx.

El servidor web/máquina continúa entregando un caché obsoleto mientras un hilo se activa en el momento en que ocurre la caducidad y actualiza el caché.

¿Alguien ha aplicado esto al escenario memcached aunque entiendo que esta es una estrategia del lado del cliente?

Si se beneficia, uso Django.

+0

Sé que hizo esta hace 3 años. Tengo curiosidad, ¿qué terminaste usando? – Seperman

Respuesta

1

Quiere http://pypi.python.org/pypi/dogpile/ - implementa un algoritmo exactamente igual a proxy_cache_use_stale updating, e incluso funciona con memcachd.

+0

¿Se puede 'escalar '? –

+0

Ah, lo siento, resulta que te he engañado un poco. Resulta que el backend de memcached se implementa en https://bitbucket.org/zzzeek/dogpile.cache, pero eso no es del todo leído por la producción. –

Cuestiones relacionadas