Recientemente tuve que resolver el mismo problema, así que estoy feliz de compartir mi solución.
Mi requisito era construir un sistema escalable para cambiar el tamaño y almacenar en caché las imágenes sobre la marcha a cualquier resolución y calidad que se necesitara. Quería minimizar IO para imágenes “calientes”. Es decir, si las imágenes se solicitan con frecuencia, deberían volverse “calientes” en todos los cachés.
Mi solución se basa en la memoria caché grupal. Groupcache es una lectura distribuida que no caduca a través de la caché LRU. A diferencia de la mayoría de las soluciones de caché, no puede agregar pares de valores clave a la memoria caché de grupo. En su lugar, define cómo recuperar el valor de una clave específica.
- ¿Hay alguna manera de que pueda subprocesar un documento HTML? Me gustaría que se procesara lo más rápido posible.
- ¿Cuál es la forma de mejorar el rendimiento del sitio web?
- ¿Cuáles son las características más buscadas en viajes CMS?
- ¿Cuáles son los complementos más útiles para crear un sitio basado en WooCommerce en WordPress?
- ¿Cuántas páginas mostrará Google en la búsqueda desde mi sitio web?
Lo que hace que groupcache sea una buena herramienta para este problema es que cuando varios servidores dentro del grupo groupcache solicitan la misma clave, los datos se recuperan solo una vez y luego se distribuyen automáticamente a los otros servidores. Cargar una imagen nunca será más de un IO.
Esta solución es aplicable no solo a las imágenes sino también a todo lo que se puede traducir a bytes. El tiempo de vida se puede lograr agregando una marca de tiempo redondeada a la clave de caché.
Por supuesto, esta solución viene con compensaciones. No puede almacenar datos en una clave específica. No (todavía) las imágenes activas se cargarán desde el disco o necesitarán múltiples viajes de ida y vuelta a la red para obtener datos de otro miembro del grupo de caché.
Se podría lograr un mayor rendimiento agregando un equilibrador de carga en el frente que distribuya la carga de acuerdo con el hash de url para que haya más posibilidades de alcanzar un caché activo.
Estaré encantado de escuchar opiniones sobre esta solución.