Búsqueda de sitios web

Las mejores herramientas de almacenamiento en caché de código abierto para Linux en 2023


Los sistemas y aplicaciones informáticos distribuidos confiables se han convertido en la piedra angular de empresas destacadas, especialmente en la automatización y gestión de procesos comerciales de misión crítica y la prestación de servicios a los clientes.

Como desarrolladores y administradores de sistemas de estos sistemas y aplicaciones, se espera que usted proporcione todo tipo de soluciones de tecnología de la información (TI) que garanticen que tenga los sistemas más eficientes disponibles.

Esto incluye tareas como diseñar, probar e implementar estrategias para el rendimiento, la confiabilidad, la disponibilidad y la escalabilidad del sistema/aplicación, para brindar a los usuarios finales un nivel de servicio satisfactorio.

El almacenamiento en caché es una de las muchas técnicas de entrega de aplicaciones, muy básicas pero efectivas, en las que puede confiar. Antes de continuar, veamos brevemente qué es el almacenamiento en caché, dónde y/o cómo se puede aplicar y sus beneficios.

¿Qué es el almacenamiento en caché o almacenamiento en caché de contenido?

El almacenamiento en caché (o almacenamiento en caché de contenido) es una técnica ampliamente utilizada para almacenar copias de datos en una ubicación de almacenamiento temporal (también conocida como caché). para que se pueda acceder fácil y rápidamente a los datos cuando se recuperen del almacenamiento original.

Los datos almacenados en un caché pueden incluir archivos o fragmentos de archivos (como archivos HTML, scripts, imágenes, documentos, etc.), operaciones o registros de bases de datos, llamadas API, registros DNS, etc., según el tipo y propósito del almacenamiento en caché.

Un caché puede tener la forma de hardware o software. La memoria caché basada en software (que es el tema central de este artículo) se puede implementar en diferentes capas de una pila de aplicaciones.

El almacenamiento en caché se puede aplicar en el lado del cliente (o en la capa de presentación de la aplicación), por ejemplo, almacenamiento en caché del navegador o almacenamiento en caché de aplicaciones (o modo fuera de línea). La mayoría, si no todos, los navegadores modernos vienen con una implementación de caché HTTP.

Es posible que haya oído hablar de la frase popular "borrar su caché" al acceder a una aplicación web para permitirle ver los datos o el contenido más recientes de un sitio web o aplicación, en lugar de que el navegador utilice una copia antigua de el contenido almacenado localmente.

Otro ejemplo de almacenamiento en caché del lado del cliente es el almacenamiento en caché de DNS que ocurre a nivel del sistema operativo (SO). Es un almacenamiento temporal de información sobre búsquedas de DNS anteriores realizadas por el sistema operativo o el navegador web.

El almacenamiento en caché también se puede implementar a nivel de red, ya sea en una LAN o una WAN a través de servidores proxy. Un ejemplo común de este tipo de almacenamiento en caché son las CDN (Content Delivery Networks), que son redes distribuidas globalmente de servidores proxy web.

En tercer lugar, también puede implementar el almacenamiento en caché en los servidores de origen o backend. Existen diferentes formas de almacenamiento en caché a nivel de servidor, que incluyen:

  • almacenamiento en caché del servidor web (para almacenar en caché imágenes, documentos, scripts, etc.).
  • almacenamiento en caché de aplicaciones o memorización (se utiliza para leer archivos del disco, datos de otros servicios o procesos, o solicitar datos de una API, etc.).
  • almacenamiento en caché de base de datos (para proporcionar acceso en memoria a datos utilizados con frecuencia, como filas de bases de datos solicitadas, resultados de consultas y otras operaciones).

Tenga en cuenta que los datos de la caché se pueden almacenar en cualquier sistema de almacenamiento, incluida una base de datos, un archivo, la memoria del sistema, etc., pero deben ser un medio más rápido que la fuente principal. En este sentido, el almacenamiento en caché en memoria es la forma de almacenamiento en caché más eficaz y comúnmente utilizada.

