2. AGENDA
● Presentaciones
● Conceptos básicos de almacenamiento en caché
● Cache hit & cache miss
● Ventajas del uso de caché en integraciones
● Desventajas - Consideraciones
● Buenas prácticas
● Acerca de Redis
● Conector de MuleSoft
● Acción
● Q&A
3. Buenos Aires - Meetup Leaders
Federico Castellari & Florencia Cattelani
● Licenciado en TI
● Salesforce Specialist en CloudGaia
● 10+ años en el mundo de integración
● MuleSoft Meetup Leader
/fpcastellari
● Ingeniera en Informática
● Magíster en Evaluación de Proyectos
● COO en CloudGaia
● 10+ años en el mundo de integración
● MuleSoft Meetup Leader / MuleSoft Ambassador
● MuleSoft Go To Market Champion
/florenciacattelani
/florencia.cattelani
@florcattelani
Federico Castellari & Florencia Cattelani
4. Conceptos básicos del almacenamiento en caché
¿Qué entendemos por almacenamiento en caché?
Se refiere al proceso de almacenar datos a los que se accede con frecuencia en un sistema de
almacenamiento temporal de alta velocidad para reducir el tiempo de respuesta de las peticiones
realizadas por las aplicaciones. El propósito principal del almacenamiento en caché es reducir el
tiempo necesario para acceder a datos y mejorar la eficiencia de las operaciones.
Consumidor
Servicio de
Datos
Caché
Petición
Respuesta
5. Conceptos básicos del almacenamiento en caché
¿Cuándo almacenar en caché?
Para que la utilización de un caché tenga sentido y aporte valor, debemos considerar lo siguiente:
● La operación para recuperar los datos solicitados debe ser lenta.
● La caché debe ser capaz de almacenar y recuperar adecuadamente los datos de manera
más rápida.
● Los datos deben necesitarse más de una vez. Cuantas más veces se necesite, más eficaz y
útil será la caché.
● La operación para calcular o recuperar los datos solicitados no debe tener efectos
secundarios.
● Implementar una caché debe ser más rentable que no hacerlo.
6. Conceptos básicos del almacenamiento en caché
Algunos casos de uso comunes
● Web Caching: Almacena recursos web como imágenes, scripts o páginas completas para
acelerar el acceso a sitios web.
● Caché de Base de Datos: Guarda resultados de consultas frecuentes para reducir la carga
en la base de datos.
● Caché de Sesiones: Almacena datos de sesiones de usuarios para un acceso rápido y
mejorar la experiencia del usuario.
● Caché de APIs/WS: Cuando un servicio llama a otro utilizando una API o un Web Service,
la respuesta a la llamada puede almacenarse en una caché y utilizarse para devolver
resultados a futuras llamadas equivalentes.
7. Cache Hit y Cache Miss
Cache Hit
Cache Miss
Consumidor
Servicio de
Datos
Caché
Respuesta
Petición
Consumidor
Servicio de
Datos
Caché
Petición
Respuesta
Petición
no existe
en caché
1
2
Cache Ratio
#Cache hits
(#cache hits + #cache miss)
8. Ventajas del uso de caché en integraciones
✓ Reducción de latencia
✓ Mejora del rendimiento
✓ Escalabilidad
✓ Optimización de recursos
✓ Reducción de carga en sistemas backend
✓ Resiliencia y alta disponibilidad
✓ Simplificación de procesos
9. Desventajas - Consideraciones
Como en toda tecnología el almacenamiento en caché implica ventajas y desventajas. Por lo
cual debemos considerar:
● El almacenamiento en caché puede hacer que la aplicación no ejecute los efectos
secundarios deseados de las operaciones deseadas
● Pueden existir datos inconsistentes en una caché, rompiendo con el principio de fiabilidad
de los datos
● Rendimiento deficiente de la caché
10. Buenas prácticas
Para obtener el máximo beneficio del almacenamiento en caché y evitar problemas como el
"caché inconsistente", es importante seguir ciertas prácticas recomendadas:
Estrategias para gestionar la caché
● TTL
● Invalidación de caché
● Particionamiento de caché
● Caché buster
● Control de concurrencia
● Monitorización y ajuste
11. Acerca de Redis
Redis es una potente y versátil base de datos en memoria que se destaca por su velocidad y su
capacidad para manejar una amplia gama de casos de uso, desde el almacenamiento en caché
hasta la mensajería en tiempo real. Su estructura de datos en memoria y su arquitectura basada
en clave-valor lo convierten en una opción popular para aplicaciones que requieren un acceso
rápido a los datos. Como fortalezas, podemos destacar:
● Alta Velocidad
● Versatilidad de Estructuras de Datos
● Persistencia Opcional
● Capacidades de Replicación y Clustering
● Simplicidad de Implementación
● Flexibilidad de Uso
● Soporte para Lua Scripting
12. Acerca de Redis
Soluciones de caché
● Cache aside
Acelera las lecturas cuando la consistencia
no es determinante
Más información: https://redis.io/solutions/caching/
● Query caching
Cuando es necesario acelerar consultas
sencillas (SQL) con mínimo overhead
13. Acerca de Redis
Soluciones de caché
● Write-through cache
Acelera las lecturas cuando la consistencia
es determinante (síncrono)
Más información: https://redis.io/solutions/caching/
● Write-behind cache
Acelera la escritura (asíncrono)
14. Acerca de Redis
Soluciones de caché
● Cache prefetching
Cuando se requieren los datos
almacenados en caché con antelación
Más información: https://redis.io/solutions/caching/
Storytelling: Restaurant
Mencionar la nube y la latencia entre distintas regiones o servicios/bases de datos on premise
Cache Hit
Un cache hit ocurre cuando los datos solicitados ya están almacenados en la caché. En este caso, el sistema puede recuperar la información de manera rápida y eficiente sin necesidad de acceder a fuentes de datos más lentas, como bases de datos o sistemas de almacenamiento externo. El cache hit es ideal, ya que contribuye a una latencia baja y a un rendimiento optimizado.
Cache Miss
Un cache miss sucede cuando los datos solicitados no están en la caché. En esta situación, el sistema debe buscar la información en fuentes más lentas, como la memoria principal o sistemas de almacenamiento externos. Los cache misses son indeseables, ya que aumentan la latencia y disminuyen el rendimiento del sistema. Una alta tasa de cache miss indica que el almacenamiento en caché no está funcionando de manera efectiva.
Reducción de la Latencia
El almacenamiento en caché permite acceder a datos con mucha mayor rapidez en comparación con las fuentes de datos tradicionales. Al almacenar datos utilizados con frecuencia en memoria o en ubicaciones de acceso rápido, las operaciones de lectura pueden realizarse con tiempos de respuesta muy bajos. Esto se traduce en una mejor experiencia para el usuario y una mayor eficiencia para la aplicación.
Mejora del Rendimiento
Al evitar tener que acceder constantemente a bases de datos u otros sistemas lentos, el almacenamiento en caché puede reducir significativamente la carga en los recursos de back-end. Esto permite que las aplicaciones y servicios funcionen de manera más fluida y con menos interrupciones, incluso bajo cargas pesadas.
Escalabilidad
El almacenamiento en caché permite que las aplicaciones escalen de manera más eficiente, ya que las operaciones de caché son generalmente más rápidas que las operaciones tradicionales de lectura/escritura en bases de datos. Esto facilita el crecimiento de aplicaciones sin necesidad de incrementar proporcionalmente los recursos de back-end.
Reducción de la Carga en Sistemas de Back-End
Cuando las integraciones se basan en datos que pueden ser almacenados temporalmente, el almacenamiento en caché puede ayudar a reducir el número de solicitudes a sistemas de back-end, como bases de datos o servicios web. Esto no solo disminuye la carga en esos sistemas, sino que también puede reducir costos asociados con el uso de recursos adicionales.
Resiliencia y Alta Disponibilidad
El uso de caché puede aumentar la resiliencia del sistema. En caso de que un sistema de back-end falle temporalmente, el caché puede seguir sirviendo datos, proporcionando una experiencia más confiable para el usuario final. Redis, por ejemplo, permite replicación y clustering para alta disponibilidad, asegurando que el sistema continúe funcionando incluso en situaciones adversas.
Simplificación de Procesos
El almacenamiento en caché puede simplificar procesos complejos en integraciones, permitiendo el almacenamiento de datos intermedios o resultados de operaciones costosas. Esto puede ser especialmente útil en flujos de trabajo de MuleSoft, donde las respuestas rápidas y eficientes son clave para el éxito de las integraciones.
Por supuesto, como cualquier otra tecnología, el almacenamiento en caché también implica ventajas y desventajas.
No todas las situaciones son casos de uso apropiados para el almacenamiento en caché.
En muchos casos, el almacenamiento en caché puede no agregar valor y, en algunos casos, la caché puede degradar el rendimiento.
En concreto, hay tres cosas con las que hay que tener cuidado a la hora de decidir si y cómo almacenar en caché:
Estrategias para Gestionar el Almacenamiento en Caché
TTL (Time to Live): Establecer tiempos de vida para los elementos de la caché. Esto garantiza que los datos se mantengan actualizados y no permanezcan en la caché más tiempo del necesario.
Invalidación de Caché: Definir reglas para invalidar datos en la caché cuando cambian las condiciones o la información se actualiza en la fuente principal. Esto ayuda a mantener la coherencia y a evitar el uso de datos desactualizados.
Particionamiento de Caché: Dividir la caché en segmentos o particiones para evitar conflictos y mejorar la eficiencia. Esto es útil en sistemas distribuidos o en entornos de alta carga.
Cache Buster: Utilizar técnicas como el cache busting para forzar la actualización de datos en la caché, evitando el uso de versiones antiguas. El "cache busting" es una técnica utilizada para asegurarse de que un sistema de caché no entregue datos desactualizados o versiones anteriores de recursos almacenados.
Control de Concurrencia: Implementar mecanismos para controlar el acceso concurrente a la caché, evitando conflictos y garantizando la coherencia.
Monitorización y Ajuste: Monitorear el rendimiento de la caché y ajustar las estrategias según sea necesario. Esto permite detectar problemas temprano y aplicar correcciones antes de que impacten negativamente el rendimiento del sistema.
Alta Velocidad: Redis es extremadamente rápido porque almacena datos en memoria, permitiendo tiempos de respuesta muy bajos y operaciones rápidas.
Versatilidad de Estructuras de Datos: Redis soporta una variedad de estructuras de datos avanzadas, como strings, listas, sets, sets ordenados, hashes, JSON y más. Esto lo hace adecuado para una amplia gama de casos de uso.
Persistencia Opcional: Aunque trabaja principalmente en memoria, Redis ofrece opciones de persistencia para guardar datos en disco y permitir la recuperación tras reinicios o fallos.
Capacidades de Replicación y Clustering: Redis soporta replicación y clustering, lo que permite configuraciones de alta disponibilidad y escalabilidad horizontal.
Simplicidad de Implementación: Redis es relativamente fácil de instalar y usar, con una interfaz de comandos simple y amplia documentación.
Flexibilidad de Uso: Puede ser utilizado como almacenamiento en caché, base de datos principal, sistema de colas, contador, o para otras aplicaciones especializadas, como analítica en tiempo real.
Soporte para Lua Scripting: Redis permite la ejecución de scripts Lua para operaciones más complejas, proporcionando flexibilidad para personalizar la lógica del servidor.
Cache Aside
También conocida como "Lazy Loading" o "Cache-Aside Pattern", es una de las estrategias de caché más utilizadas. En este patrón:
El cliente primero busca los datos en la caché.
Si los datos están en la caché (cache hit), los usa.
Si los datos no están en la caché (cache miss), el cliente los obtiene de la fuente de datos original, los almacena en la caché para futuras consultas, y luego los usa.
Query Caching
Es un patrón donde las consultas a bases de datos u otros sistemas se almacenan en la caché para un acceso rápido. Al repetir una consulta, los resultados se obtienen de la caché en lugar de volver a ejecutar la consulta completa, reduciendo la carga en la fuente de datos original.
Write-Through Cache
En esta estrategia, cada vez que un dato es escrito o actualizado en la fuente de datos original, también se escribe en la caché. Esto asegura que la caché esté siempre actualizada con la fuente de datos, pero puede añadir una pequeña sobrecarga por las escrituras adicionales.
Write-Behind Cache
A diferencia del write-through, en el write-behind (también conocido como "write-back"), las escrituras se realizan primero en la caché y luego se propagan a la fuente de datos original en segundo plano. Esto puede mejorar el rendimiento en operaciones de escritura, pero tiene el riesgo de perder datos si la caché falla antes de que se realicen las escrituras en la fuente de datos.
¿Qué es el Cache Prefetching?
El cache prefetching consiste en anticipar las necesidades de datos y cargar esos datos en la caché para que estén disponibles cuando se requieran. Esta técnica se usa para minimizar el tiempo de espera de las solicitudes y puede ser especialmente útil en sistemas donde la latencia es crítica o en casos donde el acceso a la fuente de datos original es costoso en términos de tiempo o recursos.
Standalone:
Sentinel: Básicamente es un servicio de monitoreo para maestros y esclavos que corre en background. Además, puede enviar notificaciones, cambiar automáticamente los roles de maestros y esclavos si un maestro está caído y enviar notificaciones
Cluster: Es una solución de clustering completa para la segmentación, replicación y gestión de sus nodos.
Realiza la sincronización de datos, la replicación y gestiona la persistencia del acceso a los nodos si alguno se cae.
El uso de Sentinel en el caso de Redis Cluster no tiene sentido ya que Cluster hará todo por sí mismo.