amazon-s3 - 在 aws 中管理多个服务器中的内存缓存
问题描述
每天一次或两次将一些文件上传到 S3 存储桶。我希望在每次 s3 上传时使用每个服务器的内存数据刷新上传的数据。请注意,有多个服务器正在运行,我想在所有服务器中存储相同的数据。此外,服务器正在根据流量进行扩展(同样在新服务器启动时,旧服务器下降意味着服务器实例不会总是相同)。
就像我想将更新的数据保留在缓存中一样。
我想构建一个可以支持服务器自动缩放的架构。我通过使用 SNS 和不同服务器可以轮询的多个 SQS 遇到了 AWS 的 FAN-OUT 架构。
我们如何处理队列相对于服务器的自动缩放?或者有没有其他方法来处理这个场景?
PS:我对 AWS 环境完全陌生。这对任何参考都有很大的帮助。
解决方案
对我来说,要完成这项工作,您需要做一些事情。这些是意见,并且与大多数建筑设计一样,肯定有不止一种方法可以处理这个问题。
我首先假设您有一个在某种 EC2 上运行的应用程序(Elastic Beanstalk、Fargate、具有自动扩展功能的原始 EC2 等),并且您已经解决了在扩展时安装和配置应用程序的问题-up 事件发生。
该设置涉及让 S3 存储桶将可能s3:ObjectCreated
的事件发布到 SNS 主题。这些事件将在存储桶中的对象更新或创建时发布。
下一个:
- 在启动期间,您的应用程序将从 S3 中提取当前数据。
- 作为应用程序启动的一部分,创建一个以 EC2 的实例 id 命名的队列(参见此处的一些示例)该队列需要订阅 SNS 主题。如果队列已经存在,那么这不是错误。
- 您的应用程序将有一个后台线程或进程轮询 SQS 队列以获取消息。
- 如果您在队列中收到一条消息,则需要告诉应用程序从 S3 刷新缓存。
- 当实例关闭时,至少有来自 Elastic Beanstalk 和负载均衡器的事件表明您的实例将被关闭。移除当时绑定到实例的 SQS 队列。
唯一的问题可能是环境的硬崩溃会留下孤立队列。建议手动清理它们或定期执行清理它们的任务。
推荐阅读
- javascript - 谷歌浏览器扩展 - 有没有办法在任何选项卡上为文本选择/突出显示事件添加监听器
- python - 导入 IB 相关库时代码运行时间更长
- javascript - 查找某个项目是否存在于 json 中
- sql-server-2012 - SQL Server 中优化的分页查询
- c - 给定数组中有多少个字符但有空格
- mongodb - 使用 Akk-Http 从 Scala 中的 mongodb 获取 100K 记录时出错
- django - 在 django 视图中按降序排序
- junit5 - 如何使用 JUnit 5 中其他类中定义的@MethodSource
- javascript - javascript中for循环和本地存储的问题
- python - 在 Python 中使用带有 Selenium 的默认 Chrome 配置文件