关于决策的输入:使用amazons3或类似软件和php进行文件托管


Input on decision: file hosting with amazon s3 or similar and php

感谢您的评论,帮助我决定以下事项。

我的要求:

  • 我有一个托管在共享服务器上的网站,我将向我的用户提供内容。大约60 GB的内容(大约2000个文件,每个文件30mb。用户一次只能访问20个文件),我计算每月大约100 GB的带宽使用量。

  • 一旦用户注册了内容,用户就可以访问链接进行下载。但我希望链接在7天后过期,并有可能延长过期时间。

  • 我认为磁盘空间和带宽需要像AmazonS3或RackspaceCloud文件这样的服务(或者有替代方案吗?)

  • 为了管理过期,我计划以某种方式获得过期的链接(我认为S3有这个功能,而不是Rackspace),或者控制我数据库上的过期日期,并有一个批处理过程,每天重命名云上和数据库上的所有200个文件(如果用户复制了直接链接,第二天就无法工作,只有我的网页会有更新的链接)。PHP用于编程。

你觉得呢?云文件托管是怎么走的?哪一个?这样管理链接有意义吗?或者通过编程(向云服务器发送命令…)太难了

编辑:一些主机公司的共享计划中有无限空间和带宽。。我问了他们的支持人员,他们说他们真的很尊重"无限"的交易。因此,每月100GB的传输是可以的,唯一需要注意的是CPU使用情况。因此,共享托管是另一种选择。。

跟进:因此,我发现Unlimited计划的TOS规定,不允许将该空间主要用于托管多媒体文件。所以我决定选择亚马逊s3和Tom Andersen提供的解决方案。

感谢您的投入。

我个人认为您不一定需要使用基于云的解决方案。这可能有点贵。您可以简单地获得一个专用服务器。想到的一家提供商在其一些最低级别的计划中每月提供3000 GB的带宽。这是在10Mbit上行链路上;您可以以10美元/月的价格升级到100Mbps,也可以以20美元/月升级到1Gbit。我不会提及任何名称,但你可以搜索专用服务器,并可能找到一个你喜欢的。

至于文件的过期,只需在数据库支持的PHP中实现即可。您不必四处移动文件,将所有文件存储在无法从网络访问的目录中,并使用PHP脚本来确定链接是否有效,如果有效,则读取文件的内容并将其传递到浏览器。如果链接无效,则可以显示一条错误消息。这是一个非常简单的概念,我认为有很多预先写好的脚本可以做到这一点,但根据您的需求,自己做并不太难。

云托管有优势,但现在我认为它的成本很高,如果你不想在地理上分散负载,也不想计划支持数千个同时使用的用户,并且需要云的弹性,你可以使用专用服务器。

希望能有所帮助。

我不能代表S3发言,但我使用Rackspace Cloud文件和服务器。

这很好,因为你不需要为传入的带宽付费,所以上传非常便宜。

我会这样做:

  1. 将您需要的所有文件上载到"私人"容器
  2. 创建启用CDN的公共容器
  3. 这会给你一个特殊的url,比如http://c3214146.r65.ce3.rackcdn.com
  4. 让您自己的域名CNAME DNS记录指向该记录,如:http://cdn.yourdomain.com
  5. 当用户请求一个文件时,使用带有长随机文件名的COPY api操作,从专用容器向公共容器进行服务器端复制
  6. 将文件名存储在应用程序的mysql数据库中
  7. 一旦文件过期,请使用DELETE api操作,然后使用PURGE api操作将其从CDN中取出。。最后从mysql表中删除该记录

使用PURGE命令。。我听说它不能100%工作,它可能会把文件多留一天。。在文件中,它还说只保留紧急情况下使用。

编辑:我刚刚听说,每天有25次清洗的限制。

然而,就我个人而言,我刚刚在对象上使用了删除,发现它立即从CDN中删除了。总之,最糟糕的情况是,文件在删除后的24小时内仍然可以在某些CDN节点上访问。

编辑:您可以更改CDN节点上的TTL(缓存时间)。。默认值为72小时,因此可能需要将其设置为更低的值。。但不会低到失去CDN的优势。

我发现CDN的优势是:

  1. 它将内容直接推送给远离美国服务器的最终用户,并为他们提供超快的下载时间
  2. 如果你有一个超级流行的文件。。当1000人开始尝试下载它时,它不会占用你的网站。。因为他们都会将副本推送到离他们最近的CDN节点

您不必每天都重命名S3上的文件。只需将它们设为私有(这是默认设置),并将一天或一周的有时间限制的URL分发给任何获得授权的人。

我会考虑让链接只有效20分钟,这样用户就必须重新登录才能重新下载文件。然后他们甚至不能分享他们从你那里得到的链接。