Pilar de eficiencia del rendimiento del enfoque Well-Architected de Amazon ElastiCache - Amazon ElastiCache

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Pilar de eficiencia del rendimiento del enfoque Well-Architected de Amazon ElastiCache

El pilar de eficiencia del rendimiento se centra en el uso eficiente de recursos informáticos y de TI. Los temas clave incluyen la selección de los tipos y tamaños de recursos correctos en función de los requisitos de la carga de trabajo, la supervisión del rendimiento y la toma de decisiones informadas para mantener la eficiencia a medida que evolucionan las necesidades empresariales.

PE 1: ¿Cómo se supervisa el rendimiento del clúster de Amazon ElastiCache?

Introducción a nivel de pregunta: Al comprender las métricas de supervisión existentes, puede identificar la utilización actual. La supervisión adecuada puede ayudar a identificar posibles obstáculos que afecten al rendimiento de su clúster.

Ventaja a nivel de pregunta: Comprender las métricas asociadas a su clúster puede ayudar a guiar las técnicas de optimización que pueden reducir la latencia y aumentar el rendimiento.

  • [Obligatorio] Pruebas de rendimiento de referencia con un subconjunto de la carga de trabajo.

    • Debe supervisar el rendimiento de la carga de trabajo real mediante mecanismos como las pruebas de carga.

    • Supervise las métricas de CloudWatch mientras ejecuta estas pruebas para comprender las métricas disponibles y establecer una referencia de rendimiento.

  • [Lo mejor] En el caso de las cargas de trabajo de ElastiCache para Redis, cambie el nombre de los comandos costosos desde el punto de vista computacional, como KEYS, para limitar la capacidad de los usuarios de ejecutar comandos de bloqueo en los clústeres de producción.

    • Las cargas de trabajo de ElastiCache para Redis que ejecutan el motor 6.x pueden aprovechar el control de acceso basado en roles para restringir determinados comandos. El acceso a los comandos se puede controlar con la creación de usuarios y grupos de usuarios con la consola o la CLI de AWS y con la asociación de los grupos de usuarios a un clúster de ElastiCache para Redis. En Redis 6, cuando el RBAC está habilitado, es posible usar “-@dangerous”, lo que no permitirá comandos costosos, como KEYS, MONITOR, SORT, etc., para ese usuario.

    • En la versión 5.x del motor, cambie el nombre de los comandos mediante el parámetro rename-commands del grupo de parámetros del clúster de Amazon ElastiCache para Redis.

  • [Mejor] Analice las consultas lentas y busque técnicas de optimización.

    • En las cargas de trabajo de ElastiCache para Redis, obtenga más información sobre sus consultas analizando el registro lento. Por ejemplo, puede utilizar el siguiente comando, redis-cli slowlog get 10, para mostrar los últimos 10 comandos que superaron los umbrales de latencia (10 segundos de forma predeterminada).

    • Algunas consultas se pueden realizar de forma más eficiente mediante estructuras de datos complejas de ElastiCache para Redis. Por ejemplo, en el caso de las búsquedas de rangos de estilos numéricos, una aplicación puede implementar índices numéricos simples con conjuntos ordenados. La administración de estos índices puede reducir los escaneos realizados en el conjunto de datos y devolver los datos con una mayor eficiencia de rendimiento.

    • Para las cargas de trabajo de ElastiCache para Redis, redis-benchmark proporciona una interfaz sencilla para probar el rendimiento de diferentes comandos mediante entradas definidas por el usuario, como la cantidad de clientes y el tamaño de los datos.

    • Dado que Memcached solo admite comandos simples a nivel de clave, considere la posibilidad de crear claves adicionales como índices para evitar iterar a través del espacio de claves para atender las consultas de los clientes.

  • [Recursos]:

PE 2: ¿Cómo se distribuye el trabajo entre los nodos del clúster de ElastiCache?

Introducción a nivel de pregunta: La forma en que la aplicación se conecta a los nodos de Amazon ElastiCache puede influir en el rendimiento y la escalabilidad del clúster.

