我们有一个旧的Java应用程序在Jboss中运行,为7.1.1。目前,该应用程序运行在AWS EC2实例类型t3.media上,它是两个CPU核和4GB内存。
我们正试图用CI/CD和AWS Fargate更新我们的应用程序。我们成功地实现了现代化,但没有表现出来。
Fargate的任务定义与EC2实例(2048 CPU和4096内存)具有相同的CPU和内存。Fargate位于同一个子网中,并与EC2实例链接到同一个安全组。我们不明白为什么演出这么慢。
应用程序通常搜索音乐作品的细节(创建者、出版商、艺术家等)。如果我们用一大串感兴趣的人来做音乐作品,在EC2实例中,它只需不到20秒,而在Fargate则需要大约30分钟。
我从运行在EC2实例上的同一个Jboss和相同的Java上创建了docker映像。
另一个信息是,数据库位于另一个(非AWS)数据中心.
请您指导我如何通过使用AWS 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"
}
发布于 2021-06-29 09:11:49
我从AWS支持得到的答案如下。
"ECS Fargate任务可以放置在任何可用的底层主机上,满足任务定义中指定的CPU和内存,因此可能具有不同的性能。EC2实例更适合于需要控制应用程序性能的情况。“
我对开发人员的建议是,如果网络吞吐量和IO性能对于您的应用程序更好地使用EC2很重要的话。
发布于 2021-06-15 11:10:38
虽然您可以预期EC2和Fargate之间的性能差异很小,但是您看到的增量非常“荒谬”,而且这里肯定会发生一些事情。设置是否100%相同(唯一的区别是任务运行的位置)?另外,为了排除故障,您是否尝试过在一组更大的资源(例如4 vCPU /30 if )上启动Fargate任务,以查看这是否有任何区别?再说一次,只是为了弄清楚“能力”是问题还是问题在别的地方。
发布于 2021-06-16 15:49:39
监视性能滞后的唯一方法是使用容器洞察。只有这样,您才能监视CPU和内存利用率、网络带宽、性能日志等指标。在需要的情况下,增加CPU限制和内存可能会有所帮助。然而,与性能工具验证的AWS EC2相比,Fargate已经被多次报告为慢。到目前为止,AWS没有提供任何具体的解决方案。
参考资料-
https://stackoverflow.com/questions/67983075
复制相似问题