技术栈
Python(单体API) - Flask框架 PostgreSQL
我们已经按照以下方式部署了Docker容器:
- Docker镜像存储在ECR中
- Docker容器部署在ECS中
- 共有25个Docker容器部署在3个R5大型EC2实例(2 vCPU,16 GB)中
- 每个容器分配了1024/3072的最小和最大内存,因此每个EC2实例可容纳15个容器
我们现在面临停机问题,问题是OOM(内存不足),然后给定EC2实例中的容器开始移动到另一个EC2实例,当由于某种原因第三个EC2实例不可用时,就会发生这种情况,因此直到第二个实例正常运行,我们才会面临指定一组容器的停机时间。
所以想要检查我们使用的策略是否正确?
我们现在计划拥有少量容器的小型EC2实例,因此如果出现问题,则至少会关闭少量网站,而不是所有15个网站都将关闭,我们是否走在正确的方向上?
我们应该转移到Fargate吗?相对于使用ECS,成本会有什么影响?
如果有人能够帮助我找到这种问题的完美解决方案,那将是很棒的。
在不久的将来,我们将拥有数百个容器,可能会达到500个,因此我们必须决定最佳的部署、故障转移和高可用性策略。