Ventaja a nivel de pregunta: Al utilizar de forma adecuado los nodos disponibles en el clúster garantizará que el trabajo se distribuya entre los recursos disponibles. Las siguientes técnicas también ayudan a evitar que haya recursos inactivos.

  • [Obligatorio] Haga que los clientes se conecten al punto de conexión de ElastiCache adecuado.

    • Amazon ElastiCache para Redis implementa diferentes puntos de conexión en función del modo de clúster en uso. Si el modo de clúster está habilitado, ElastiCache proporcionará un punto de conexión de configuración. Para el modo de clúster deshabilitado, ElastiCache proporciona un punto de conexión principal, que normalmente se usa para escritura, y un punto de conexión de lectura para equilibrar las lecturas entre las réplicas. La implementación correcta de estos puntos de conexión resultará en un mejor rendimiento y en operaciones de escalado más sencillas. Evite conectarse a puntos de conexión de nodos individuales a menos que haya un requisito específico para hacerlo.

    • Para los clústeres de Memcached de varios nodos, ElastiCache proporciona un punto de conexión de configuración que permite la detección automática. Se recomienda utilizar un algoritmo de hash para distribuir el trabajo de manera uniforme entre los nodos de caché. Muchas bibliotecas cliente de Memcached implementan un hash coherente. Consulte la documentación de la biblioteca que va a utilizar para ver si admite el uso consistente de hash y saber cómo implementarlo. Encontrará más información sobre la implementación de estas funciones aquí.

  • [Mejor] Implemente una estrategia para identificar y corregir las teclas de acceso rápido de su carga de trabajo.

    • Tenga en cuenta el impacto de las estructuras de datos multidimensionales de Redis, como listas, flujos, conjuntos, etc. Estas estructuras de datos se almacenan en claves Redis únicas, que residen en un solo nodo. Una clave multidimensional muy grande tiene el potencial de utilizar más capacidad de red y memoria que otros tipos de datos y puede provocar un uso desproporcionado de ese nodo. Si es posible, diseñe la carga de trabajo de modo que distribuya el acceso a los datos entre varias claves discretas.

    • Las teclas de acceso rápido de la carga de trabajo pueden influir en el rendimiento del nodo en uso. Para las cargas de trabajo de ElastiCache para Redis, puede detectar las teclas de acceso rápido mediante redis-cli --hotkeys si existe una política de memoria máxima de LFU.

    • Considere la posibilidad de replicar las teclas de acceso rápido en varios nodos para distribuir el acceso a ellas de manera más uniforme. Este enfoque requiere que el cliente escriba en varios nodos principales (el nodo Redis en sí no proporcionará esta funcionalidad) y mantenga una lista de nombres de claves de la que leer, además del nombre de la clave original.

    • La versión 6 de ElastiCache para Redis admite el almacenamiento en caché del cliente asistido por el servidor. Esto permite que las aplicaciones esperen a que se modifique una clave antes de volver a realizar llamadas de red a ElastiCache.

  • [Recursos]:

PE 3: En el caso del almacenamiento en caché de las cargas de trabajo, ¿cómo se realiza el seguimiento de la eficacia y el rendimiento de la memoria caché y se informa al respecto?

Introducción a nivel de pregunta: El almacenamiento en caché es una carga de trabajo habitual en ElastiCache y es importante que comprenda cómo administrar la eficacia y el rendimiento de la memoria caché.

Ventaja a nivel de pregunta: Es posible que su aplicación muestre signos de un rendimiento lento. La capacidad de utilizar métricas específicas de la memoria caché para tomar una decisión sobre cómo aumentar el rendimiento de la aplicación es fundamental para la carga de trabajo de la memoria caché.

  • [Obligatorio] Mida y realice un seguimiento a lo largo del tiempo de la proporción de aciertos de la caché. La eficiencia de la memoria caché está determinada por su proporción de aciertos de la caché. La proporción de aciertos de la caché es el total de aciertos de caché dividido por el total de aciertos y errores. Cuanto más se acerque a 1 esté la proporción, más eficaz será la memoria caché. Una baja proporción de aciertos de caché se debe al volumen de errores de caché. Los errores de caché se producen cuando la clave solicitada no se encuentra en la memoria caché. Una clave no está en la memoria caché porque ha sido expulsada o eliminada, ha caducado o no ha existido nunca. Comprenda por qué las claves no están en la memoria caché y desarrolle las estrategias adecuadas para tenerlas en la memoria caché.

    [Recursos]:

  • [Obligatorio] Mida y recopile el rendimiento de la caché de su aplicación junto con los valores de latencia y uso de la CPU para saber si necesita realizar ajustes en el tiempo de vida o en otros componentes de la aplicación. ElastiCache proporciona un conjunto de métricas de CloudWatch de las latencias agregadas para cada estructura de datos. Estas métricas de latencia se calculan mediante la estadística commandstats del comando INFO de ElastiCache para Redis y no incluyen el tiempo de red ni de E/S. Se trata solo del tiempo que utiliza ElastiCache para Redis para procesar las operaciones.

    [Recursos]:

  • [Lo mejor] Elija la estrategia de almacenamiento en caché adecuada para sus necesidades. Una baja proporción de aciertos de caché se debe al volumen de errores de caché. Si su carga de trabajo está diseñada para tener un bajo volumen de errores de caché (como comunicación en tiempo real), es mejor revisar las estrategias de almacenamiento en caché y aplicar las resoluciones más adecuadas para la carga de trabajo, como la instrumentación de consultas para medir la memoria y el rendimiento. Las estrategias reales que implemente para completar y mantener su caché dependen del tipo de datos que sus clientes necesiten almacenar en la caché, así como de los patrones de acceso a dichos datos. Por ejemplo, es poco probable que utilice la misma estrategia tanto para las recomendaciones personalizadas en una aplicación de streaming como para las noticias más populares.

    [Recursos]:

