【问题标题】:High Scalability app- Photos based and videos高可扩展性应用程序 - 基于照片和视频
【发布时间】:2018-06-26 05:50:56
【问题描述】:

背景 - 我的应用与 Chef 相关,人们将在其中发布图片和视频。这些数字将是巨大的。

技术栈 - RoR、nginx、Postgresql、AWS。

我的问题:

  1. 既然会有很多文件,建议是什么。我应该使用 s3 来存储图像吗?实施 CDN 了吗?
  2. 我将对文件进行标记,以便在这些标记上搜索它们。存储标签的最佳方式是什么?
  3. 负载平衡?

我正在研究 FB 如何存储图像和视频。不确定我是否必须这样做,因为我的是一个小应用程序。

P.S - 我已经用基本的 s3 设置完成了 MVP,但是存在性能问题。

我想使用另一个数据库,因为图像和视频是非结构化的。 (如果我错了请纠正我) 我发布这个是因为我有一个实际的工作问题。

【问题讨论】:

  • 第三点,为什么需要负载均衡器?
  • 你是对的。此刻那将是过度工程。只是在流量很高的情况下考虑。
  • 如果您的流量很高,那么您需要考虑您的应用程序的解决方案。你用什么来服务 http 请求?事实上,您可以提供 S3 对象的经过身份验证的 URL,这样您的应用程序服务器带宽就不会被阻塞。在列出图像请求时,您可以提供经过用户 s3 身份验证的 url,这样当下载媒体时,它不会来自您的服务器
  • 对。过去,与私有相比,S3 文件的公共文件存在一些问题。

标签: ruby-on-rails postgresql performance nginx scalability


【解决方案1】:

这是一个广泛的问题,答案可能会因不同的意见和经验而异。但就您的想法而言,AWS S3 是管理文件(尤其是媒体)的好选择。您还可以搜索 s3,并将元信息与您可能想要调用标签的文件相关联。要扩展它以进行读取,您还可以设置弹性搜索或 opensearch 服务器来索引 s3 中的图像分布。最好的方法确实是索引,无论您使用什么工具或平台。但是由于包括成本在内的项目限制,无法始终使用索引。事实上,您甚至可能不需要 CDN,因为 S3 本身在地理上分布在更广泛的区域中,您可以利用它。

编辑---------

是的,您索引存储的图像信息。您可以设置其索引将始终更新的弹性搜索服务器。如果您不热衷于投资 elasticsearch,您可以设置一个您选择的简单数据库,而不必担心未来的问题。可能您可以设置 NoSQL (DynamoDB AWS)。在 s3 中的每个存储上,创建一个触发器以使用其信息存储标签和其他元信息更新 DynamoDB。您可以从存储在该 DynamoDB 映射中的 s3 URI 检索该信息并显示图像。

【讨论】:

  • 你是对的。 CDN 的成本上升。此时的应用程序非常基础。问题是我必须根据标签搜索照片。这需要很多时间。另外,照片的检索需要更长的时间。我的观点是,由于照片被多次阅读并且从未编辑过,有没有办法检索它们+即时加载它们并达到性能峰值?其他本质上属于 NoSQL 的数据库有帮助吗?
猜你喜欢
  • 2011-06-12
  • 2014-12-28
  • 1970-01-01
  • 2013-01-07
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
  • 1970-01-01
相关资源
最近更新 更多