¿Por qué utilizar el almacenamiento en caché?

El almacenamiento en caché ofrece numerosos beneficios, incluidos los siguientes:

  • A nivel de base de datos, mejora el rendimiento de lectura a microsegundos para los datos almacenados en caché. También puede utilizar una caché de reescritura para mejorar el rendimiento de escritura, donde los datos se escriben en la memoria y luego se escriben en el disco o en el almacenamiento principal a intervalos específicos. Pero el aspecto de la integridad de los datos puede tener implicaciones potencialmente desastrosas. Por ejemplo, cuando el sistema falla justo antes de que los datos se envíen al almacenamiento principal.
  • A nivel de aplicación, una caché puede almacenar datos leídos con frecuencia dentro del propio proceso de la aplicación, reduciendo así los tiempos de búsqueda de datos de segundos a microsegundos, especialmente a través de la red.
  • Teniendo en cuenta el rendimiento general de las aplicaciones y del servidor, el almacenamiento en caché ayuda a reducir la carga del servidor, la latencia y el ancho de banda de la red a medida que los datos almacenados en caché se entregan a los clientes, mejorando así el tiempo de respuesta y las velocidades de entrega a los clientes.
  • El almacenamiento en caché también permite la disponibilidad de contenido, especialmente a través de CDN, y muchos otros beneficios.

En este artículo, revisaremos algunas de las principales herramientas de código abierto (almacenamiento en caché de aplicaciones/bases de datos y servidores proxy de almacenamiento en caché) para implementar aplicaciones en el lado del servidor. almacenamiento en caché en Linux.

1. Redis

Redis (REmote DIctionary Server en su totalidad) es un sistema informático distribuido en memoria gratuito, de código abierto, rápido, de alto rendimiento y flexible que se puede utilizar desde la mayoría, si no todos, los lenguajes de programación.

Es un almacén de estructura de datos en memoria que funciona como motor de almacenamiento en caché, base de datos persistente en memoria en disco y intermediario de mensajes. Aunque está desarrollado y probado en Linux (la plataforma recomendada para la implementación) y OS X, Redis también funciona en otros sistemas POSIX como *BSD, sin dependencias externas.

Redis admite numerosas estructuras de datos, como cadenas, hashes, listas, conjuntos, conjuntos ordenados, mapas de bits, secuencias y más. Esto permite a los programadores utilizar una estructura de datos específica para resolver un problema específico. Admite operaciones automáticas en su estructura de datos, como agregar una cadena, enviar elementos a una lista, incrementar el valor de un hash, calcular la intersección de conjuntos y más.

Sus características clave incluyen replicación maestro-esclavo de Redis (que es asincrónica de forma predeterminada), alta disponibilidad y conmutación por error automática que se ofrece usando Redis Sentinel, clúster de Redis (puede escalar horizontalmente agregando más nodos de clúster) y partición de datos (distribuyendo datos entre múltiples Redis). instancias). También incluye soporte para transacciones, secuencias de comandos Lua, una variedad de opciones de persistencia y cifrado de comunicación cliente-servidor.

Al ser una base de datos en memoria pero persistente en disco, Redis ofrece el mejor rendimiento cuando funciona mejor con un conjunto de datos en memoria. Sin embargo, puedes usarlo con una base de datos en disco como MySQL, PostgreSQL y muchas más. Por ejemplo, puede tomar datos pequeños con mucha escritura en Redis y dejar otros fragmentos de datos en una base de datos en disco.

Redis respalda la seguridad de muchas maneras: una mediante el uso de una función de “modo protegido” para evitar que se acceda a las instancias de Redis desde redes externas. También admite la autenticación cliente-servidor (donde se configura una contraseña en el servidor y se proporciona en el cliente) y TLS en todos los canales de comunicación, como conexiones de cliente, enlaces de replicación, el protocolo de bus Redis Cluster y más.

