Construcción de base de datos en memoria durable con Amazon MemoryDB for Redis - Integración de caché y almacén de datos primario
Se explica la operación de base de datos en memoria compatible con Redis con MemoryDB, el mecanismo de durabilidad y la diferenciación con ElastiCache.
Descripcion general de MemoryDB
MemoryDB for Redis es un servicio de base de datos en memoria con durabilidad compatible con Redis 7.x, capaz de almacenar datos en hasta 500 nodos. Mientras ElastiCache for Redis se especializa en caché (datos volátiles), MemoryDB persiste las escrituras en un log de transacciones Multi-AZ y se puede usar como almacén de datos primario. La latencia de lectura es del orden de microsegundos y la de escritura de milisegundos de un solo digito. En modo cluster, escala agregando shards, cada uno con un primario y réplicas.
Mecanismo de durabilidad
MemoryDB registra sincrónicamente las escrituras en un log de transacciones Multi-AZ, por lo que los datos escritos se pueden recuperar tras un fallo de nodo. Las operaciones de escritura devuelven ACK al cliente solo después de completar la persistencia en el log de transacciones, lo que proporciona consistencia fuerte (strong consistency). En el reinicio de nodo, los datos se restauran desde el log de transacciones. La replicacion a nodos replica es asincrona, por lo que las lecturas desde replicas son eventualmente consistentes. Además de los snapshots automáticos diarios, se pueden tomar snapshots manuales y usarlos para la recuperación.
Casos de uso y diferenciacion con ElastiCache
MemoryDB es adecuado para almacenes de sesion, perfiles de usuario, tablas de clasificacion y analisis en tiempo real donde se necesita velocidad en memoria sin perder datos. Soporta todas las estructuras de datos de Redis (Sorted Set, Hash, Stream) y se posiciona como capa de datos complementaria a DynamoDB o RDS. ElastiCache es la opcion cuando la perdida de datos es aceptable, como cache frontal de RDS o DynamoDB. ElastiCache utiliza replicacion asincrona, por lo que puede perder escrituras recientes durante failover. Criterio de seleccion: si los datos pueden re-obtenerse de la fuente (como RDS), elija ElastiCache; si los datos en Redis son la unica fuente de verdad, elija MemoryDB. Si el único objetivo es la caché, elija ElastiCache.
Estructuras de datos Redis y procesamiento del lado del servidor
MemoryDB soporta el conjunto de comandos de Redis 7.x, incluyendo Strings, Hashes, Lists, Sets, Sorted Sets, Streams, HyperLogLog e índices Geospatial. Los Sorted Sets se pueden usar para implementar tablas de clasificación y timelines con recuperación de ranking en O(log N). Los Streams sirven como logs de eventos o colas de mensajes con soporte de consumer groups para procesamiento paralelo. Los scripts Lua permiten procesamiento atomico del lado del servidor, Redis Functions permite registrar logica reutilizable, Pub/Sub proporciona notificaciones en tiempo real y las transacciones (MULTI/EXEC) soportan operaciones atomicas. ACL v2 permite control de acceso granular por usuario y por comando, con capacidad de separar permisos de lectura y escritura por patron de clave. En modo cluster, los datos se distribuyen basandose en hash slots siguiendo el protocolo Redis Cluster, y los clientes se conectan automaticamente al shard correcto via redirecciones MOVED. Claves grandes (varios MB o más) concentradas en un solo shard pueden causar hot spots, por lo que se diseña el modelo de datos con tamaños de clave uniformes.
Mejores practicas de diseno y consideraciones
Con MemoryDB se diseña de modo que el tamaño de datos se ajuste a la memoria del nodo. Una utilización de memoria alta causa swap o evicción que degrada el rendimiento, por lo que se planifica la capacidad con margen en la utilización de memoria. Los cambios en el numero de shards (resharding) se ejecutan en linea, pero la latencia de escritura aumenta temporalmente durante la redistribucion de datos. Se soporta cifrado en reposo (KMS) y en transito (TLS), y las ACLs proporcionan control de autorizacion a nivel de comando Redis. La arquitectura basica coloca MemoryDB en una VPC con security groups que restringen las conexiones de origen. Una configuración Multi-AZ proporciona alta disponibilidad.
Precios y consideraciones de limites
Los nodos de MemoryDB se cobran por hora y el precio varía según el tipo de nodo. Es más caro que el nodo equivalente de ElastiCache, pero incluye el almacenamiento del log de transacciones para durabilidad. La transferencia de datos dentro de la region es gratuita, y entre regiones se aplican las tarifas estandar. El almacenamiento de snapshots más allá de la capa gratuita se cobra según la cantidad almacenada. Los nodos reservados (1 año/3 años) pueden reducir costos. El comportamiento de evicción se controla configurando maxmemory-policy en el parameter group.
Resumen
MemoryDB es una base de datos en memoria compatible con Redis y con durabilidad. Logra la persistencia de escrituras con log de transacciones Multi-AZ y, mientras ElastiCache es para uso de cache, se puede usar como base de datos primaria. Con latencia de lectura de microsegundos, es adecuado como capa de datos para almacenes de sesión, tablas de clasificación y análisis en tiempo real. El principio clave de diseño es la separación: ElastiCache para caché, MemoryDB cuando los datos almacenados son la única fuente de verdad.
Referencias (recursos oficiales de AWS)
Las fuentes primarias de esta página son el sitio web y la documentación oficiales de AWS. Consulta las páginas oficiales siguientes para conocer las especificaciones y los precios más recientes.
- Amazon MemoryDB for Redis (página oficial)
- Amazon ElastiCache (página oficial)
- AWS KMS (página oficial)
- Documentación de AWS (oficial)
Si esta página y la documentación oficial difieren, prevalece la documentación oficial.