我正在从事一个在上托管的项目。服务器设置包括两个EC2实例,一个弹性负载均衡器和一个额外的弹性块存储,web应用程序驻留在其中。这个项目应该使用S3来存储用户上传的文件。为了解决这个问题,我将调用S3 bucket static.example.com
我试过使用s3fs
(https://code.google.com/p/s3fs/wiki/FuseOverAmazon)、RioFS
(https://github.com/skoobe/riofs)和s3ql
(https://code.google.com/p/s3ql/)。s3fs
将挂载文件系统,但不允许我写到桶中(我问了这个问题:如何使用FUSE安装具有适当权限的S3卷)。RioFS
将挂载文件系统,并允许我从shell写入存储桶,但是使用PHP保存的文件不会出现在存储桶中(我在GitHub上打开了一个项目问题)。s3ql
将挂载存储桶,但存储桶中的任何文件都不会出现在文件系统中。
下面是我使用的挂载命令:
s3fs static.example.com -ouse_cache=/tmp,allow_other /mnt/static.example.com
riofs -o allow_other http://s3.amazonaws.com static.example.com /mnt/static.example.com
s3ql mount.s3ql s3://static.example.com /mnt/static.example.com
我还尝试使用这个S3类:https://github.com/tpyo/amazon-s3-php-class/和这个特定于FuelPHP的S3包:https://github.com/tomschlick/fuel-s3。我能够让FuelPHP包列出可用的桶和文件,但是将文件保存到桶中失败了(但没有出错)。
您是否曾经在本地linux文件系统上挂载过S3桶,并使用它成功地将文件写入桶?你用了什么工具?如果您使用了上述工具之一,您使用的版本是什么?
编辑我被告知,我与RioFS
在GitHub上打开的问题已经解决。虽然我决定使用S3 REST API,而不是尝试将桶作为卷挂载,但现在看来,RioFS
可能是一个可行的选择。
发布于 2013-05-10 03:58:24
您曾经在本地linux文件系统上安装过S3桶吗?
不是的。这是有趣的测试,但我不会让它接近一个生产系统。使用库与S3通信要好得多。原因如下:
底线是FUSE下的S3是leaky abstraction。S3没有(或需要)目录。文件系统不是为数十亿个文件构建的。它们的权限模型不兼容。您试图将S3压缩到文件系统中,这是在浪费它的许多功能。
用于与S3对话的两个随机PHP库:
https://github.com/KnpLabs/Gaufrette
https://aws.amazon.com/sdkforphp/ --如果您不仅使用S3进行扩展,或者需要执行上面提到的任何花哨的请求,这个方法是很有用的。
发布于 2015-02-08 19:08:15
通常情况下,将文件写入EBS卷是有利的,然后强制对文件的后续公共请求通过CloudFront CDN进行路由。
这样,如果应用程序必须对文件进行任何转换,那么在本地驱动器和系统上进行转换就容易多了,然后通过CloudFront强制请求转换后的文件从源文件中提取。
例如,如果您的用户正在为一个化身上传图像,而该化身图像需要几次迭代才能达到大小&裁剪,则您的应用程序可以在本地卷上创建这些文件,但是所有对该文件的公开请求都将通过cloudfront原点拉请求进行。这样,您可以最大限度地灵活地保留原始文件(或文件的优化版本),任何后续用户请求都可以从云前端提取现有版本,或者云前端将请求路由回应用程序并创建任何必要的迭代。
上面的一个基本示例是WordPress,它创建上传的任何图形图像的多个大小/裁剪版本,并保留原始图像(受文件大小限制和/或插件转换的限制)。CDN功能强大的WordPress插件,如W3全速缓存重写请求来完成CDN,所以应用程序只需要创建唯一的第一次请求迭代。添加浏览器缓存URL版本控制(http://domain.tld/file.php?x123)将进一步完善和利用CDN功能。
如果您关注EBS卷文件大小或inode的快速扩展,您可以自动对很少请求的文件或旧文件进行剪枝。
https://stackoverflow.com/questions/16428552
复制相似问题