Tiered Caching, o caché por niveles, es un patrón de diseño donde los datos se almacenan en múltiples capas de caché, ordenadas jerárquicamente por su proximidad a la aplicación o usuario final. Cada nivel de la jerarquía suele tener diferentes propiedades en términos de velocidad de acceso, capacidad de almacenamiento, costo y volatilidad. Típicamente, los niveles más cercanos al cliente (ej. caché L1) son más rápidos y pequeños, mientras que los niveles más lejanos (ej. caché L3 o caché distribuida) son más lentos y grandes. La solicitud de un dato primero consulta el nivel más rápido y pequeño; si el dato no se encuentra (cache miss), la solicitud "cae" al siguiente nivel en la jerarquía hasta que se encuentra o se accede a la fuente de datos original (ej. base de datos).
Este patrón es omnipresente en la arquitectura de sistemas modernos. A nivel de hardware, las CPUs utilizan Tiered Caching con cachés L1, L2 y L3. En sistemas distribuidos, es común ver una combinación de cachés locales en el servidor de aplicaciones (ej. Caffeine, Ehcache), cachés distribuidas en memoria (ej. Redis, Memcached) y Content Delivery Networks (CDNs) como Cloudflare o Akamai que actúan como la capa más externa de caché, cercana al usuario geográficamente. Bases de datos como PostgreSQL o MySQL también implementan cachés internas (buffer pools) que pueden considerarse parte de una estrategia de Tiered Caching más amplia cuando se combinan con cachés de aplicación.
Para un arquitecto, Tiered Caching es fundamental para optimizar el rendimiento y la resiliencia. La decisión clave radica en cómo equilibrar la complejidad, el costo y el rendimiento. Un diseño eficaz requiere considerar la frecuencia de acceso a los datos, su volatilidad, el tamaño de los objetos y la tolerancia a la latencia. Los trade-offs incluyen el aumento de la complejidad operativa y de coherencia (invalidación de caché) a medida que se añaden más niveles, frente a la reducción drástica de la latencia y la carga en los sistemas de almacenamiento primarios. Es crucial definir políticas de invalidación y estrategias de "cache warming" para cada nivel, así como monitorear las tasas de acierto (hit rates) para ajustar la capacidad y la configuración de cada tier.