PE 4: ¿Cómo optimiza la carga de trabajo el uso de los recursos y las conexiones de red?

Introducción a nivel de pregunta: Muchos clientes de aplicaciones admiten ElastiCache para Redis y Memcached, y las implementaciones pueden variar. Debe comprender la administración de redes y conexiones implementada para analizar el posible impacto en el rendimiento.

Ventaja a nivel de pregunta: El uso eficiente de los recursos de red puede mejorar la eficiencia del rendimiento de su clúster. Las siguientes recomendaciones pueden reducir las demandas de red y mejorar la latencia y el rendimiento del clúster.

  • [Obligatorio] Gestione de forma proactiva las conexiones a su clúster de ElastiCache.

    • La agrupación de conexiones en la aplicación reduce la sobrecarga del clúster que se crea al abrir y cerrar conexiones. Supervise el comportamiento de la conexión en Amazon CloudWatch mediante CurrConnections y NewConnections.

    • Cierre correctamente las conexiones del cliente cuando corresponda para evitar fugas de conexiones. Las estrategias de administración de conexiones incluyen cerrar correctamente las conexiones que no están en uso y establecer tiempos de espera de conexión.

    • Para las cargas de trabajo de Memcached, hay una cantidad configurable de memoria reservada para gestionar las conexiones denominada memcached_connections_overhead.

  • [Mejor] Comprima objetos grandes para reducir la memoria y mejorar el rendimiento de la red.

    • La compresión de datos puede reducir la cantidad de rendimiento de red requerida (Gbps), pero aumenta la cantidad de trabajo de la aplicación para comprimir y descomprimir datos.

    • La compresión también reduce la cantidad de memoria que consumen las claves

    • En función de las necesidades de su aplicación, considere las ventajas y desventajas entre la relación y la velocidad de compresión.

  • [Recursos]:

PE 5: ¿Cómo se gestiona la eliminación o la expulsión de claves?

Introducción a nivel de pregunta: Las cargas de trabajo tienen diferentes requisitos, y un comportamiento esperado cuando un nodo del clúster se acerca a los límites de consumo de memoria. Amazon ElastiCache para Redis cuenta con diferentes políticas para gestionar estas situaciones.

Ventaja a nivel de pregunta: La gestión adecuada de la memoria disponible y la comprensión de las políticas de expulsión ayudarán a garantizar el conocimiento del comportamiento del clúster cuando se superen los límites de memoria de las instancias.

  • [Obligatorio] Analice el acceso a los datos para evaluar qué política aplicar. Identifique una política de memoria máxima adecuada para controlar si se realizan expulsiones en el clúster y cómo se hacen.

    • La expulsión tiene lugar cuando se consume la cantidad máxima de memoria del clúster y existe una política que permite la expulsión. El comportamiento del clúster en esta situación depende de la política de expulsión especificada. Esta política se puede administrar mediante maxmemory-policy en el grupo de parámetros del clúster de ElastiCache para Redis.

    • La política predeterminada volatile-lru libera memoria al expulsar las claves con una fecha de caducidad establecida (valor de TTL). Las políticas menos usadas frecuentemente (LFU) y menos usadas recientemente (LRU) eliminan las claves en función del uso.

    • Para las cargas de trabajo de Memcached, existe una política LRU predeterminada que controla las expulsiones en cada nodo. Es posible supervisar el número de expulsiones de su clúster de Amazon ElastiCache mediante la métrica de expulsiones de Amazon CloudWatch.

  • [Mejor] Estandarice el comportamiento de eliminación para controlar el impacto en el rendimiento de su clúster y evitar atascos inesperados en el rendimiento.

    • En el caso de las cargas de trabajo de ElastiCache para Redis, al eliminar claves del clúster de forma explícita, UNLINK es como DEL: elimina claves especificadas. Sin embargo, el comando realiza la recuperación de memoria real en un subproceso diferente, por lo que no es de bloqueo, mientras que DEL sí. La eliminación real se realizará más adelante de forma asincrónica.

    • Para las cargas de trabajo de ElastiCache para Redis 6.x, el comportamiento del comando DEL se puede modificar en el grupo de parámetros mediante el parámetro lazyfree-lazy-user-del.

  • [Recursos]:

