Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 什么';让人们在AWS负载平衡环境中上传文件的最佳方式是什么?_Amazon Web Services_Amazon S3_Distributed Filesystem_Glusterfs - Fatal编程技术网

Amazon web services 什么';让人们在AWS负载平衡环境中上传文件的最佳方式是什么?

Amazon web services 什么';让人们在AWS负载平衡环境中上传文件的最佳方式是什么?,amazon-web-services,amazon-s3,distributed-filesystem,glusterfs,Amazon Web Services,Amazon S3,Distributed Filesystem,Glusterfs,假设您在AWS中运行instance1、instance2和instance3 它们都在运行Apache,您运行的web应用程序需要允许用户上传图像,这在许多项目中都是如此 此外,在显示图像时,需要将其裁剪到正确的大小,因此基本上需要确保所有实例在任何时候都可以访问相同的文件 假设一个用户将一个图像上传到instance1,另一个用户正在访问一个页面,其中相同的图像显示为100x100大小,他点击instance2。另一个用户试图在instance3上看到300x300大小的相同图像。以及许多其

假设您在AWS中运行instance1、instance2和instance3

它们都在运行Apache,您运行的web应用程序需要允许用户上传图像,这在许多项目中都是如此

此外,在显示图像时,需要将其裁剪到正确的大小,因此基本上需要确保所有实例在任何时候都可以访问相同的文件

假设一个用户将一个图像上传到instance1,另一个用户正在访问一个页面,其中相同的图像显示为100x100大小,他点击instance2。另一个用户试图在instance3上看到300x300大小的相同图像。以及许多其他不易预测的尺寸

所以你基本上需要一个分布式文件系统,我用的是Gluster FS。所以所有实例都可以访问相同的文件,当请求查看图像时,我有一个PHP脚本,检查图像是否已经调整到给定的尺寸,如果是,它将显示它们,如果不是,它将调整图像大小,然后再次显示

Gluster FS工作非常顺利,我对此非常满意,只是我认为我正在重新发明轮子,AWS应该对此有某种解决方案。使用top命令,我可以看到glusterfs总是使用我的一些CPU

我还使用CloutFront缓存调整大小脚本的输出,这在很大程度上降低了服务器负载,但Gluster FS的运行成本仍然很高

在没有Gluster FS的情况下,您可以使用rsync和某种cron任务来完成同样的工作,但这需要大量的工作,而且不太可靠,因为您需要知道何时触发rsyncing过程,并且仍然无法获得Gluster FS提供的巨大好处。我也试过s3fs,我想说这绝对是一场噩梦

与Gluster FS相比,NFS驱动器似乎也非常原始,我认为它们使用UDP,因此它们将数据视为无关紧要

那么做这样的事情最好的方法是什么呢?我试图找到AWS提供的分布式文件系统,因为我认为许多开发人员都会遇到相同或类似的问题,但没有任何问题

你可能会说只是上传到s3,但s3对我没有帮助,我需要知道图像是否已经调整大小,然后调整大小并提供服务,或者只是提供服务,所以我需要一些可以编写脚本的东西

你也可能会说,为什么不先调整所有图像的大小,然后将它们全部上传到s3,我不能这么做的原因是

  • 大约有100万张图片和100个大小,所以你可以看到我们需要转换的文件数量巨大
  • 每天可能都会添加新的尺寸,所以“先调整大小”策略不起作用

  • 我会用两个S3桶来完成:

    • 主图像存储桶:以原始分辨率/站点使用的最佳分辨率上传图像,无过期时间
    • 缓存桶:创建按需映像,您可以使用来创建具有请求大小的映像,并设置过期时间
    当用户请求映像时,您检查是否存在于缓存桶上,否则您将创建映像,并将其存储在缓存桶上,然后从那里分派

    考虑事项:

    • 小心timthumb,旧版本有安全问题,您可以检查其他版本
    • Squid缓存也有帮助,您可以用另一个ec2实例替换缓存桶

    这只是我的一个想法,但请随意回答并深入理解它

    非常好的问题。我不太明白,在验证图像是否存在时,为什么只限于编写脚本。为什么不继续,在S3中托管所有内容,并使用可用的SDK检查文件是否存在,并将新的调整大小的图像上载到S3?