【问题标题】:Transmitting Images (or large files) over Message Queues通过消息队列传输图像(或大文件)
【发布时间】:2017-03-23 01:10:16
【问题描述】:

我想要完成的是构建最简单的系统来处理通过消息队列上传的图像。

现在我们正在处理临时文件,我们为需要通过 Aws S3 发送的每个图像构建一个,并根据我们的需要对其进行优化/自定义。完成所有这些后,我们将其推送到 S3。

现在,这目前可行,但我想通过使用图像的 base64 编码来消除文件系统开销,从而使进程与运行应用程序的系统完全分离。

由于我们将使用 Amazon SQS(我们目前在生产环境中使用 Beanstalkd),他们的服务不允许将超过 256Kb 的有效负载推送到队列中,这是一个问题,因为图像非常重。

还有哪些解决方案可供探索?

【问题讨论】:

  • 将中间文件发送到 S3 并在 SQS 消息中引用其临时位置 url,也许?
  • 这是一个想法,如果只有 PHP SDK 支持的话……我见过 AWS 开发了一个扩展客户端,但仅适用于 Java。咕噜。
  • SDK 不会自动通过 SQS 支持它,但没有任何明显的理由说明您不能自己将文件存储在 S3 中并将 URI 包含在 SQS 消息中。跨度>
  • 我当然可以!不过,使用两个库会产生开销。自动识别有效负载大小的 PHP 扩展客户端(就像 Java 中存在的客户端一样)将有助于加快功能开发。
  • 是的,虽然在 EC2 S3 中的连接速度非常快。或者,用户可以directly upload it to S3 并且成功的 URL 重定向可以将他们带到您的页面,在那里您将排队到 SQS。

标签: amazon-web-services amazon-s3 message-queue amazon-sqs beanstalkd


【解决方案1】:

您可以考虑将文件分成合适的消息大小,在这种情况下为 256Kb,用适当的序列号标记消息并放入队列。在另一端,接收消息按顺序重新组合消息并写入文件或将图像数据推送到解决方案的其他阶段。

【讨论】:

  • SQS 只接受有效的 UTF-8 作为有效负载,而不是二进制数据,因此内容必须经过 base64 编码才能传输。潜在的无序交付也使这有点脆弱。
  • 好的。谢谢。但是没有办法/配置选项来确保交货顺序吗?
  • 没有。 AWS SQS 不能确保您发送作业的顺序与您要接收它们时的顺序相同。您需要在应用程序级别处理它。
猜你喜欢
  • 2018-07-18
  • 2017-04-23
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 2023-03-04
  • 2014-02-01
  • 2013-08-24
  • 2013-05-26
相关资源
最近更新 更多