在 Elastic Beanstalk Web 和工作程序层之间共享数据

Posted

技术标签:

【中文标题】在 Elastic Beanstalk Web 和工作程序层之间共享数据【英文标题】:Sharing data between Elastic Beanstalk web and worker tiers 【发布时间】:2016-05-23 09:23:30 【问题描述】:

我有一个在 Auto Scaling Elastic Beanstalk Web 环境上运行的平台(基于 Rails 4/Postgres)。我正计划将长时间运行的任务(与第 3 方同步、发送电子邮件等)卸载到 Worker 层,这看起来很简单,可以启动和运行。

但是,我还想运行定期批处理。我已经研究过使用 cron.yml 并且调度似乎很简单,但是我尝试构建的批处理需要访问来自 Web 应用程序的数据才能工作。

有人对这样做的最佳方式有任何意见吗?是 Web 层和工作层之间的共享 RDS 数据库,还是工作层可以访问的 Web 服务?

谢谢, 丹

注意:我添加了一个额外的问题,它更广泛地描述了我的 要求,因为它让我觉得这可能不是最好的方法。 What's the best way to implement this shared batch process with Elastic Beanstalk?

【问题讨论】:

我只会访问 Rails 应用程序正在访问的同一个 Postgres DB。关于工作层的设置:这是我写的一个 gem,它应该可以简化流程 -> github.com/tawan/active-elastic-job 看起来不错,谢谢。是否有在弹性 beanstalk Web 层(数据库所在的位置)和新的工作层之间共享数据库凭据(自动生成的环境变量)的首选方式? 您可以将相同的环境变量添加到工作层。在您的 AWS 控制台中:选择工作人员环境 -> 配置 -> 软件配置 -> 环境属性 【参考方案1】:

除非您需要完整的关系数据库管理系统 (RDBMS),否则请考虑使用 S3 跨实例共享持久数据存储。

也可以考虑Amazon Simple Queue Service (SQS):

SQS 是一种快速、可靠、可扩展、完全托管的消息队列 服务。 SQS 使解耦变得简单且具有成本效益 云应用程序的组件。您可以使用 SQS 传输任何 任何吞吐量级别的数据量,而不会丢失消息或 要求其他服务始终可用。

【讨论】:

以上是关于在 Elastic Beanstalk Web 和工作程序层之间共享数据的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic beanstalk 和 S3 静态 Web 中的 CORS 策略

将 Java Web 应用程序部署到 Amazon Elastic Beanstalk

如何在 AWS Elastic Beanstalk 部署的 Java Web 应用程序中启用 WebSocket 请求

在 Elastic Beanstalk 上使用 Docker 部署 .NET Core Web API

在 AWS Elastic Beanstalk 上运行 Docker 容器 - 我的 Web 应用程序在哪里?

AWS Elastic Beanstalk 和 Neo4j