ruby-on-rails - 单个 AWS 实例中的多个 Web 框架?

标签 ruby-on-rails node.js django amazon-web-services amazon-ec2

这是一个基础设施设计问题。是不是更好:

  1. 在单个 AWS 实例上运行多个 Web 框架?
  2. 在单独的 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/

相关文章:

ruby-on-rails - 使用 ruby​​ on rails 从图像列表创建视频

ruby-on-rails - 事件记录查询错误

node.js - React Routing 在本地有效,但在 Heroku 中无效

javascript - 启动后我如何在 Node webkit中获取窗口对象

python - 从任务访问 Django DB

sql - 在数据库 Rails 中存储动态数字

ruby-on-rails - 是否可以在 Google App Engine 上使用 Ruby/jRuby/Java?

javascript - Tailwind CSS 不能用 React 和 Express 编译?

python - Django Rest Framework ViewSet 在覆盖 list() 方法时丢失分页、SearchFilter 和 OrderingFilter

python - 垃圾邮件机器人使我的日志文件困惑 [Django]