Si es un desarrollador de back-end, el almacenamiento en caché es una solución de referencia siempre que necesite acelerar su aplicación web. Sin embargo, hay muchas cosas sobre el almacenamiento en caché que se pierden al decidir la estrategia de almacenamiento en caché adecuada para su aplicación web. Por lo tanto, en este artículo, analizaremos las diversas estrategias de almacenamiento en caché disponibles y cómo elegir la adecuada para su caso de uso.
En términos más simples, el almacenamiento en caché es una técnica de almacenamiento en búfer en la que almacenamos los datos a los que se accede con frecuencia en una memoria o espacio temporal para que estén disponibles y reducir la carga de trabajo de nuestra aplicación, servidor o base de datos. Se puede implementar en diferentes niveles en una aplicación web según el caso de uso.
El almacenamiento en caché ocurre en diferentes niveles en una aplicación web como la siguiente:
Una CDN se usa para almacenar en caché activos estáticos (como imágenes, videos o páginas web) en servidores distribuidos geográficamente de modo que pueda enviar el contenido más rápido al usuario final que usa la caché.
Considere un CDN como una cadena de supermercados: en lugar de viajar cientos de kilómetros a los campos donde se cultivan alimentos, los compradores van a su supermercado local, que aún necesita viajar pero está considerablemente más cerca. Las compras de comestibles toman minutos en lugar de días, ya que las tiendas de comestibles almacenan alimentos de granjas distantes. Del mismo modo, CDN almacena en caché el contenido que aparece en Internet, lo que permite que las páginas web se carguen mucho más rápido.
Cuando un usuario utiliza una CDN para solicitar cualquier contenido de un sitio web, la CDN recupera el contenido de un servidor de origen y guarda una copia del contenido para futuras solicitudes. El contenido almacenado en caché se mantiene en la caché de CDN mientras los usuarios continúen accediendo a él.
El almacenamiento en caché de la base de datos se refiere a los algoritmos de almacenamiento en caché inteligentes nativos utilizados por cualquier base de datos para optimizar las lecturas y escrituras. El caché, en este caso, puede residir en varias áreas, incluida la base de datos, la aplicación o como una capa independiente.
El almacenamiento en caché de la base de datos se puede utilizar con todo tipo de almacenes de datos, incluidas las bases de datos NoSQL y las bases de datos relacionales, como el servidor SQL, MySQL o MariaDB, etc. También funciona bien con muchas plataformas de datos, como AWS y Microsoft Azure.
Los navegadores o los clientes almacenan los activos estáticos en función de los encabezados de caducidad de la memoria caché. Los encabezados de caché HTTP especifican cuánto tiempo el navegador puede cumplir con las respuestas de caché posteriores para el contenido web solicitado. Además, los navegadores pueden almacenar en caché la respuesta de las solicitudes GET para evitar llamadas de datos innecesarias.
El almacenamiento en caché del servidor es el mecanismo de almacenamiento en caché más conocido y utilizado donde los datos se almacenan en caché en una aplicación de servidor. Aquí las cosas dependen mucho de las necesidades del negocio, está altamente optimizado para aplicaciones con menos usuarios concurrentes.
El almacenamiento en caché web del lado del servidor a menudo implica el uso de un proxy web para mantener las respuestas web de los servidores web frente a los cuales reside, lo que reduce significativamente su carga y latencia. Estos cachés son implementados por los administradores del sitio y actúan como un agente intermedio entre el navegador y los servidores de origen.
Otra forma de almacenamiento en caché del lado del servidor es mediante la utilización de almacenes de clave-valor como Memcached y Redis. Por el contrario, para los proxies inversos, que simplemente almacenan en caché la respuesta HTTP a una solicitud HTTP específica, cualquier contenido web que necesite el desarrollador de la aplicación puede almacenarse en caché mediante un almacenamiento de objetos clave/valor. El contenido web a menudo se obtiene mediante un código de aplicación o un marco de aplicación que puede explotar el almacenamiento de datos en memoria.
Otra ventaja de emplear almacenes de clave/valor para el almacenamiento en caché en línea es que se utilizan con frecuencia para almacenar sesiones web y otro material almacenado en caché. Esto proporciona una solución unificada para una variedad de situaciones de aplicación.
Hay varios beneficios del almacenamiento en caché como se menciona a continuación:
Como discutimos anteriormente, Cache es una capa de almacenamiento de datos de alta velocidad que almacena un subconjunto de datos a los que se accede con frecuencia y que generalmente son transitorios, de modo que las solicitudes futuras se atiendan más rápido que acceder a la ubicación de almacenamiento original. Por lo tanto, el almacenamiento en caché permite la reutilización eficiente de datos previamente accedidos o computados. Por lo tanto, la operación de lectura/escritura de datos se reduce en gran medida y ayuda a mejorar el rendimiento general de la aplicación.
Una sola instancia de caché puede proporcionar cientos de miles de operaciones de entrada/salida por segundo, lo que reduce el costo total al reducir la cantidad de instancias de base de datos requeridas. Por lo tanto, los ahorros de costos pueden ser significativos si los cargos de almacenamiento son por rendimiento.
El almacenamiento en caché puede reducir de forma efectiva la carga en el servidor backend y salvarlo de un rendimiento más lento, al redirigir las partes específicas de la carga de lectura desde la base de datos backend a la capa de almacenamiento en caché en memoria. Puede evitar que el sistema se bloquee en momentos de sobrecarga o pico de tráfico.
Un desafío común con las aplicaciones modernas es cuando se trata de lidiar con los picos en el uso de las aplicaciones. Por ejemplo: un aumento en las aplicaciones de redes sociales durante un evento tecnológico mundial, un partido de cricket o un día de elecciones, o una venta festiva en un sitio web de comercio electrónico, etc. así como la experiencia del usuario impredecible. Aunque, mediante el uso de un caché en memoria de alto rendimiento, podemos mitigar este problema en gran medida.
Es probable que un pequeño subconjunto de datos, como el perfil de una celebridad o un producto popular, se recupere con más frecuencia que el resto en muchas aplicaciones. Esto puede causar puntos críticos en su base de datos y requerir un aprovisionamiento excesivo de los recursos de la base de datos en función de los requisitos de rendimiento para los datos que se utilizan con más frecuencia. El almacenamiento de claves comunes en la memoria reduce la necesidad de aprovisionamiento excesivo al tiempo que proporciona un rendimiento rápido y predecible para los datos a los que se accede con más frecuencia.
Además de reducir la latencia, los sistemas en memoria brindan tasas de solicitud significativamente mayores que una base de datos similar basada en disco. Una sola máquina de caché lateral distribuida puede atender cientos de miles de solicitudes por segundo.
Habiendo discutido los beneficios del almacenamiento en caché, profundicemos en las estrategias de almacenamiento en caché con algunos casos de uso del mundo real. En este artículo, nos centraremos principalmente en las estrategias de almacenamiento en caché del lado del servidor.
En esta estrategia de almacenamiento en caché, el caché se coloca lógicamente a un lado y la aplicación se comunica directamente con la base de datos o el caché para saber si la información solicitada está presente o no. En primer lugar, la aplicación verifica con el caché, si se encuentra la información, lee y devuelve los datos, y se conoce como un acierto de caché ; de lo contrario, si no se encuentra la información, se conoce como una falta de caché , en cuyo caso, el La aplicación consulta la base de datos para leer la información y devuelve los datos solicitados al cliente, y luego también los almacena en el caché para uso futuro.
Es esencialmente beneficioso en casos de uso que requieren mucha lectura. Por lo tanto, si el servidor de caché no funciona, el sistema funcionará correctamente al comunicarse directamente con la base de datos, pero no es una solución confiable o a largo plazo en caso de picos de carga o picos que pueden ocurrir repentinamente.
La estrategia de escritura más común es escribir directamente en la base de datos; sin embargo, esto podría generar inconsistencias en los datos en caso de escrituras frecuentes. Para hacer frente a esta situación, los desarrolladores suelen utilizar un caché con TTL (Tiempo de vida) y continuar sirviendo hasta que caduque.
Aquí hay una descripción general rápida de la memoria caché con y sin TTL y cuándo usarla:
Un caché con TTL es el caché más utilizado cuando los datos se actualizan con frecuencia. En tales casos, desea que el caché caduque en intervalos regulares, por lo que puede usar un caché con un límite de tiempo y el caché se eliminará automáticamente una vez que haya transcurrido el intervalo de tiempo.
Por ejemplo, sesiones de servidor o cuadros de mando deportivos.
Una caché sin TTL se usa para las necesidades de almacenamiento en caché que no necesitan actualizarse con frecuencia, por ejemplo, el contenido de un sitio web que ofrece cursos. En este caso, el contenido se actualizará o publicará con poca frecuencia, por lo que es mucho más fácil almacenarlo en caché sin ningún límite de tiempo.
Como sugiere el nombre, en esta estrategia, cualquier información nueva se escribe primero en el caché antes de la memoria principal/base de datos. En este caso, el caché está lógicamente entre la aplicación y la base de datos. Por lo tanto, si un cliente solicita información, la aplicación no necesita verificar con el caché la disponibilidad de la información, ya que el caché ya tiene la información y, por lo tanto, se recupera directamente del caché y se entrega al cliente.
Sin embargo, aumenta la latencia de una operación de escritura. Pero si se combina con otra estrategia de almacenamiento en caché llamada caché de lectura, podemos garantizar la coherencia de los datos.
En esta estrategia de almacenamiento en caché, el caché se ubica en línea con la base de datos, de modo que cada vez que se pierde un caché (los datos no se encuentran en el caché), los datos faltantes se completan desde la base de datos y se devuelven al cliente.
Como habrás adivinado, funciona mejor para aplicaciones ya preparadas, en las que se solicita el mismo conjunto de información una y otra vez. Por ejemplo, un sitio web de noticias publicaría las mismas historias durante un día una y otra vez.
La desventaja de esta estrategia es que si los datos se solicitan por primera vez, siempre es un error de caché y, por lo tanto, será más lento que una solicitud normal.
En esta estrategia de almacenamiento en caché, cada vez que hay una operación de escritura, la aplicación escribe la información en el caché que reconoce inmediatamente los cambios y, después de un tiempo, vuelve a escribir los datos en la base de datos. También se conoce como la estrategia de almacenamiento en caché de escritura posterior.
Es una buena estrategia de almacenamiento en caché para aplicaciones que requieren muchas operaciones de escritura para mejorar el rendimiento de escritura de la aplicación. También puede ayudar a acomodar los tiempos de inactividad moderados de la base de datos y las fallas que pueden ocurrir en las instancias.
También puede funcionar bien cuando se combina con un caché de lectura. Además, puede reducir aún más la carga de trabajo de escritura en la base de datos si se admite el procesamiento por lotes. Sin embargo, la desventaja es que si hay una falla en el caché, los datos pueden perderse para siempre. En la mayoría de las bases de datos relacionales, el mecanismo de almacenamiento en caché de reescritura está habilitado de forma predeterminada.
En este caso, los datos se escriben directamente en la base de datos y solo los datos que se leen se almacenan en la memoria caché.
Se puede combinar con la memoria caché de lectura y podría ser una buena opción en situaciones en las que los datos se escriben una vez y solo se leen unas pocas veces. Por ejemplo, cuando se necesitan registros o chats en tiempo real.
En este artículo, discutimos qué es el almacenamiento en caché y los diferentes niveles de almacenamiento en caché en una aplicación, y por qué lo necesitamos. Luego, también discutimos varias estrategias de almacenamiento en caché para el almacenamiento en caché del lado del servidor. Sin embargo, no es necesario que cualquiera de estas estrategias de almacenamiento en caché pueda cumplir con sus casos prácticos de uso, pero siempre se recomienda optar por una combinación de estas estrategias para obtener los mejores resultados.
Para un desarrollador nuevo en esto, puede requerir algo de prueba y error, o podemos decir, acertar o fallar para obtener una comprensión más profunda del concepto en el sentido práctico y encontrar la mejor solución para un caso de uso particular.
Eso fue todo por este artículo, espero que les haya sido útil. Déjame saber lo que piensas. Puedes conectarte conmigo aquí:
¡Sigue leyendo!