Redis tiene muchos casos de uso que incluyen almacenamiento en caché de bases de datos, almacenamiento en caché de página completa, gestión de datos de sesiones de usuario, almacenamiento de respuestas API, sistema de mensajería de publicación/suscripción, cola de mensajes y más. Estos se pueden aplicar en juegos, aplicaciones de redes sociales, canales RSS, análisis de datos en tiempo real, recomendaciones de usuarios, etc.

2. Memcache

Memcached es un sistema de almacenamiento en caché de objetos de memoria distribuida, sencillo pero potente, gratuito y de código abierto. Es un almacén de valores clave en memoria para pequeños fragmentos de datos, como resultados de llamadas a bases de datos, llamadas a API o representación de páginas. Se ejecuta en sistemas operativos tipo Unix, incluidos Linux y OS X, y también en Microsoft Windows.

Al ser una herramienta de desarrollo, está diseñada para aumentar la velocidad de las aplicaciones web dinámicas almacenando en caché el contenido (de forma predeterminada, una caché menos utilizada recientemente (LRU)) y reduciendo así el Carga de base de datos en disco: actúa como una memoria a corto plazo para las aplicaciones. Ofrece una API para los lenguajes de programación más populares.

Memcached admite cadenas como único tipo de datos. Tiene una arquitectura cliente-servidor, donde la mitad de la lógica ocurre en el lado del cliente y la otra mitad en el lado del servidor. Es importante destacar que los clientes saben cómo elegir en qué servidor escribir o leer un elemento. Además, un cliente sabe muy bien qué hacer en caso de que no pueda conectarse a un servidor.

Aunque es un sistema de almacenamiento en caché distribuido y, por lo tanto, admite la agrupación en clústeres, los servidores de Memcached están desconectados entre sí (es decir, no se conocen entre sí). Esto significa que no hay soporte de replicación como en Redis. También entienden cómo almacenar y buscar artículos, y gestionar cuándo desalojarlos o reutilizar la memoria. Puede aumentar la memoria disponible agregando más servidores.

Admite autenticación y cifrado mediante TLS a partir de Memcached 1.5.13, pero esta característica aún se encuentra en la fase experimental.

3. Apache encendido

Apache Ignite también es un sistema de base de datos multimodelo, caché y almacén de valores clave en memoria distribuido, escalable horizontalmente, gratuito y de código abierto que proporciona potentes API de procesamiento para calcular datos distribuidos. También es una cuadrícula de datos en memoria que se puede usar en memoria o con persistencia nativa de Ignite. Se ejecuta en sistemas tipo UNIX como Linux y también Windows.

Cuenta con almacenamiento de múltiples niveles, soporte completo de SQL y transacciones ACID (atomicidad, consistencia, aislamiento, durabilidad) (compatibles solo a nivel de API de clave-valor) en múltiples nodos del clúster, procesamiento ubicado en el mismo lugar, y aprendizaje automático. Admite la integración automática con cualquier base de datos de terceros, incluido cualquier RDBMS (como MySQL, PostgreSQL, Oracle Database, etc.) o almacenes NoSQL.

Es importante tener en cuenta que, aunque Ignite funciona como un almacén de datos SQL, no es completamente una base de datos SQL. Maneja claramente restricciones e índices en comparación con las bases de datos tradicionales; admite índices primarios y secundarios, pero solo se utilizan los índices primarios para imponer la unicidad. Además, no admite restricciones de clave externa.

Ignite también respalda la seguridad al permitirle habilitar la autenticación en el servidor y proporcionar credenciales de usuario a los clientes. También hay soporte para la comunicación por socket SSL para proporcionar una conexión segura entre todos los nodos de Ignite.

Ignite tiene muchos casos de uso que incluyen sistemas de almacenamiento en caché, aceleración de cargas de trabajo del sistema, procesamiento de datos en tiempo real y análisis. También se puede utilizar como plataforma centrada en gráficos.

