En esta sección se proporciona información general de cómo evaluar la configuración de escalado automático en las tablas de DynamoDB. El escalado automático de Amazon DynamoDB es una función que administra el rendimiento de las tablas y del índice secundario global (GSI) en función del tráfico de la aplicación y de la métrica de utilización objetivo. Esto garantiza que las tablas o GSI tengan la capacidad necesaria para los modelos de la aplicación.
El servicio de AWS Auto Scaling monitoreará el uso actual de la tabla y lo comparará con el valor de uso objetivo: TargetValue
. Le notificará si es el momento de aumentar o disminuir la capacidad asignada.
Temas
Entender la configuración de escalado automático
Definir el valor correcto para el uso objetivo, el paso inicial y los valores finales es una actividad que requiere la participación del equipo de operaciones. Esto le permite definir correctamente los valores en función del uso histórico de la aplicación, que se utilizará para desencadenar las políticas de AWS Auto Scaling. El objetivo de uso es el porcentaje de la capacidad total que se debe alcanzar durante un periodo de tiempo antes de que se apliquen las reglas de escalado automático.
Cuando se establece un objetivo de uso alto (un objetivo alrededor del 90 %), significa que el tráfico debe superar el 90 % durante un periodo de tiempo antes de que se active el escalado automático. No debe usar un objetivo de alta utilización a menos que la aplicación sea muy constante y no reciba picos de tráfico.
Cuando se establece una utilización muy baja (un objetivo inferior al 50 %), significa que la aplicación tendría que alcanzar el 50 % de la capacidad aprovisionada antes de desencadenar una política de escalado automático. A menos que el tráfico de la aplicación crezca a un ritmo muy agresivo, esto normalmente se traduce en capacidad no utilizada y en recursos desperdiciados.
Cómo identificar tablas con una utilización objetivo baja (<=50 %)
Puede utilizar AWS CLI o AWS Management Console para monitorear e identificar TargetValues
para las políticas de escalado automático en los recursos de DynamoDB:
-
Devuelva la lista completa de recursos mediante la ejecución del siguiente comando:
aws application-autoscaling describe-scaling-policies --service-namespace dynamodb
Este comando devolverá la lista completa de políticas de escalado automático que se emiten en cualquier recurso de DynamoDB. Si solo desea recuperar los recursos de una tabla en particular, puede agregar
–resource-id parameter
. Por ejemplo:aws application-autoscaling describe-scaling-policies --service-namespace dynamodb --resource-id "table/<table-name>”
-
Devolver solo las políticas de escalado automático para un GSI en particular mediante la ejecución del siguiente comando
aws application-autoscaling describe-scaling-policies --service-namespace dynamodb --resource-id "table/<table-name>/index/<gsi-name>”
Los valores que nos interesan para las políticas de escalado automático se destacan a continuación. Queremos asegurarnos de que el valor objetivo sea superior al 50 % para evitar un aprovisionamiento excesivo. Debería obtener un resultado similar al siguiente:
{ "ScalingPolicies": [ { "PolicyARN": "arn:aws:autoscaling:<region>:<account-id>:scalingPolicy:<uuid>:resource/dynamodb/table/<table-name>/index/<index-name>:policyName/$<full-gsi-name>-scaling-policy", "PolicyName": $<full-gsi-name>”, "ServiceNamespace": "dynamodb", "ResourceId": "table/<table-name>/index/<index-name>", "ScalableDimension": "dynamodb:index:WriteCapacityUnits", "PolicyType": "TargetTrackingScaling", "TargetTrackingScalingPolicyConfiguration": { "TargetValue": 70.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "DynamoDBWriteCapacityUtilization" } }, "Alarms": [ ... ], "CreationTime": "2022-03-04T16:23:48.641000+10:00" }, { "PolicyARN": "arn:aws:autoscaling:<region>:<account-id>:scalingPolicy:<uuid>:resource/dynamodb/table/<table-name>/index/<index-name>:policyName/$<full-gsi-name>-scaling-policy", "PolicyName":$<full-gsi-name>”, "ServiceNamespace": "dynamodb", "ResourceId": "table/<table-name>/index/<index-name>", "ScalableDimension": "dynamodb:index:ReadCapacityUnits", "PolicyType": "TargetTrackingScaling", "TargetTrackingScalingPolicyConfiguration": { "TargetValue": 70.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "DynamoDBReadCapacityUtilization" } }, "Alarms": [ ... ], "CreationTime": "2022-03-04T16:23:47.820000+10:00" } ] }
Si los valores de utilización objetivo son inferiores o iguales al 50 %, debe analizar las métricas de uso de la tabla para ver si están subaprovisionadas o sobreaprovisionadas.
Cómo abordar las cargas de trabajo con variaciones estacionales
Considere el siguiente escenario: la aplicación funciona por debajo de un valor medio mínimo la mayor parte del tiempo, pero el objetivo de uso es bajo, por lo que la aplicación puede reaccionar rápidamente ante los eventos que se producen a determinadas horas del día y usted tiene suficiente capacidad y evita que se limite. Este escenario es habitual cuando una aplicación está muy ocupada durante el horario de oficina normal (de 9:00 a 17:00), pero que luego funciona a un nivel básico fuera del horario laboral. Dado que algunos usuarios empezarán a conectarse antes de las 9:00, la aplicación utiliza este umbral bajo para aumentar rápidamente y alcanzar la capacidad requerida durante las horas pico.
Este escenario podría ser así:
-
Entre las 17:00 y las 9:00, las unidades de
ConsumedWriteCapacity
permanecen entre 90 y 100 -
Los usuarios comienzan a conectarse a la aplicación antes de las 9:00 y la capacidad de las unidades aumenta considerablemente (el valor máximo que ha visto es de 1500 WCU)
-
Por término medio, el uso de la aplicación varía entre 800 y 1200 durante las horas de trabajo
Si se encuentra con el escenario anterior, considere la posibilidad de utilizar el escalado automático programado, en el que la tabla aún podría tener configurada una regla de escalado automático de aplicaciones, pero con una utilización objetivo menos agresiva que solo aprovisione la capacidad adicional en los intervalos específicos que necesite.
Puede usar la AWS CLI para ejecutar los siguientes pasos para crear una regla de escalado automático programada que se ejecutará en función de la hora del día y el día de la semana.
-
Registre la tabla de DynamoDB o GSI como objetivo escalable con Application Auto Scaling. Un destino escalable es un recurso que Application Auto Scaling puede escalar horizontalmente o escalar verticalmente.
aws application-autoscaling register-scalable-target \ --service-namespace dynamodb \ --scalable-dimension dynamodb:table:WriteCapacityUnits \ --resource-id table/<table-name> \ --min-capacity 90 \ --max-capacity 1500
-
Configure acciones programadas según los requisitos.
Necesitaremos dos reglas para cubrir el escenario: una para escalar verticalmente y otra para reducir verticalmente. La primera regla para escalar verticalmente la acción programada:
aws application-autoscaling put-scheduled-action \ --service-namespace dynamodb \ --scalable-dimension dynamodb:table:WriteCapacityUnits \ --resource-id table/<table-name> \ --scheduled-action-name my-8-5-scheduled-action \ --scalable-target-action MinCapacity=800,MaxCapacity=1500 \ --schedule "cron(45 8 ? * MON-FRI *)" \ --timezone "Australia/Brisbane"
La segunda regla para reducir verticalmente la acción programada:
aws application-autoscaling put-scheduled-action \ --service-namespace dynamodb \ --scalable-dimension dynamodb:table:WriteCapacityUnits \ --resource-id table/<table-name> \ --scheduled-action-name my-5-8-scheduled-down-action \ --scalable-target-action MinCapacity=90,MaxCapacity=1500 \ --schedule "cron(15 17 ? * MON-FRI *)" \ --timezone "Australia/Brisbane"
-
Ejecute el siguiente comando para validar que ambas reglas se han activado:
aws application-autoscaling describe-scheduled-actions --service-namespace dynamodb
Debería obtener un resultado como este:
{ "ScheduledActions": [ { "ScheduledActionName": "my-5-8-scheduled-down-action", "ScheduledActionARN": "arn:aws:autoscaling:<region>:<account>:scheduledAction:<uuid>:resource/dynamodb/table/<table-name>:scheduledActionName/my-5-8-scheduled-down-action", "ServiceNamespace": "dynamodb", "Schedule": "cron(15 17 ? * MON-FRI *)", "Timezone": "Australia/Brisbane", "ResourceId": "table/<table-name>", "ScalableDimension": "dynamodb:table:WriteCapacityUnits", "ScalableTargetAction": { "MinCapacity": 90, "MaxCapacity": 1500 }, "CreationTime": "2022-03-15T17:30:25.100000+10:00" }, { "ScheduledActionName": "my-8-5-scheduled-action", "ScheduledActionARN": "arn:aws:autoscaling:<region>:<account>:scheduledAction:<uuid>:resource/dynamodb/table/<table-name>:scheduledActionName/my-8-5-scheduled-action", "ServiceNamespace": "dynamodb", "Schedule": "cron(45 8 ? * MON-FRI *)", "Timezone": "Australia/Brisbane", "ResourceId": "table/<table-name>", "ScalableDimension": "dynamodb:table:WriteCapacityUnits", "ScalableTargetAction": { "MinCapacity": 800, "MaxCapacity": 1500 }, "CreationTime": "2022-03-15T17:28:57.816000+10:00" } ] }
La siguiente imagen muestra un ejemplo de carga de trabajo que siempre mantiene el objetivo de utilización del 70 %. Observe cómo las reglas de escalado automático se siguen aplicando y el rendimiento no se reducirá.

