【问题标题】:Web Architecture - Where to put uploaded binary dataWeb 架构 - 将上传的二进制数据放在哪里
【发布时间】:2013-12-25 16:48:14
【问题描述】:

通常在开发网站时,我希望尽可能远离网络服务器。我尝试将配置详细信息、会话数据等存储在数据库后端。这样我就可以在需要时轻松地重新构建 Web 服务器,或者在理论上根据需要添加更多 Web 服务器。

我遇到的一个问题是客户端上传图像数据或二进制文件时。我倾向于将它们原始存储在 Web 服务器上,而不是将它们放入数据库中。但问题是我需要从网络服务器备份这些数据,我不太喜欢。

我希望网络服务器只提供数据,而不是存储它。我已经研究了诸如将文件通过 FTP 传输到另一组 Web 服务器上的选项,这些 Web 服务器仅充当内容交付服务器(不对它们进行脚本或处理),或者将客户端数据放入数据库中的 blob 中。我考虑过的另一个选择是将文件放在特定的文件服务器上,就像在 LAN 上一样,然后将来自文件服务器的共享安装到 Web 服务器上,并让 Web 服务器直接传送它。我什至考虑过将它放入 Hadoop 风格的 HDFS 分布式文件系统中,然后让网络服务器从那里拉取它,但这些看起来都不太正确。

无论如何,在存储客户端提供的二进制数据(如图像或文档)时,通常认为最佳做法是什么?

我更喜欢通用的网络架构类型响应/方法,而不是一种特定语言可能鼓励或促进某种解决方案的方式。但是,如果您可以比较和对比多种不同语言/库所提倡的方法,那么了解这些方法也将非常有趣。

【问题讨论】:

  • 无法在数据库中添加这些文件?
  • 是一种选择,其实都是可能的。从网站设计的角度来看,这更像是一种被认为是“好的做法”和被认为是“坏做法”的情况。显然,每种方法都需要考虑不同的因素,例如成本、易于开发、可扩展性等。
  • 数据库或云(amazon s3),倾向于后者
  • if (careAboutDataIntegrity) useDatabase();否则使用S3();

标签: design-patterns web architecture


【解决方案1】:

正如 MikeSW 在上面的 cmets 中已经提到的,我建议使用 Amazon S3,它将作为二进制文件的集中和可靠存储,可从您的所有 Web 服务器访问。但是,请记住他们的"consistency model"

【讨论】:

  • 感谢您的回答,但这与其说是一种架构解决方案,不如说是一种产品解决方案。 S3 在 Internet 上可以很好地工作,但是对于必须将数据保密的 Intranet 呢?在存入 S3 之前加密上传并不是很理想。我真的在寻找一种架构解决方案,但是我猜到目前为止似乎达成的共识是数据被放置在 Web 服务器之外的“数据库”中。这可以是 S3 或封闭的私有云,例如 CloudStack、Nimbula、Riak、Eucalyptus 等 DB。
【解决方案2】:

感谢那些确实添加到这个问题的人,但是我最终通过一个名为 womble 的成员在 serverfault 上找到了我正在寻找的内容。

如果你以后发现这个问题,这里是他们答案的链接:

https://serverfault.com/questions/297244/moving-away-from-nfs

这还链接到关于同一主题的另一篇非常有用的帖子:

https://serverfault.com/questions/286910/setting-up-a-rails-2-3-x-app-on-ec2-for-easy-scalability

【讨论】:

    猜你喜欢
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多