4. Servidor Couchbase

Couchbase Server también es una base de datos de participación orientada a documentos NoSQL, distribuida y de código abierto que almacena datos como elementos en un formato clave-valor. Funciona en Linux y otros sistemas operativos como Windows y Mac OS X. Utiliza un lenguaje de consulta orientado a documentos y rico en funciones llamado N1QL que proporciona potentes servicios de consulta e indexación para admitir operaciones de datos en submilisegundos.

Sus características notables son un rápido almacén de valores clave con caché administrado, indexadores diseñados específicamente, un potente motor de consultas, arquitectura escalable (escalamiento multidimensional), integración de big data y SQL, seguridad de pila completa y alta disponibilidad.

Couchbase Server viene con soporte nativo para clústeres de instancias múltiples, donde una herramienta de administración de clústeres coordina todas las actividades de los nodos y proporciona simplemente una interfaz para todo el clúster a los clientes. Es importante destacar que puede agregar, eliminar o reemplazar nodos según sea necesario, sin tiempo de inactividad. También admite la replicación de datos entre nodos de un clúster y la replicación selectiva de datos entre centros de datos.

Implementa seguridad a través de TLS utilizando puertos de servidor Couchbase dedicados, diferentes mecanismos de autenticación (usando credenciales o certificados), control de acceso basado en roles (para verificar que cada usuario autenticado tenga asignados roles definidos por el sistema), auditoría, registros y sesiones. .

Sus casos de uso incluyen una interfaz de programación unificada, búsqueda de texto completo, procesamiento de consultas en paralelo, gestión de documentos, indexación y mucho más. Está diseñado específicamente para proporcionar gestión de datos de baja latencia para aplicaciones web, móviles y de IoT interactivas a gran escala.

5. Hazelcast IMDG

Hazelcast IMDG (In-Memory Data Grid) es un middleware de cuadrícula de datos en memoria de código abierto, liviano, rápido y extensible, que proporciona computación en memoria distribuida elásticamente escalable. Hazelcast IMDG también se ejecuta en Linux, Windows, Mac OS X y cualquier otra plataforma con Java instalado. Admite una amplia variedad de estructuras de datos flexibles y nativas del lenguaje, como Map, Set, List, MultiMap, RingBuffer e HyperLogLog.

Hazelcast es peer-to-peer y admite escalabilidad simple, configuración de clúster (con opciones para recopilar estadísticas, monitorear a través del protocolo JMX y administrar el clúster con utilidades útiles), eventos y estructuras de datos distribuidos, división de datos. y transacciones. También es redundante ya que mantiene la copia de seguridad de cada entrada de datos de varios miembros. Para escalar su clúster, simplemente inicie otra instancia, los datos y las copias de seguridad se equilibran de manera automática y uniforme.

Proporciona una colección de API útiles para acceder a las CPU de su clúster para obtener la máxima velocidad de procesamiento. También ofrece implementaciones distribuidas de una gran cantidad de interfaces de Java fáciles de desarrollar, como Map, Queue, ExecutorService, Lock y JCache.

Sus características de seguridad incluyen miembros del clúster y autenticación de clientes y controles de control de acceso a las operaciones del cliente a través de características de seguridad basadas en JAAS. También permite interceptar conexiones de socket y operaciones remotas ejecutadas por los clientes, cifrar la comunicación a nivel de socket entre los miembros del clúster y habilitar la comunicación de socket SSL/TLS. Pero según la documentación oficial, la mayoría de estas funciones de seguridad se ofrecen en la versión Enterprise.

Su caso de uso más popular es el almacenamiento de datos y el almacenamiento en caché en memoria distribuida. Pero también se puede implementar para agrupación de sesiones web, reemplazo de NoSQL, procesamiento paralelo, mensajería sencilla y mucho más.

6. mcrouter

