我在这里有一个特定的用例。我需要自动缩放在ECS Fargate上运行的分布式Web应用程序。问题在于,所有节点都需要在内存中保留相同的数据(因此,增加节点数无助于内存压力)。因此,只有在水平(添加节点)和垂直(增加节点内存)的情况下进行扩展,才可以正确处理增加的负载。
水平自动缩放很简单。 AWS CDK为负载均衡的Fargate任务提供了很好的高级构造,并使其非常容易添加更多任务来处理CPU负载:
service = aws_ecs_patterns.ApplicationLoadBalancedFargateService(
self,
'FargateService',
cpu=256,
memory_limit_mib=512,
...
)
scalable_target = service.service.auto_scale_task_count(max_capacity=5)
scalable_target.scale_on_cpu_utilization('CpuScaling', target_utilization_percent=60)
我正在寻找的是垂直缩放部分。到目前为止,我最好的主意如下:
您认为这可行吗?有更好的解决方案吗?您可以发现任何潜在的问题吗?
预先感谢您的任何想法!
这似乎是解决问题的合理方法,并且可以工作。
[一个问题可能是,您无法跟踪IaC模板中增加的内存需求。这可能会导致您在运行更改服务中任何内容的堆栈更新时将服务“重置”为最小内存。
为了解决这个问题,您可以创建SSM-Parameters,其中包含reference in your template所占用的CPU和内存单元的值。您的Lambda也需要使用新值来更新它们。通过CloudFormation / CDK对服务进行更新的这种方式不应立即触发放大过程。
您仅在内存方面进行扩展,是否存在内存需求减少并且也可以缩减的情况? (这可以通过相同/或相似的机制来完成,只是要记住一点)