Header Ads Widget

Ticker

6/recent/ticker-posts

Equilibrio del almacenamiento en caché de cliente y servidor en el desarrollo de aplicaciones web



Por encima de todo, la comunicación API es realmente una negociación entre el cliente y el servidor . Una vez que limpiamos todo el polvo, esta comunicación básica subyace a cada protocolo, arquitectura y enfoque. Estas negociaciones suelen ser complejas, y decidir quién tiene la responsabilidad de qué aspecto de esta comunicación negociada es una conversación histórica.

Un aspecto de esta negociación de contenido es el  almacenamiento en caché . ¿Dónde almacenamos los datos en caché y por qué? ¿Quién tiene la responsabilidad de recopilar este caché y cuáles son las implicaciones de cada decisión con respecto a esta ubicación?

Las variaciones en cómo se almacenan en caché las cosas, dónde se almacenan en caché y mediante qué mecanismo se almacenan en caché son fundamentales para una API . Hoy vamos a hablar de este equilibrio en el contexto del desarrollo de aplicaciones web . Definiremos qué es el almacenamiento en caché en realidad y profundizaremos un poco en los enfoques generales que podríamos tomar.

¿Qué es el almacenamiento en caché?

En el espacio en línea, muchas técnicas se denominan colectivamente "almacenamiento en caché" debido a su capacidad para reflejar esta funcionalidad. En términos más simples, el almacenamiento en caché es un concepto informático general que proporciona eficiencia a través de la disponibilidad de datos . El mecanismo mediante el cual se logra esto es mediante el almacenamiento de datos a los que se accede comúnmente en varios lugares, y luego entregando esos datos a los solicitantes desde el almacén de datos común. Esto se opone a generar contenido nuevo cada vez que se solicita.

Al proporcionar datos comúnmente solicitados a los usuarios que a menudo solicitan esos datos cuando llaman a las mismas funciones, puede evitar una gran cantidad de generación de datos adicionales, optimizar el flujo de trabajo de la solicitud, reducir el tiempo de entrega y eliminar la congestión en su ruta de entrada / salida de API al ahorrar recursos vitales de procesamiento y redes.

Al almacenar estos datos, se mejora la eficiencia . Cuando un solicitante realiza una solicitud de estos datos, la API prioriza las versiones almacenadas, donde sea que esté la caché, sobre la generación de datos, lo que permite su entrega y libera fuentes que de otro modo estarían ocupadas. Esto se puede usar para datos calculados , pero también es extremadamente útil para ciertos tipos de información estática ; por ejemplo, si el solicitante solicita la ubicación de un archivo que no se mueve, un directorio o incluso un número de versión, esta información debe almacenarse en caché. antes de tiempo y se utiliza para una respuesta rápida y eficiente.

Costo de datos

Antes de sumergirnos en las diversas metodologías detrás del almacenamiento en caché, debemos discutir brevemente la idea del costo de los datos . El costo de los datos es simplemente la idea de que cada operación, cada función, cada aspecto de lo que hacemos con una API resulta en algún tipo de costo. Este costo puede surgir de una variedad de factores y sistemas, tanto del servidor como del cliente, pero en última instancia, cada bit de datos tiene un costo asociado con su generación, transferencia y almacenamiento.

La pregunta es entonces: ¿  quién debería ser dueño de ese costo?  Es fácil para los desarrolladores asumir que el usuario está de acuerdo con este costo ya que ha solicitado los datos. Desafortunadamente, este costo no siempre es controlable y, en muchos casos, no se puede asumir que el cliente es capaz de manejar ese costo . El usuario, por definición, necesita datos que no tiene, y el servidor, por definición, necesita enviar estos datos al usuario como una transacción comercial. Existe el deseo de descargar al cliente tanto como pueda el servidor, pero los clientes no siempre pueden retener esta información.

Por supuesto, en muchas situaciones, el cliente quiere controlar el costo del contenido. Por lo tanto, todo se reduce a que  no hay forma de equilibrar perfectamente este costo . El almacenamiento en caché ayuda a reducir el costo en su nivel más básico al reducir las llamadas innecesarias que generan costos excesivos y aislar ese costo solo donde la demanda es válida y necesaria.

Almacenamiento en caché del cliente

Las memorias caché del cliente ayudan a limitar el costo de datos en el que incurre el usuario al mantener localmente los datos de referencia común El cliente a menudo solicita datos que pueden no ser grandes, pero de hecho se necesitan continuamente.

Por ejemplo, si una API se alimenta en una GUI web, en lugar de solicitar esas imágenes que componen el logotipo y otras marcas, ese contenido se puede almacenar localmente. Si la API alimenta un directorio al usuario, el usuario puede almacenar en caché este directorio localmente en lugar de solicitarlo desde el servidor, lo que elimina la etapa de búsqueda de directorios del cliente. Todo esto ayuda a reducir el costo de los datos en términos de utilización de la red y demanda del procesador y mejora la eficacia del sistema en general.

