自动逻辑问题

问题描述 投票:0回答:1
您可以看到,我使用基于资源消耗的动态缩放,基于Cron小时的计划缩放以及基于队列长度的SQS缩放。 我的主要问题是与计划缩放结合的动态缩放。

,例如,客户要求每天上午8:00,我们将预先发布50个特定服务实例。预定的缩放效果很好,我们得到了50个任务实例。

问题是,我的动态缩放是看到这些任务未被充分利用并开始关闭它们,大约半小时后,我们因流量而淹没,服务开始崩溃。 我正在附加我的模块配置,大多数值都设置在外部,但它应该使您了解其工作原理。 我只是想更好地理解我是否错过了什么,或者我做的整个逻辑是否不正确。

感谢任何能够协助的人。

resource "aws_appautoscaling_target" "auto_scaling_target" { for_each = var.compute_services_auto_scaling_configuration max_capacity = each.value.instance_max_capacity min_capacity = each.value.instance_min_capacity resource_id = "service/${var.cluster_name}/${each.key}" scalable_dimension = "ecs:service:DesiredCount" service_namespace = "ecs" } resource "aws_appautoscaling_policy" "auto_scaling_memory_policy" { for_each = var.compute_services_auto_scaling_configuration name = "${each.key}_auto_scaling_memory_policy" policy_type = "TargetTrackingScaling" resource_id = aws_appautoscaling_target.auto_scaling_target[each.key].resource_id scalable_dimension = aws_appautoscaling_target.auto_scaling_target[each.key].scalable_dimension service_namespace = aws_appautoscaling_target.auto_scaling_target[each.key].service_namespace target_tracking_scaling_policy_configuration { predefined_metric_specification { predefined_metric_type = "ECSServiceAverageMemoryUtilization" } target_value = each.value.memory_scaling_target_value } } resource "aws_appautoscaling_policy" "auto_scaling_cpu_policy" { for_each = var.compute_services_auto_scaling_configuration name = "${each.key}_auto_scaling_cpu_policy" policy_type = "TargetTrackingScaling" resource_id = aws_appautoscaling_target.auto_scaling_target[each.key].resource_id scalable_dimension = aws_appautoscaling_target.auto_scaling_target[each.key].scalable_dimension service_namespace = aws_appautoscaling_target.auto_scaling_target[each.key].service_namespace target_tracking_scaling_policy_configuration { predefined_metric_specification { predefined_metric_type = "ECSServiceAverageCPUUtilization" } target_value = each.value.cpu_scaling_target_value } } resource "aws_appautoscaling_policy" "auto_scaling_sqs_policy" { for_each = var.sqs_based_auto_scaling_configuration name = "${each.key}_auto_scaling_sqs_policy" policy_type = "TargetTrackingScaling" resource_id = aws_appautoscaling_target.auto_scaling_target[each.key].resource_id scalable_dimension = aws_appautoscaling_target.auto_scaling_target[each.key].scalable_dimension service_namespace = aws_appautoscaling_target.auto_scaling_target[each.key].service_namespace target_tracking_scaling_policy_configuration { customized_metric_specification { metric_name = "ApproximateNumberOfMessagesVisible" namespace = "AWS/SQS" statistic = "Average" dimensions { name = "QueueName" value = each.value.queue_name } } target_value = each.value.sqs_scaling_target_value scale_in_cooldown = 300 scale_out_cooldown = 300 } } locals { flattened_scheduled_scaling_actions = flatten([ for service, actions in var.compute_services_scheduled_scaling : [ for idx, action in actions : { action_name = "${service}_scheduled_scaling_${idx + 1}" service_name = service schedule = action.schedule_expression desired_count = action.scalable_action.desired_count } ] ]) } resource "aws_appautoscaling_scheduled_action" "scheduled_scaling" { for_each = { for action in local.flattened_scheduled_scaling_actions : action.action_name => action } service_namespace = "ecs" resource_id = "service/${var.cluster_name}/${each.value.service_name}" scalable_dimension = "ecs:service:DesiredCount" name = each.value.action_name schedule = each.value.schedule scalable_target_action { min_capacity = each.value.desired_count max_capacity = each.value.desired_count } }

解决此问题的选项之一是使用冷却时间进行动态缩放

避免冷却时间:60年代(对交通迅速反应)

Scale-in Condowown:3600(60分钟)

在AWS CLI中设置此设置:

aws application-autoscaling put-scaling-policy \ --policy-name "ScaleInCooldownPolicy" \ --service-namespace ecs \ --resource-id service/YOUR-CLUSTER-NAME/YOUR-SERVICE-NAME \ --scalable-dimension ecs:service:DesiredCount \ --policy-type TargetTrackingScaling \ --target-tracking-scaling-policy-configuration '{ "TargetValue": 50.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "ECSServiceAverageCPUUtilization" }, "ScaleInCooldown": 3600, "ScaleOutCooldown": 60 }'
    
amazon-web-services terraform aws-auto-scaling
1个回答
0
投票
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.