Mejores prácticas para Databases for Redis
Dedique un tiempo a revisar las siguientes prácticas recomendadas si utiliza Databases for Redis.
¿Qué es Databases for Redis?
Databases for Redis es un servicio OSS Redis gestionado que se ofrece en IBM Cloud. Es un almacén de estructura de datos en memoria que se utiliza como base de datos, memoria caché, intermediario de mensajes y motor de modalidad continua. A diferencia de las bases de datos tradicionales, que almacenan datos en disco, Redis almacena datos en memoria (RAM) habilitando la latencia baja. Los datos son efímeros, lo que permite a Databases for Redis ofrecer un rendimiento superior y un alto rendimiento. También puede configurar Redis para almacenar datos de forma persistente en el disco comparando el rendimiento con la disponibilidad de datos, porque esto se consigue habilitando la sincronización de AOF (Append Only File) con las instantáneas RBD.
Las instantáneas RBD están habilitadas para copia de seguridad y alta disponibilidad, incluso si la persistencia está inhabilitada.
Prácticas recomendadas para la planificación de capacidad de instancia
Debe planificar la capacidad de instancia de Databases for Redis en función del diseño de la aplicación y la arquitectura, conocer los requisitos de hardware y prepararse para el aumento o disminución de la demanda. Las recomendaciones siguientes pueden ayudarle a optimizar el tamaño de la instancia.
- Comprenda sus datos
- Se espera que conozca los tipos de datos, el tamaño y el tiempo de vida de los datos. Esto le ayuda a comprender la duración de los datos disponibles en memoria antes de que se supriman o se muevan.
- Estimar requisitos de memoria
- Es importante calcular los requisitos de memoria. Recuerde tener en cuenta no solo los datos, sino también la memoria necesaria para la réplica, las conexiones de cliente, los almacenamientos intermedios de memoria máxima y los metadatos de Redis.
- Comprender las cargas de lectura/escritura
- La identificación de las cargas de lectura/escritura le ayuda a prepararse para las necesidades de escalado automático, a realizar las solicitudes de la aplicación y a mantener la sincronización maestro-seguidor.
- Comprenda sus necesidades de IOPS
- Las operaciones de entrada/salida por segundo son un factor clave que debe tener en cuenta en la planificación de capacidad de instancia. Databases for Redis toma instantáneas de RDB periódicamente de acuerdo con la configuración predeterminada de Redis, que interactúa con el disco incluso si la instancia está configurada para la memoria caché. Es posible que las bases de datos muy ocupadas superen las IOPS para el tamaño del disco, y aumentar el tamaño del disco puede aliviar un cuello de botella en el rendimiento.
- Planificar redundancia y reconexiones
- Existen múltiples componentes que están involucrados en el cómputo en la nube, lo que puede causar fallas momentáneas. Sin embargo, en IBM® Cloud Databases, ofrecemos una alta disponibilidad del 99.99% y le animamos a planificar los errores de conexión en el diseño de la aplicación utilizando la lógica de reintento y reconexión.
- Considerar ancho de banda de red
- El ancho de banda de red puede afectar significativamente al rendimiento de Databases for Redis. Asegúrese de que tiene suficiente ancho de banda de red para manejar las cargas de base de datos.
- Seguimiento y ajustes
- Nuestra recomendación es supervisar el rendimiento y el uso de su instancia de Databases for Redis utilizando IBM Cloud® Monitoring para determinar el patrón de uso evolutivo de su instancia de base de datos y cambiar el tamaño según sea necesario.
Prácticas recomendadas para el rendimiento
- Inhabilitar persistencia
- De forma predeterminada, Databases for Redis tiene la persistencia habilitada. Esto escribe la sincronización AOF y aumenta la carga de IOPS. Si la aplicación no necesita que persistan los datos, inhabilítelo utilizando el mandato
Set appendonly = no
. Para obtener más información, consulte
Poner un ejemplo de caché. - RAM frente a núcleos
- Redis es una base de datos en memoria de una sola hebra. Inherentemente, necesita más RAM que CORES, a diferencia de otras bases de datos persistentes. Aunque es de una sola hebra, utiliza la 'multiplexación' para procesar las solicitudes, pero todas las solicitudes las procesa una hebra. Sin embargo, se necesitan otros núcleos para mantener la integridad y estabilidad de la base de datos para sus procesos internos. Se recomienda centrarse más en la RAM y el disco (para IOPS) para Databases for Redis. Para obtener más información, consulte Prácticas recomendadas para la planificación de capacidad de instancia.
- Reducción de memoria
- Se recomienda tener cuidado al reducir la memoria de la instancia de Databases for Redis. Puesto que Redis es una base de datos en memoria, su memoria contiene los datos para fines de almacenamiento, proceso y recuperación. La reducción drástica de la memoria puede detener temporalmente la instancia que devuelve un error, porque no hay suficiente espacio disponible para completar las operaciones. Por ejemplo, considere 20 GB de datos que intentan cargarse en 15 GB de memoria, este caso está destinado a devolver un error.
- Evitar mandatos costosos
- Determinados mandatos en Redis son costosos de ejecutar. Por ejemplo, el mandato KEYS, que se utiliza con frecuencia, pero debe evitarse. En su lugar, utilice el mandato SCAN, que dispersa la iteración en muchas llamadas y no enlaza todo el servidor a la vez.
- Elija una política de desalojo
- Debe elegir una política de desalojo que funcione para la aplicación. De forma predeterminada, los despliegues están configurados con una política
noeviction
. Utilice políticas de desalojo comoallkeys-lru
,volatile-lru
,allkeys-random
,volatile-random
,volatile-ttl
. Para obtener más información, consulte la política de memoria. - Establecer valores de maxmemory
- Puede ajustar el valor de
maxmemory
. Sin embargo, establezca un límite razonable, de lo contrario los datos pueden consumir toda la memoria disponible y el despliegue puede quedarse sin recursos. De forma predeterminada, lo establecemos en el 80% de la memoria disponible del nodo de datos. - Establecer políticas TTL (Time-To-Live)
- TTL es una gran característica en la que las claves se suprimen de la base de datos después de un tiempo definido. Esto es muy útil si utiliza Redis una memoria caché. Sin embargo, tenga cuidado al establecer un valor muy corto o muy largo porque un valor muy corto puede crear recomputación de valores y un valor muy largo puede crear un uso de memoria innecesario. Para más información, consulte el comando TTL.
Mejores prácticas para alta disponibilidad
- Lógica de reintento y reconexión
- Los sistemas son propensos a interrupciones. Se recomienda encarecidamente que implemente la lógica de reintento y reconexión en la arquitectura de la aplicación para evitar interrupciones. Utilice IOREDIS, NODEREDIS o cualquier otro paquete de su elección para garantizar la continuidad de su aplicación.
Para obtener más información, consulte la entrada del blog Detección y gestión de errores con Redis.
Procedimientos recomendados para la supervisión
Debe supervisar LogDNA para los siguientes errores comunes y tomar medidas correctivas:
- Sincronización de AOF
- Sólo lectura disponible
- Se ha perdido la conexión con el maestro
- Para obtener instrucciones sobre cómo evitar errores, consulte ¿Cómo puedo evitar errores comunes de Databases for Redis ?.
Mejores prácticas generales
- técnica de agrupación de conexiones
- Crear o cerrar conexiones es costoso. La gestión eficiente de conexiones es importante y la agrupación de conexiones es útil para minimizar la sobrecarga asociada con la apertura y cierre de conexiones. Para más información, consulte agrupación de conexiones.
- límites de conexiones
- Utilice las conexiones de forma eficiente. Sobrecargar Databases for Redis con demasiadas conexiones devolverá errores y se enfrentará a interrupciones en la aplicación. Deje algunas conexiones disponibles, ya que algunas se reservan internamente para mantener el estado y la integridad de la base de datos. Se recomienda utilizar la agrupación de conexiones. Para más información, consulte los límites de conexión.
- Tiempos de espera de conexión
- Establecer los valores de tiempo de espera adecuados para las conexiones también es importante para evitar que los recursos se incorporeen de forma indefinida. Sin embargo, tenga cuidado al establecer tiempos de espera cortos porque esto puede llevar al abandono de la conexión y al aumento de la latencia. Alinee los tiempos de espera con las expectativas operativas de su aplicación.
- Utilizar la característica de interconexión Redis
- La interconexión de Redis es una técnica para mejorar el rendimiento emitiendo varios mandatos a la vez sin esperar la respuesta a cada mandato individual. Para obtener más información, consulte Interconexiones deRedis.
- Utilizar la característica Redis Streams
- Redis Streams es un tipo de datos que proporciona una abstracción súper rápida en memoria de un registro de sólo adición.
- Dividir datos grandes
- Se recomienda dividir los conjuntos de datos grandes en fragmentos más pequeños con más claves, es decir, dividir los datos entre varias claves.
- Planificación por lotes
- Databases for Redis está planificado para crear copias de seguridad automáticas cada día a una hora planificada. Durante este tiempo, se utilizan las IOPS de las bases de datos. Se recomienda que no ejecute sus propios trabajos por lotes en este momento.
- Configurar canales de notificación
- Se recomienda que Databases for Redis configure los ID de correo electrónico en IBM Accounts para recibir actualizaciones periódicas sobre cambios de versión, fin de vida o planificaciones de mantenimiento. También puede supervisar el icono de notificación de cuenta de IBM para recibir estas actualizaciones.
Para obtener más información, consulte la entrada del blog Best Practices for Redis on the IBM Cloud.