跨 Amazon Elastic Beanstalk 节点共享数据
Share data across Amazon Elastic Beanstalk nodes
我有一个 spring 引导应用程序,它在启动时下载大约 300 MB 的数据并将其保存到路径 /app/local/mydata
。目前,我只有一个带有单个节点的开发环境,这不是问题。但是,一旦我创建了一个具有(比如)10 个节点的 prod 实例,每个节点单独下载相同的 300 MB 数据将浪费数据带宽。它会给从中下载数据的服务带来很大压力。 EC2 的数据流动 in/out 会产生相关成本。
我可以使用 touchfile 构建一个逻辑,以确保只有一个盒子下载数据,而其他盒子只等到下载完成。但是,我不知道在哪里下载这些数据以便其他节点也可以读取。
有什么建议吗?
如果您想将其保存在文件中,请将其下载到 S3,但听起来您可能需要将数据放入数据库 (RDS) 或缓存在 Redis (ElastiCache) 中。
我不确定 "touchfile" 是什么,但我假设您指的是某种文件锁定机制。我不认为这是跨多台服务器进行协调的最佳选择。我可能会使用具有一致读取和条件写入的 DynamoDB table 作为分布式锁定机制。
您下载的数据多久更改一次?也许您可以安排一个 Lambda 函数来定期刷新数据并更新数据库或其他东西?
一般来说,您需要停止考虑为此类事情使用网络服务器的本地文件系统。
我有一个 spring 引导应用程序,它在启动时下载大约 300 MB 的数据并将其保存到路径 /app/local/mydata
。目前,我只有一个带有单个节点的开发环境,这不是问题。但是,一旦我创建了一个具有(比如)10 个节点的 prod 实例,每个节点单独下载相同的 300 MB 数据将浪费数据带宽。它会给从中下载数据的服务带来很大压力。 EC2 的数据流动 in/out 会产生相关成本。
我可以使用 touchfile 构建一个逻辑,以确保只有一个盒子下载数据,而其他盒子只等到下载完成。但是,我不知道在哪里下载这些数据以便其他节点也可以读取。
有什么建议吗?
如果您想将其保存在文件中,请将其下载到 S3,但听起来您可能需要将数据放入数据库 (RDS) 或缓存在 Redis (ElastiCache) 中。
我不确定 "touchfile" 是什么,但我假设您指的是某种文件锁定机制。我不认为这是跨多台服务器进行协调的最佳选择。我可能会使用具有一致读取和条件写入的 DynamoDB table 作为分布式锁定机制。
您下载的数据多久更改一次?也许您可以安排一个 Lambda 函数来定期刷新数据并更新数据库或其他东西?
一般来说,您需要停止考虑为此类事情使用网络服务器的本地文件系统。