PE 6: ¿Cómo se modelan los datos y se interactúa con ellos en ElastiCache?

Introducción a nivel de pregunta: ElastiCache depende en gran medida de las aplicaciones en las estructuras de datos y modelo de datos utilizados, pero también debe tener en cuenta el almacén de datos subyacente (si está presente). Conozca las estructuras de datos disponibles de ElastiCache para Redis y asegúrese de utilizar las estructuras de datos más adecuadas para sus necesidades.

Ventaja a nivel de pregunta: El modelado de datos en ElastiCache tiene varias capas, que incluyen los casos de uso de la aplicación, los tipos de datos y las relaciones entre los elementos de datos. Además, cada comando y tipo de datos de ElastiCache para Redis tiene sus propias firmas de rendimiento bien documentadas.

  • [Lo mejor] Una práctica recomendada es reducir la sobrescritura involuntaria de datos. Utilice una convención de nomenclatura que minimice la superposición de nombres de clave. La nomenclatura convencional de las estructuras de datos utiliza un método jerárquico como: APPNAME:CONTEXT:ID, por ejemplo ORDER-APP:CUSTOMER:123.

    [Recursos]:

  • [Lo mejor] Los comandos de ElastiCache para Redis tienen una complejidad temporal definida por la notación Big O. Esta complejidad temporal de un comando es una representación algorítmica/matemática de su impacto. Al introducir un nuevo tipo de datos en su aplicación, debe revisar detenidamente la complejidad temporal de los comandos relacionados. Los comandos con una complejidad temporal de O(1) son constantes y no dependen de la cantidad de datos de entrada.; sin embargo, los comandos con una complejidad temporal de O(N) son lineales y están sujetos a la cantidad de datos de entrada. Debido a que ElastiCache para Redis se ha diseñado con un único subproceso, un gran volumen de operaciones de alta complejidad temporal se traducirá en un menor rendimiento y en posibles tiempos de espera de operación.

    [Recursos]:

  • [Lo mejor] Utilice las API para obtener visibilidad de la GUI en el modelo de datos de su clúster.

    [Recursos]:

PE 7: ¿Cómo se registran los comandos de ejecución lenta en el clúster de Amazon ElastiCache?

Introducción a nivel de pregunta: Ventajas del ajuste del rendimiento mediante la captura, la agregación y la notificación de comandos de ejecución prolongada. Si comprende cuánto tiempo tardan en ejecutarse los comandos, puede determinar qué comandos tienen un rendimiento deficiente y qué comandos impiden que el motor funcione de manera óptima. Amazon ElastiCache para Redis también tiene la capacidad de enviar esta información a Amazon CloudWatch o Amazon Kinesis Data Firehose.

