【问题标题】:AWS Beanstalk - Share Database layer between worker and webserverAWS Beanstalk - 在工作人员和网络服务器之间共享数据库层
【发布时间】:2020-06-06 13:43:19
【问题描述】:

我正在使用 NodeJS 构建一些 Web 应用程序。 我将应用程序部署到 AWS beanstalk Web 服务器,并解耦了一些繁重的任务, 并将繁重的任务部署到不同的 AWS beanstalk worker, 主 Web 服务器正在使用 SQS(aws 队列)执行工作程序。

主 Web 服务器有一个大的 DB 层来连接、获取和保存到数据库。 工作人员确实需要一些数据库操作,每种工作人员类型都需要已经在主 Web 服务器的数据库层中实现的不同操作。

所以我正在尝试找到一种方法来使用 Web 服务器的 DB 层,而不会在每种工作类型中重复它(这就是我现在正在做的事情)。

我的想法是将 DB 层与主应用程序分离,并将其部署到自己的 Web 服务器上,但这看起来很浪费,因为我不需要一直在 DB 层监听请求,我需要一些按需操作。

我附上了它的外观图片:

  • 1号主服务器(全db层)
  • 第二个队列
  • 3 号工人。 (具有重复的数据库操作)

有什么好的解决办法吗?

【问题讨论】:

  • 如何通过 API 将来自网络服务器的数据库操作公开给工作人员?
  • 我不确定我是否理解正确,但您可以像@OluwafemiSule 所说的那样做同样的事情,还有另一种方法可以通过触发弹性豆茎中发生的任何事件来使用像亚马逊运动这样的流媒体,反之亦然跨度>

标签: node.js database amazon-web-services amazon-elastic-beanstalk infrastructure


【解决方案1】:

您从工作人员那里执行了多少次保存/加载操作?有多少工人同时运行?我认为如果不了解那里有多少工人以及要保存多少数据,就很难提出单一的解决方案。

总的来说,我实际上可以想到多种解决方案:

  1. 你可以在web服务器上打开API,所以一旦worker完成,它就会调用web服务器。如果您有很多工人,它将无法工作,因此您可能需要介于两者之间的工人(我们称其为“保存工人”),因此当前工人将排队“保存工作”,然后“保存工人”将调用Web 服务器 API,这将保证 Web 服务器不会因保存操作而过载。

  2. 您可以创建一个重复的网络服务器实例(我们称之为“工作网络服务器”),用于保存来自工作人员的结果,因此工作人员会将结果推送到新的 SQS,在这个“工作人员web 服务器”将监听 SQS 中的保存请求。例如,您可以通过设置环境变量来控制 Web 服务器的工作模式。

  3. 您也许可以将 DB 层提取到 Web 服务器和工作程序中使用的包或库中,但您需要注意不要打开大量与数据库并行的连接或同时执行大量数据库操作。

【讨论】:

    【解决方案2】:

    只需在您的 Beanstalk 环境中使用本机 RDS 集成:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.db.html

    【讨论】:

      猜你喜欢
      • 2016-05-23
      • 2012-07-06
      • 2020-11-28
      • 1970-01-01
      • 2012-02-03
      • 2010-12-24
      • 2016-06-27
      • 1970-01-01
      • 2017-08-23
      相关资源
      最近更新 更多