使用 AWS ECS Fargate 进行水平和垂直自动扩展

2023-12-04

我这里有一个具体的用例。我需要自动扩展在 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)

我正在寻找的是垂直缩放部分。到目前为止,我最好的想法如下:

  1. 创建 CloudWatch 集群内存使用情况警报。触发率超过60%。
  2. 警报向 SNS 主题发送一条消息,该主题会触发 lambda 函数。
  3. lambda 描述当前任务定义并解析 CPU 和内存参数。然后,它会创建一个新版本的任务定义,并增加内存(如果需要的话还可以添加 CPU,因为 CPU 和内存在 Fargate 中不是独立的值)。
  4. 最后,lambda 使用新的任务定义更新服务。这应该会触发滚动更新,并导致集群具有相同数量的节点,但每个节点都具有更大的内存。

你认为这可行吗?还有更好的解决办法吗?您可以发现任何潜在的问题吗?

预先感谢您的任何想法!


这似乎是解决此问题的合理方法并且可行。

问题可能是,您没有跟踪 IaC 模板中增加的内存需求。当您运行更改服务中任何内容的堆栈更新时,这可能会导致服务被“重置”为最小内存。

为了解决这个问题,您可以创建SSM-参数保存 CPU 和内存单元的值,您可以使用它们模板中的参考。您的 Lambda 还需要使用新值更新它们。这样,通过 CloudFormation/CDK 更新服务不应立即触发扩展过程。

您只是在内存方面进行扩展,是否存在内存需求减少而您也可以缩小的情况? (这可以通过相同/或类似的机制来完成,只是要记住一点)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 AWS ECS Fargate 进行水平和垂直自动扩展 的相关文章

随机推荐

  • Ormlite - 扩展 BaseDaoImpl 时构造函数调用失败

    我有以下表格 DatabaseTable tableName b daoClass B DaoImpl class public class B DatabaseField public String b1 public B For Orm
  • 如何在 SQL 动态查询中使用 Pass 逗号分隔字符串

    我有一个函数将从逗号分隔的字符串返回整数值 它需要两个参数 string nvarchar 4000 delimiter char 1 所以问题是 如果我在动态查询中使用这个函数 我会收到错误 这里是查询 declare ProductID
  • 无法将 JMX 与 Spring 应用程序集成

    我有一个SPRING应用 当我跑步时 mvn jetty run 一切都好 我想用JMX在我的项目中 我创建了另一个项目 我尝试了初学者教程 我能够看到一些变化jconsole 现在 我想在我的实际项目中使用 JMX 并且我想使用管理 JM
  • 如何将 Django 应用程序测试拆分到多个文件中

    我正在开发 Django 1 2 应用程序 并且我是该框架的初学者 我想将我的测试拆分为应用程序的多个文件https github com vkhemlan BolsaTrabajo tree master bolsa trabajo 我怎
  • 在 Cassandra 中创建触发器的示例,仅支持 Java 吗?

    想要检查 Cassandra 中的触发器功能 有人可以提供一个创建触发器的示例吗 从这个博客 http www datastax com dev blog whats new in cassandra 2 0 prototype trigg
  • “为什么”Python 数据类型是不可变的

    Why 不是如何 像 int 和 string 这样的 python 原始数据类型是不可变的 这是因为脚本语言的实现限制吗 举个例子 a 5 a 6 在第二行 a 6 而不是创建一个新的内存位置 为什么不能将第一个内存位置更改为6 某些 P
  • Go调度器什么时候会创建新的M和P?

    刚刚学习了golang GMP模型 现在我了解了goroutines 操作系统线程和golang上下文 处理器如何相互协作 但我还是不明白什么时候会产生M和P 例如 我有一个测试代码来在数据库上运行一些操作 并且有两个测试用例 两批 gor
  • bash $* 的 Powershell 等效项是什么?

    换句话说 我怎样才能获得脚本本身的命令行 所以 我知道 PSBoundParameters 但并不相同 我只想按原样获取包含传入参数的字符串 我该怎么做 See get help about Automatic Variables Args
  • 错误:系列的真值不明确。蟒蛇和熊猫

    我正在尝试识别当天交易量超过 10 000 份的 MSFT 和 GOOG 的所有期权合约 并打印出交易品种的名称 我收到错误 一系列的真值不明确 使用 empty a bool a item a any 或 a all 错误出现在第 13
  • 在 R 中重新缩放变量

    我有一个名为 Esteem 的变量 其比例为 1 7 我想将其重新调整为 1 100 我知道 R 程序可以做到这一点 但是我在语法上遇到了问题 有人可以提供一个如何重新调整该变量的示例吗 另外 我可以在 R Commander 中使用一个工
  • Python-如何验证字符串是否以特定字符串结尾?

    例如我有以下字符串 24499 00 02 05 sys yg ys 如何验证字符串是否以从函数结果中获得的字符串结尾 例如sys yg ys 我在上面的字符串上尝试了以下操作 只是为了检查简单的情况 结果 if line endswith
  • 如何更改 ASP.NET MVC 中的默认视图位置方案?

    我想根据当前的 UI 文化在运行时更改视图位置 如何使用默认的 Web 表单视图引擎实现此目的 基本上我想知道如何实施WebFormViewEngine某事是什么自定义 IDescriptorFilter in Spark 是否有其他视图引
  • 将二进制数转换为 Base 64

    我知道这是一个很愚蠢的问题 但我不知道该怎么办 我有一个任意的二进制数 比如说 10010000001100100000001001000000100000110000000100010000010110001100001100000111
  • Google Drive api:范围“drive.file”和“drive.readonly”的复制错误

    我的问题是 如果您只有范围 drive file 和 drive readonly 是否无法使用 google Drive api 将文件从驱动器中的一个文件夹复制到驱动器中的另一个文件夹 使用 API 浏览器进行测试 https deve
  • PhoneGap:如何获取 appView 的 id 并将其传递?

    对于PhoneGap应用程序 正如说明所述 我已经替换了setContentView 与super loadUrl file android asset www index html 下一行是appView addJavascriptInt
  • 如何将数组的前一个字符串与下一个字符串连接起来?

    我很难理解这个问题 但假设有一个包含这些元素的数组 apple banana pear kiwi orange 我想将此数组转移到 apple apple banana apple banana pear apple banana pear
  • 如何在java上进行mysqldump?

    我在 mySQL 中创建了数据库 并使用 mysqldump 将其导出到文件中 有没有办法让我的 JAVA 程序连接到 mysql 并使用我保存在文件中的结构创建一个空数据库 前提是上述数据库尚未存在于服务器中 谢谢你 尝试类似的方法 Ru
  • 如何嵌套 PHP 代码块

    这段代码被破坏了 因为我正在嵌套 php 代码块 执行此操作的正确方法是什么 gt
  • 在 Meteor 中,我如何在客户端知道服务器端操作何时完成?

    我知道 Meteor 对数据库进行客户端缓存 以获得更好的有效性能 在客户端Meteor方法调用中 有没有办法知道什么时候服务器端数据库操作actually完成 或者如果它实际上失败了 当完整的远程过程调用完成时 我是否可以挂钩一些事件来获
  • 使用 AWS ECS Fargate 进行水平和垂直自动扩展

    我这里有一个具体的用例 我需要自动扩展在 ECS Fargate 上运行的分布式 Web 应用程序 问题是所有节点都需要在内存中保存相同的数据 因此增加节点数量无助于缓解内存压力 因此 只有水平扩展 添加节点 和垂直扩展 增加节点内存 才能