【问题标题】:Recommendations for scalable architecture对可扩展架构的建议
【发布时间】:2020-12-14 20:31:10
【问题描述】:

我有 3 个容器化应用程序。所有这些应用程序都是一个简单的 python 脚本,它在不同的时间调用一个 api。例如,App1:每小时调用一次,App2:每 30 分钟调用一次,App3:每分钟调用一次。现在我们为每个应用程序都有一个 ec2 实例,这没关系,因为我需要应用程序在不同的 AWS EC2 实例上运行,因为我不希望我的 IP 被列入黑名单。但是现在我将如何扩展应用程序?例如,我需要应用 1 的 3 个实例。

我目前正在使用 Terraform 创建 EC2 实例,虽然这可以工作,但我不知道如何自动更新每个 EC2 实例上的图像。

我尝试使用 AWS ECS 来扩展容器,但这需要它共享 IP 地址(我希望这些应用程序存在于不同的 VMS(EC2 实例)中。),这样 IP 被列入黑名单就不会出现问题。 ) 与其他应用程序,我不希望这样。

哪些工具或架构可以最好地帮助我完成这些应用程序的扩展?

【问题讨论】:

  • 应用程序有多简单?作为一个选项,如果它们可以轻松转换为 Lambda 函数,我认为 Lambda + CloudWatch 的边界(用于调度 crons)应该可以解决具有可扩展性的情况。这里应该是如何拥有不同 IP 的线索:stackoverflow.com/a/53291517/4644059 如果您需要保留 docker,您很可能必须使用 EC2/ECS。您可以检查启动多个 EC2 实例的选项。

标签: amazon-web-services docker architecture terraform amazon-ecs


【解决方案1】:

对于您的具体情况,我建议 AWS Fargate ECS + Cloudwatch 事件 cron 触发器(计划的 Fargate ECS 任务)。

Fargate 实例默认具有awsvpc 网络模式,这意味着如果您在具有公共 IP 分配的公共子网中运行它们,每个容器实例将检索唯一的公共 IP(通过专用的自动附加 ENI - 弹性网络接口)。

此外,在 Fargate 上运行任务将允许您使用更方便的应用程序 docker 打包,同时保持较低的管理和操作要求 - 因为 Fargate 是一个无服务器容器调度程序,并且它比操作 AWS EC2 实例需要更少的工作量.

您将需要 3 个 ECS 资源:

  1. 集群
  2. 容器定义模板资源
  3. 任务定义资源

和 3 个 CloudWatch 资源:

  1. aws_cloudwatch_event_rule
  2. aws_cloudwatch_event_target
  3. aws_cloudwatch_log_group

在 Terraform 中使其工作,+ ECR repo/s 用于存储图像工件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 2014-09-25
    • 2011-04-13
    • 2011-05-21
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    相关资源
    最近更新 更多