Al ampliar el zoom, podemos ver que ha habido un aumento en la aplicación que ha desencadenado el umbral de escalado automático del 70 %, lo que obligó a que el escalado automático entrara en vigor y proporcionara la capacidad adicional necesaria para la tabla. La acción de escalado automático programada afectará a los valores máximo y mínimo y es su responsabilidad configurarlos.


Cómo abordar cargas de trabajo con picos con patrones desconocidos
En este escenario, la aplicación utiliza un objetivo de uso muy bajo porque aún no conoce los patrones de la aplicación y quiere asegurarse de que la carga de trabajo no esté limitada.
Considere utilizar el modo de capacidad bajo demanda en su lugar. Las tablas bajo demanda son perfectas para cargas de trabajo con picos en los que no se conocen los patrones de tráfico. Con el modo de capacidad bajo demanda, usted paga por solicitud por las lecturas y escrituras de datos que la aplicación realiza en las tablas. No necesita especificar el rendimiento de lectura y escritura que espera de la aplicación, ya que DynamoDB se adapta de forma instantánea a las cargas de trabajo a medida que aumentan o disminuyen.
Cómo abordar las cargas de trabajo con aplicaciones enlazadas
En este escenario, la aplicación depende de otros sistemas, como los escenarios de procesamiento por lotes, en los que se pueden producir grandes picos de tráfico en función de los eventos de la lógica de la aplicación.
Considere desarrollar una lógica de escalado automática personalizada que reaccione ante aquellos eventos en los que pueda aumentar la capacidad de la tabla y TargetValues
en función de las necesidades específicas. Podría aprovechar Amazon EventBridge y utilizar una combinación de servicios de AWS, como Lambda y Step Functions, para responder a las necesidades específicas de la aplicación.