Mcrouter es un enrutador de protocolo Memcached gratuito y de código abierto para escalar implementaciones de Memcached, desarrollado y mantenido por Facebook. Cuenta con el protocolo Memcached ASCII, enrutamiento flexible, compatibilidad con múltiples clústeres, cachés de múltiples niveles, agrupación de conexiones, múltiples esquemas de hash, enrutamiento de prefijos, grupos replicados, seguimiento del tráfico de producción, reconfiguración en línea y monitoreo del estado del destino/conmutación por error automática.

Además, admite calentamiento de caché en frío, estadísticas enriquecidas y comandos de depuración, calidad de servicio de flujo de eliminación confiable, valores grandes y operaciones de transmisión, y viene con soporte IPv6 y SSL.

Se utiliza en Facebook e Instagram como componente central de la infraestructura de caché, para manejar casi 5 mil millones de solicitudes por segundo en su punto máximo.

7. Caché de barniz

Varnish Cache es un acelerador de aplicaciones web de código abierto, flexible, moderno y multipropósito que se encuentra entre los clientes web y un servidor de origen. Se ejecuta en todas las plataformas modernas Linux, FreeBSD y Solaris (solo x86). Es un excelente motor de almacenamiento en caché y acelerador de contenido que puede implementar frente a un servidor web como NGINX, Apache y muchos otros, para escuchar en el puerto HTTP predeterminado para recibir y reenviar solicitudes de clientes al servidor web y entregar la web. Respuesta del servidor al cliente.

Mientras actúa como intermediario entre los clientes y los servidores de origen, Varnish Cache ofrece varios beneficios, siendo el elemento el almacenamiento en caché del contenido web en la memoria para aliviar la carga del servidor web y mejorar las velocidades de entrega a los clientes.

Después de recibir una solicitud HTTP de un cliente, la reenvía al servidor web backend. Una vez que el servidor web responde, Varnish almacena en caché el contenido en la memoria y entrega la respuesta al cliente. Cuando el cliente solicita el mismo contenido, Varnish lo entregará desde la respuesta de la aplicación de aumento de caché. Si no puede entregar contenido desde el caché, la solicitud se reenvía al backend y la respuesta se almacena en caché y se entrega al cliente.

Varnish presenta VCL (Varnish Configuration Language, un lenguaje flexible específico de dominio) que se utiliza para configurar cómo se manejan las solicitudes y más, Varnish Módulos (VMODS) que son extensiones de Varnish Cache.

En cuanto a la seguridad, Varnish Cache admite el registro, la inspección de solicitudes, la aceleración, la autenticación y la autorización a través de VMODS, pero carece de soporte nativo para SSL/TLS. Puede habilitar HTTPS para Varnish Cache utilizando un proxy SSL/TLS como Hitch o NGINX.

También puede utilizar Varnish Cache como firewall de aplicaciones web, defensor de ataques DDoS, protector de enlaces directos, equilibrador de carga, punto de integración, puerta de enlace de inicio de sesión único, mecanismo de política de autenticación y autorización, solución rápida para backends inestables y enrutador de solicitudes HTTP.

8. Proxy de almacenamiento en caché de Squid

Otra solución de almacenamiento en caché y proxy gratuita, de código abierto, excelente y ampliamente utilizada para Linux es Squid. Es un software de servidor de caché proxy web rico en funciones que proporciona servicios de proxy y caché para protocolos de red populares, incluidos HTTP, HTTPS y FTP. También se ejecuta en otras plataformas UNIX y Windows.

Al igual que Varnish Cache, recibe solicitudes de clientes y las pasa a servidores backend específicos. Cuando el servidor backend responde, almacena una copia del contenido en un caché y se la pasa al cliente. Las solicitudes futuras del mismo contenido se atenderán desde la memoria caché, lo que dará como resultado una entrega de contenido más rápida al cliente. Por lo tanto, optimiza el flujo de datos entre el cliente y el servidor para mejorar el rendimiento y almacena en caché el contenido de uso frecuente para reducir el tráfico de la red y ahorrar ancho de banda.

