【问题标题】:Pefromance issue with AWS fargateAWS fargate 的性能问题
【发布时间】:2021-08-31 02:48:10
【问题描述】:

我们有一个旧的 Java 应用程序在 Jboss As 7.1.1 中运行。目前,此应用程序运行在 AWS EC2 实例类型 t3.medium 上,即 2 个 CPU 内核和 4GB 内存。

我们正在尝试使用 CI/CD 和 AWS Fargate 对我们的应用程序进行现代化改造。我们成功地实现了现代化,但不是性能。

Fargate 的任务定义与 EC2 实例具有相同的 CPU 和内存(2048 CPU 和 4096 内存)。 Farget 与 EC2 实例位于同一子网并链接到同一安全组。我们无法理解性能缓慢的原因。

该应用程序通常会搜索音乐作品的详细信息(创作者、出版商、艺术家等)。如果我们与大量相关方一起进行音乐作品,在 EC2 实例中需要不到 20 秒,但在 Fargate 中大约需要 30 分钟。

我从 EC2 实例上运行的同一个 Jboss 和同一个 Java 版本创建了 docker 映像。

还有一条信息,数据库位于不同的(非 AWS)数据中心。

您能否指导我如何使用 AWS Fargate 实现与旧设置相同的性能?我在 Fargate 中错过了什么?

任务定义

{
    "containerDefinitions": [
      {
        "name": "CONTAINER_NAME",
        "image": "<IMAGE1_NAME>",
        "memory": 4096,
        "essential": true,
        "logConfiguration": {
            "logDriver": "awslogs",
            "secretOptions": null,
            "options": {
              "awslogs-group": "/ecs/TaskDefinitionName",
              "awslogs-region": "eu-central-1",
              "awslogs-stream-prefix": "ecs"
            }
        },

        "portMappings": [
          {
             "hostPort": 8080, 
             "containerPort": 8080,
             "protocol": "tcp"
          }
        ]
      }
    ],
    "compatibilities": [
        "EC2",
        "FARGATE"
    ],
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "networkMode": "awsvpc",
    "cpu": "2048",
    "memory": "4096",
    "family": "TaskDefinitionName",
    "taskRoleArn": "arn:aws:iam::accountId:role/ecsTaskExecutionRole",
    "executionRoleArn": "arn:aws:iam::accountId:role/ecsTaskExecutionRole"
}

【问题讨论】:

    标签: java jboss7.x aws-fargate


    【解决方案1】:

    我从 AWS 支持得到的答案如下。

    “ECS Fargate 任务可以放置在任何可用的底层主机上,并且满足任务定义中指定的 CPU 和内存,因此可能具有不同的性能。EC2 实例更适合控制应用程序性能的情况是必需的。”

    我对开发人员的建议,如果网络吞吐量和 IO 性能对您的应用程序很重要,则更好地使用 EC2。

    【讨论】:

      【解决方案2】:

      虽然您可以预期 EC2 和 Fargate 之间的性能差异很小,但您看到的增量非常“荒谬”,而且这里肯定发生了一些事情。设置是否 100% 相同(唯一的区别是任务运行的位置)?此外,您是否尝试过为了排除故障而在更大的资源集(例如 4 vCPU / 30GB)上启动 Fargate 任务,看看这是否有什么不同?再次只是为了弄清楚“容量”是问题还是问题出在其他地方。

      【讨论】:

      • 我尝试了 4 个 vCPU 和 30GB 内存,以防它与网络吞吐量相关,但没有帮助。
      • 所以必须有其他东西(某处)然后因为增加 CPU/内存的大小,正如您所观察到的,也应该增加网络带宽。如果这些都没有产生任何明显的影响,那么问题很可能出在端到端范围内的其他地方。
      • 我目前看到 fargate 和我壁橱中的服务器之间存在相同的性能差异。我壁橱里的服务器(运行 minikube)比在 EKS fargate 上运行相同的容器快大约 15 倍
      • “更快”在什么维度上?如果维度是 上的“从缓存图像中调出容器所需的时间”,则差异可能是 1000 倍(因为 Fargate 不缓存图像)。但如果它是原始 CPU 性能,那么 IMO 肯定有其他事情发生。
      【解决方案3】:

      监控性能滞后的唯一方法是使用容器洞察。 只有这样,您才能监控 CPU 和内存利用率、网络带宽、性能日志等指标。如果需要,那么增加 CPU 限制和内存可能会有所帮助。然而,与通过性能工具验证的 AWS EC2 相比,Fargate 多次被报告为速度较慢。到目前为止,AWS 还没有提供具体的解决方案。

      参考资料 -

      1. https://discuss.newrelic.com/t/php-agent-on-aws-fargate-performance-issue/124367
      2. https://filia-aleks.medium.com/ec2-versus-fargate-performance-comparison-34b1002fbbaa
      3. https://community.cloudonaut.io/t/spring-boot-on-fargate-slow/318
      4. https://www.reddit.com/r/aws/comments/921szi/migrating_java_applications_from_ec2_to_fargate/
      5. https://www.reddit.com/r/aws/comments/hqjyqd/ecs_performance_10x_slower_than_ec2_instances/

      【讨论】:

        猜你喜欢
        • 2019-10-16
        • 2017-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-01
        • 1970-01-01
        • 2019-07-23
        相关资源
        最近更新 更多