Desde el punto de vista de la API, el cliente realiza una solicitud a la API. El cliente primero busca localmente los datos relevantes. Si no se encuentran estos datos, la solicitud se envía al recurso externo y se genera el contenido para el cliente solicitante.

En muchos sistemas, este contenido se almacena durante un tiempo con una fecha de caducidad determinada desde la última vez que se solicitó. Esto permite que la caché sea dinámica , proporcionando el contenido que comúnmente se solicita al usuario mientras evita el aumento de tamaño y borra los datos innecesarios una vez que ya no son útiles.

El beneficio aquí es que la red para el cliente no enfrenta demandas de tráfico pesado sin una causa, ya que una gran cantidad de solicitudes de contenido pueden mantenerse locales. Además, esto libera tiempo en el lado del servidor, que ya no tiene que responder a consultas repetidas que ya han sido respondidas.

Almacenamiento en caché del servidor

El almacenamiento en caché del servidor ayuda a limitar el costo incurrido por el servidor y sus sistemas subyacentes. Muchas solicitudes hechas por clientes pueden ser respondidas usando los mismos datos o respondidas usando partes de las mismas solicitudes hechas por otros.

Por ejemplo, las consultas de la base de datos se utilizan a menudo para fines específicos: un cliente que sincroniza una lista de directorio local del mapa de recursos del servidor puede solicitar una encuesta completa de los recursos cada 2 horas. En este caso, el directorio se puede almacenar en caché en el servidor, y luego cada solicitud para esta sincronización se puede parchear a la copia en caché, que se compara con la realidad en el servidor. De esta manera, la base de datos se evita de realizar un montón de llamadas de las que de otra manera sería responsable, lo que ahorra costos de datos y mejora la eficiencia.

Para la API, esta solicitud se ve así:

  1. El cliente realiza una solicitud a la API.
  2. Esta solicitud es recibida por el servidor.
  3. El servidor busca una copia local del archivo solicitado. Si bien esta verificación tiene un costo, el costo sigue siendo extremadamente bajo en comparación con el costo real de calcular una verificación masiva de base de datos o generar contenido.
  4. Si el recurso local existe, el servidor responde con su URI de recurso.
  5. El cliente toma el contenido almacenado en caché.
  6. Si el recurso local no existe, la solicitud se procesa normalmente.

Si bien esto realmente no ahorra mucho costo para el cliente, los ahorros para el servidor pueden ser bastante significativos , especialmente cuando se trata de bases de datos o recursos de alto volumen. El almacenamiento en caché del contenido comúnmente solicitado puede resultar en algunos ahorros masivos de costos de datos y una mejor congestión de la red, ya que estas solicitudes a menudo se pueden descargar en otros servidores que no manejan consultas en vivo. Esto significa que esos servidores pueden consumir menos energía, consumir menos recursos y seguir proporcionando estos datos con una sobrecarga mínima.

Almacenamiento en caché híbrido

El almacenamiento en caché tampoco es solo una elección entre uno u otro: puede combinar el almacenamiento en caché de cliente y servidor para tener una solución más completa si su sistema específico lo permite. En este enfoque, aprovecha ambos tipos de almacenamiento en caché para liberar la carga del costo de los datos en ambos lados de la ecuación al preguntarle a quien esté respondiendo o solicitando que primero haga una consulta local.

Desde la perspectiva de la API, el flujo seguiría como tal:

  1. Un cliente hace una solicitud
  2. Primero busca una copia local. Si la copia no existe, contacta al servidor con una solicitud de este contenido.
  3. En el lado del servidor, el servidor buscará su propia copia local,
  4. Si existe una copia, la servirá. O generará uno nuevo si la copia no existe.

En este método, ahora hay dos procesos de caché separados que podrían reducir potencialmente el costo de datos de ambos lados de la ecuación. Esto también permite que el contenido específico del cliente o del usuario que puede no ser aplicable a otros usuarios se almacene en la caché del cliente local mientras que la caché del servidor almacena los datos requeridos universalmente.

Esta capacidad de almacenamiento en caché también se puede aumentar mediante el uso de otros servicios de almacenamiento en caché externos : las redes de entrega de contenido , por ejemplo, pueden almacenar este contenido en caché fuera del servidor, liberando el costo local para el servidor y reduciendo la carga del servidor para la entrega de contenido. En estos casos, el contenido es enviado por múltiples servidores , lo que significa una entrega de datos más rápida y una mayor redundancia, así como una liberación de recursos centrales para los servidores del sistema principal real.

Más sobre la optimización de API: Optimización del paquete de respuesta de API

Estudio de caso: aplicación Evolv