Squid viene con características tales como distribuir la carga entre jerarquías intercomunicadas de servidores proxy, producir datos sobre los patrones de uso de la web (por ejemplo, estadísticas sobre los sitios más visitados), le permite analizar, capturar, bloquear, reemplazar o modificar los mensajes enviados por proxy.

También admite funciones de seguridad como control de acceso enriquecido, autorización y autenticación, compatibilidad con SSL/TLS y registro de actividad.

9. NGINX

NGINX (pronunciado como Engine-X) es una solución consolidada de código abierto, de alto rendimiento, con todas las funciones y muy popular para configurar una infraestructura web. Es un servidor HTTP, un servidor proxy inverso, un servidor proxy de correo y un servidor proxy TCP/UDP genérico.

NGINX ofrece capacidades básicas de almacenamiento en caché donde el contenido almacenado en caché se almacena en un caché persistente en el disco. La parte fascinante del almacenamiento en caché de contenido en NGINX es que se puede configurar para entregar contenido obsoleto desde su caché cuando no puede recuperar contenido nuevo de los servidores de origen.

NGINX ofrece una multitud de funciones de seguridad para proteger sus sistemas web, que incluyen terminación SSL, restricción del acceso con autenticación básica HTTP, autenticación basada en el resultado de la subsolicitud, autenticación JWT, restricción del acceso a recursos HTTP proxy, restricción del acceso por ubicación geográfica, y mucho más.

Por lo general, se implementa como proxy inverso, equilibrador de carga, terminador SSL/puerta de enlace de seguridad, acelerador de aplicaciones/caché de contenido y puerta de enlace API en una pila de aplicaciones. También se utiliza para la transmisión de medios.

10. Servidor de tráfico Apache

Por último, pero no menos importante, tenemos Apache Traffic Server, un servidor proxy de almacenamiento en caché de código abierto, rápido, escalable y extensible compatible con HTTP/1.1 y HTTP/2.0. Está diseñado para mejorar la eficiencia y el rendimiento de la red al almacenar en caché el contenido al que se accede con frecuencia en el borde de una red, para empresas, ISP (proveedores de servidores de Internet), proveedores troncales y más.

Admite proxy directo e inverso del tráfico HTTP/HTTPS. También se puede configurar para ejecutarse en uno o ambos modos simultáneamente. Cuenta con almacenamiento en caché persistente y API de complementos; soporte para ICP (Protocolo de caché de Internet), ESI (Edge Side Incluye); Keep-ALive y más.

En términos de seguridad, Traffic Server admite el control del acceso de los clientes al permitirle configurar clientes a los que se les permite usar el caché de proxy, terminación SSL tanto para las conexiones entre los clientes y él mismo, como entre él mismo y el servidor de origen. También admite autenticación y autorización básica a través de un complemento, registro (de cada solicitud que recibe y cada error que detecta) y monitoreo.

Traffic Server se puede utilizar como caché de proxy web, proxy de reenvío, proxy inverso, proxy transparente, equilibrador de carga o en una jerarquía de caché.

Observaciones finales

El almacenamiento en caché es una de las tecnologías de entrega de contenido web más beneficiosas y establecidas desde hace mucho tiempo y está diseñada principalmente para aumentar la velocidad de los sitios web o aplicaciones. Ayuda a reducir la carga del servidor, la latencia y el ancho de banda de la red porque los datos almacenados en caché se entregan a los clientes, lo que mejora el tiempo de respuesta de las aplicaciones y las velocidades de entrega a los clientes.

En este artículo, revisamos las principales herramientas de almacenamiento en caché de código abierto para usar en sistemas Linux. Si conoce otras herramientas de almacenamiento en caché de código abierto que no figuran aquí, compártalas con nosotros a través del formulario de comentarios a continuación. También puedes compartir tu opinión sobre este artículo con nosotros.