我有一个spring启动应用程序,它在启动时下载大约300 MB的数据并将其保存到路径/app/local/mydata
。目前,我只有一个具有单个节点的开发环境,这不是问题。但是,一旦我用(例如)10个节点创建一个prod实例,每个节点单独下载相同的300 MB数据将浪费数据带宽。它会给正在下载数据的服务带来很大的压力。数据流入/流出EC2会产生成本。
我可以使用触摸文件构建逻辑,以确保只有一个框下载数据,而其他框只等到下载完成。但是,我不知道哪里下载这些数据,以便其他节点也可以读取它们。
有什么建议吗?
答案 0 :(得分:1)
如果您想将其保存在文件中,请将其下载到S3,但听起来您可能需要将数据放入数据库(RDS)或将其缓存在Redis(ElastiCache)中。
我不确定“touchfile”是什么,但我认为你的意思是某种文件锁定机制。我不认为这是跨多个服务器协调这一点的最佳选择。我可能会使用具有一致读取和条件写入的DynamoDB表作为分布式锁定机制。
您下载的数据多久更改一次?也许您可以安排Lambda函数定期刷新数据并更新数据库或什么?
通常,您需要停止考虑使用Web服务器的本地文件系统进行此类操作。