【发布时间】:2016-04-26 19:42:29
【问题描述】:
我正在使用 Amazon AWS 构建一个用于教育目的的小型应用程序。 Web 应用程序有两个部分:
- 上传图片的表单。
- 显示已上传图片的所有缩略图的网格。
申请流程:
- 用户打开网页。
- 用户选择要上传的图片。
- 向 Web 层发送 AJAX 请求以生成预签名的 S3 URL。
- 收到 URL 后,会发起 AJAX PUT 请求,并将图像直接上传到 S3。
- 上传完成后,S3 会发送带有图像密钥的 SQS 队列消息。
- 其中一名工作人员收到该消息并创建缩略图。
- 图像处理完成后,工作人员将缩略图上传到 S3。
现在,网络层使用db.json 文件来保存所有现有缩略图的链接。使用该文件,客户端网页会呈现网格中的所有缩略图。
问题是,网络层如何知道何时更新包含新缩略图链接的db.json?
理想情况下,网络层将完成以下任务:
- 仅在需要时刷新
json(如果网络层刷新了json,那么它一定已经被修改了)。 - 在更新后提供更新
db.json(如果按时添加缩略图x并且另一个用户按时请求网页x+1,则用户知道新缩略图)。
几种方法:
-
对于每个
index.html请求,列出 S3 存储桶并提供最新的缩略图(违反上一节中的第 1 项)。 -
按间隔列出 S3 存储桶(违反这两项)。
-
在请求预签名 URL 后设置计时器,并假设工作人员在计时器响起时已完成新图像的处理(这甚至不是解决方案,主要有两个原因;Web 层有多个实例,即计时器可能会在处理完成之前响铃)。
-
使用 S3 事件并设置一个 lambda 表达式,将
HTTP GET请求发送到我的 Web 层上的特殊端点(也不是解决方案,因为此请求将从负载均衡器定向到单个实例,什么关于其他实例?)。
我不知道如何解决这个问题。 你建议我做什么?
编辑
由于这是一项教育活动,因此数据库服务超出了范围。
【问题讨论】:
标签: amazon-web-services amazon-s3 architecture