这是一个基础设施设计问题。是不是更好:
- 在单个 AWS 实例上运行多个 Web 框架?
- 在单独的 AWS 实例中运行每个框架?
以下是使用的网络框架:
- 后端:
Django + PostgreSQL
- 前端:
NodeJS
- 论坛:
Ruby on Rails + PostgreSQL
选项 1 的优点:
- 无需担心 AWS 实例类型(只需使用功能强大的实例类型)
- 当所有内容都集中在一个位置时易于维护,只需 1 个实例
选项 2 的优点:
- 根据负载(后端/前端/论坛)更好地分配 AWS 资源。更容易扩展?
我不确定什么是更好的选择。很想听听您对此的经验和意见。谢谢。
最佳答案
有很多人将所有这些都放在一个 AMI 中,在 ELB 后面旋转它们并在生产中运行它。
建议吗?事实并非如此。
这个问题与您所说的差不多,每个都有不同的资源需求(除了 NodeJS),并且您将在任何类型的负载下快速重载 EC2 实例;当他们看不到负载时,您将通过拥有足够强大的实例(针对预期负载)全天候运行 24/7 来消耗 $$$。
就一个接近但稍微更好的选择而言,将每个框架放入自己的 Docker 容器中,允许它们在同一实例上彼此并行运行,但以隔离的方式运行。一旦它们进入 Docker,您也可以在 Fargate 上的 ECS 或 EKS 中运行它们。
就“AWS 最佳实践”路线而言,并戴着我的解决方案架构师帽子,我会推荐以下内容:
NodeJS
放入 S3,CloudFront 位于其前面。Python(Django)
已移至 Lambda 或 Lambda EDGE。PostgreSQL
已移至 RDS,或者更好 - DynamoDB。
这样做的优点是成本和可扩展性。 S3 可无限扩展,可用性高,而且非常便宜。 Lambda 是基于事件的,因此您需要“按使用付费”而不是“按小时付费”。 RDS 是一个资金接收器,但它负责备份并使运行数据库成为一项简单的任务。 DynamoDB 是一项“按使用付费”服务,如果您能成功实现,将使您的整个堆栈的成本显着降低。
关于ruby-on-rails - 单个 AWS 实例中的多个 Web 框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60245312/