Ventaja a nivel de pregunta: El registro en una ubicación permanente dedicada y la provisión de eventos de notificación para los comandos lentos puede ayudar a realizar un análisis detallado del rendimiento y se puede utilizar para activar eventos automatizados.

  • [Obligatorio] Amazon ElastiCache para Redis ejecuta la versión del motor 6.0 o posterior, un grupo de parámetros correctamente configurado y el registro SLOWLOG habilitado en el clúster.

    • Los parámetros requeridos solo están disponibles cuando la compatibilidad de la versión del motor está configurada para la versión 6.0 o superior de Redis.

    • El registro SLOWLOG se produce cuando el tiempo de ejecución de un comando en el servidor supera un valor especificado. El comportamiento del clúster depende de los parámetros del grupo de parámetros asociado, que son slowlog-log-slower-than y slowlog-max-len.

    • Los cambios surten efecto inmediatamente.

  • [Lo mejor] Aproveche las capacidades de CloudWatch o Kinesis Data Firehose.

    • Utilice las capacidades de filtrado y alarma de CloudWatch, CloudWatch Logs Insights y Amazon Simple Notification Services para supervisar el rendimiento y notificar eventos.

    • Utilice las capacidades de transmisión de Kinesis Data Firehose para archivar los registros SLOWLOG en un almacenamiento permanente o para activar el ajuste automático de los parámetros del clúster.

    • Determine si el formato JSON o TEXTO sin formato se adapta mejor a sus necesidades.

    • Proporcione permisos de IAM para publicar en CloudWatch o Kinesis Data Firehose.

  • [Mejor] Configure slowlog-log-slower-than con un valor distinto al predeterminado.

    • Este parámetro determina cuánto tiempo puede ejecutarse un comando en el motor Redis antes de que se registre como un comando de ejecución lenta. El valor predeterminado es 10 000 microsegundos (10 milisegundos). El valor predeterminado puede ser demasiado alto para algunas cargas de trabajo.

    • Determine un valor que sea más adecuado para su carga de trabajo en función de las necesidades de la aplicación y los resultados de las pruebas; sin embargo, un valor demasiado bajo puede generar un exceso de datos.

  • [Mejor] Deje slowlog-max-len como valor predeterminado.

    • Este parámetro determina el límite superior del número de comandos de ejecución lenta que se capturan en la memoria de Redis en un momento dado. Un valor de 0 desactiva de manera efectiva la captura. Cuanto más alto sea el valor, más entradas se almacenarán en la memoria, lo que reducirá la posibilidad de que se expulse información importante antes de poder revisarla. El valor predeterminado es 128.

    • El valor predeterminado es adecuado para la mayoría de las cargas de trabajo. Si es necesario analizar los datos en un período de tiempo ampliado desde redis-cli mediante el comando SLOWLOG, considere aumentar este valor. Esto permite que queden más comandos en la memoria de Redis.

      Si emite datos de SLOWLOG a CloudWatch Logs o Kinesis Data Firehose, los datos se conservarán y se podrán analizar fuera del sistema ElastiCache, lo que reducirá la necesidad de almacenar grandes cantidades de comandos de ejecución lenta en la memoria de Redis.

  • [Recursos]:

PE8: ¿Cómo ayuda el escalado automático a aumentar el rendimiento del clúster de ElastiCache?

Introducción a nivel de pregunta: Al implementar la característica de escalado automático de Redis, los componentes de ElastiCache pueden ajustarse con el tiempo para que aumenten o disminuyan automáticamente las particiones o réplicas deseadas. Esto se puede hacer mediante la implementación de políticas de escalado programado o de seguimiento de objetivos.

Ventaja a nivel de pregunta: Comprender y planificar los picos de carga de trabajo puede garantizar un mejor rendimiento del almacenamiento en caché y la continuidad empresarial. El escalado automático de ElastiCache para Redis supervisa continuamente el uso de la CPU/memoria a fin de garantizar que el clúster funcione a los niveles de rendimiento deseados.

  • [Obligatorio] Al lanzar un clúster para ElastiCache para Redis:

    1. Asegúrese de que el modo Clúster esté habilitado.

    2. Asegúrese de que la instancia pertenezca a una familia de un cierto tipo y tamaño que admita el escalado automático.

    3. Asegúrese de que el clúster no se ejecute en almacenes de datos globales, Outposts o zonas locales.

    [Recursos]:

  • [Lo mejor] Identifique si su carga de trabajo requiere mucha lectura o escritura para definir la política de escalado. Para obtener el mejor rendimiento, utilice solo una métrica de seguimiento. Se recomienda evitar tener varias políticas para cada dimensión, ya que las políticas de escalado automático se escalan horizontalmente de forma gradual cuando se alcanza el objetivo, pero solo se reducen horizontalmente cuando todas las políticas de seguimiento de objetivos están listas para reducirse horizontalmente.

    [Recursos]:

  • [Lo mejor] Supervisar el rendimiento a lo largo del tiempo puede ayudar a detectar cambios en la carga de trabajo que pasarían desapercibidos si se hiciera en un momento determinado. Puede analizar las métricas correspondientes de CloudWatch para la utilización del clúster durante un período de cuatro semanas a fin de determinar el umbral del valor objetivo. Si aún no está seguro de qué valor elegir, se recomienda comenzar con el valor mínimo admitido de métrica predefinida.

    [Recursos]:

  • [Mejor] Se recomienda probar la aplicación con las cargas de trabajo mínimas y máximas esperadas para identificar la cantidad exacta de particiones o réplicas que necesita el clúster a fin de desarrollar políticas de escalado y mitigar los problemas de disponibilidad.

    [Recursos]: