AWS Fargate 的性能问题

Bin*_*ini 12 java jboss7.x aws-fargate

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

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

Fargate 的任务定义与 EC2 实例具有相同的 CPU 和内存(2048 CPU 和 4096 内存)。Fargate 与 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"
}
Run Code Online (Sandbox Code Playgroud)

Bin*_*ini 10

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

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

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