Veamos cómo podría funcionar todo esto en una aplicación de estudio de caso hipotético. Supongamos que estamos desarrollando una solución de almacenamiento en caché híbrida para una API de recursos humanos llamada Evolv . Evolv tiene una GUI web que se vincula con la API de backend y permite a los usuarios utilizar dispositivos como parte de una política de Bring Your Own Device. Evolv sincroniza los datos de contacto de los empleados entre diferentes departamentos, actualizando los dispositivos locales; es esencialmente una "base de datos de contactos segura" para las empresas, lo que le permite tener una base de datos de usuarios autenticados bloqueada detrás de un sistema de seguridad multifactor

Desde una perspectiva tecnológica, tenemos varios procesos aquí: una aplicación local que sincroniza los datos entre el cliente y el servidor, un servidor que recopila actualizaciones del cliente y actualiza la base de datos local, y un proceso que busca discrepancias entre el contenido almacenado en caché y el actual. base de datos.

Almacenamiento en caché local

Dado que la aplicación tiene un proceso que permite a los usuarios cambiar y administrar su base de datos de contactos local, se mantiene una versión en caché local de la base de datos de contactos. Esto permite revertir los cambios y permite la restauración de la copia local a versiones anteriores. Además, al tener una versión en caché local del contenido separada de la base de datos local, el contenido se puede actualizar o corregir a múltiples versiones de entrada diferentes sin volver a verificar con el servidor (por ejemplo, si ingresó el nuevo número incorrecto para una persona que todavía usa el número existente, este método le permitiría revertir esos cambios).

Además, tener una versión en caché local permite un segundo paso en el que el dispositivo puede verificar si hay discrepancias entre la versión más reciente de la caché y el estado del servidor. Al hacer esto, se pueden respaldar, agregar o revisar nuevas copias sin problemas, manteniendo las listas de contactos actualizadas sin eliminar información personal vital que elija el cliente.

Almacenamiento en caché del servidor

Mientras tanto, el servidor aún necesita mantener su propio recurso de datos para permitir todo esto. Al sincronizar su base de datos actual con un caché local, la fuente de datos puede garantizar la capacidad de revisión y, al mismo tiempo, enviar nuevos datos sin problemas a las aplicaciones a medida que lo solicitan sin hacer ping al servidor principal.

Al sincronizar la base de datos actual todas las noches después de la sincronización con los cambios de usuario, el servidor puede proporcionar un "respaldo" para cuando se creen nuevos clientes o se dañen las copias de seguridad antiguas. Esto permite realizar una sola consulta de base de datos en el lado del servidor todos los días, salvo consultas de emergencia, lo que ahorra una potencia de procesamiento significativa y transferencia de red.

Advertencias

Hay algunas advertencias importantes a considerar al almacenar contenido en caché.

El principal de ellos es el hecho de que el almacenamiento en caché tiene serias implicaciones cuando se trata de privacidad y seguridad . El contenido almacenado en caché puede tardar en cambiar, especialmente si aprovecha una red de entrega de contenido y, en esos casos, las correcciones a los problemas de privacidad pueden tardar un tiempo en propagarse. En muchos casos, es posible que el daño ya esté hecho. Además, algunas funciones pueden filtrarse accidentalmente, en cuyo caso, estas copias en caché pueden agravar el problema y empeorar estas funciones con filtraciones.

También tenga en cuenta que un proceso de almacenamiento en caché es esencialmente una llamada almacenada . En consecuencia, la mala configuración de estas llamadas puede propagarse a las versiones en caché si no tiene cuidado, lo que puede resultar en todo, desde contenido incorrecto en caché hasta pérdida de datos.

En última instancia, el almacenamiento en caché es un juego de equilibrio y un equilibrio deficiente puede incurrir en un gran costo en términos de rendimiento y valor monetario. Elegir qué almacenar en caché es casi tan importante como elegir dónde almacenarlo, así que considere esto como un aspecto importante de su estrategia de almacenamiento en caché.

Conclusión

El argumento sobre el almacenamiento en caché de ubicaciones es realmente egoísta. Los servidores siempre querrán más control y menos costos, mientras que los clientes claramente quieren una comunicación más rápida y más seguridad. En última instancia, la relación correcta de almacenamiento en caché se reduce a la antigua no respuesta de "lo que funciona mejor para su situación".

La verdad es que existen infinitas permutaciones de soluciones y relaciones de almacenamiento en caché, por lo que elegir la opción óptima dependerá de la situación y el diseño de sus diversos sistemas. Los clientes ligeros obviamente se beneficiarán mucho más del almacenamiento en caché del servidor que un sistema tradicional basado en computación que podría utilizar almacenamiento local en las llamadas torres “tradicionales”. Con todo esto, por supuesto, hay una serie de advertencias que no se pueden predecir; por lo tanto, debe observar el diseño de su sistema actual y encontrar lo que funciona mejor en su instancia particular.

¿Qué piensas? ¿Cree que existe un equilibrio óptimo para el almacenamiento en caché que cubre la mayoría de los casos de uso? ¡Háganos saber a continuación!

Publicar un comentario

0 Comentarios