正如我问题的标题所说,我想知道这是否是一个好的做法,
我知道我可以挂载到一个EC2实例,但是我想知道,如果我将添加更多的实例来扩展我的应用程序,这可能会导致一些问题; 你有这方面的经验吗?
我使用S3来允许通过PHP脚本进行file upload,所以基本上问题是:
使用注释是否是一个好习惯,还是有更好的方法来处理用户file upload?
提前致谢
如果您使用S3来存储用户上传的数据,特别是在分布式环境中,一个重要的考虑因素是S3是“最终一致的”(尽pipe一些区域是一致的)。 这样做的结果是,您可以成功上传文件,但如果您立即检查其存在,可能会发现它不存在。 对于更新或删除等情况,此问题更为明显,即使读写后一致性也无济于事。
以上内容适用于您上传到S3,无论您采取何种方式。 实际上,人们可能期望的S3的大部分问题都是如此 – 它不是用于存储数据的方法,因为S3的局限性可能是最大的问题。
S3fs使用S3 API – 就像PHP(或其他)SDK一样。 而且,S3的devise是为了处理相当高的并发水平 – 所以(除了一致性问题之外)在多个实例上安装它不应该是一个问题(记住它不是传统的文件系统 – locking,等等在S3端处理)。
也就是说,每个实现都有一些潜在的优点和缺点:
S3fs:
SDK:
就“安全”而言,可能意味着“防止数据损坏”或“防止未经授权的访问”。 关于前者,SDK可能会帮助处理最终的一致性(以更冗长的错误的forms),但底层存储是相同的,我预计这些差异是微小的。 关于访问控制 – 您可以使用IAM创build一个有限的帐户,但该帐户仍然需要读/写访问您的S3文件。 两者都应该有足够的安全性,无论哪种情况,你的系统都需要被攻破才能访问你的S3存储桶 – 不过我build议使用S3fs(因为凭证通常存储在webroot之外,并且根本不可访问PHP)有一个更好的安全性。
个人观点:如果有一个上传目录(例如一个站点使用它),并且访问相当简单(只需要上传文件,偶尔更新/删除),那么我倾向于使用s3fs。 如果您需要更复杂的访问(例如部分下载,多个桶等)或将要使用S3 SDK用于其他目的,那么我将坚持用于上传的SDK。
我宁愿上传到S3通过PHP库。 在每台服务器上安装S3比较容易。
看看这个例子: http : //aws.amazon.com/code/126
对于我的一个项目,我使用这个lib: http : //undesigned.org.za/2007/10/22/amazon-s3-php-class 。 为我工作得很好。
您可以允许用户直接从浏览器上传到s3,而无需上传到服务器(然后上传到s3)。
这里有一个很好的提示: https : //leonid.shevtsov.me/post/demystifying-s3-browser-upload/
file upload后,如果需要处理文件(zip,transcode等),你可以使用S3fs