高可扩展性应用程序 - 基于照片和视频

时间:2018-01-17 11:05:16

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

背景 - 我的应用与厨师有关,人们会发布图片和视频。这些数字将是巨大的。

技术堆栈 - RoR,nginx,Postgresql,AWS。

我的问题:

  1. 由于会有很多文件,所以建议是什么。我应该使用s3来存储图像。有CDN实施吗?
  2. 我会标记文件,以便在这些标签上搜索它们。存储标签的最佳方法是什么?
  3. 负载平衡?
  4. 我在看FB如何存储图像和视频。不确定我是否必须这样做,因为我的是一个小应用程序。

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

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

1 个答案:

答案 0 :(得分:1)

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

编辑---------

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