使用NFS进行可扩展的PHP / MySQL Web应用程序

情况如下:

我有一个接受用户上传(PHP文件)的PHP / MySQL Web应用程序。 从这些pdf文件的页面中,预览图像即时生成并呈现给networking应用程序的用户。 一些pdf可能会占用很大的空间,大多数将会在50 MB以下,但是一些极端的情况可能会大到几百MB。 有一个等待大的PDF文件的预览图像是可以接受的,但不超过一分钟。 现在一切都在一台服务器上运行,但不久之后,应用程序将在存储和处理能力上达到服务器的极限。

我的想法来解决这个问题:

为了处理这种情况,我有了一个或多个pdf处理服务器和一个或多个文件存储服务器的想法。 这两种types的服务器安装到使用NFS运行实际应用程序的服务器上。 应用程序可以使用GearMan将PDF处理任务委托给这些处理服务器。 处理服务器可以挂载存储服务器并读取存储在那里的文件,对其进行处理并将其输出写入该服务器。 我所说的服务器将是亚马逊ec2实例。

Web应用程序返回到存储服务器上生成的PDF预览图像的链接,然后可以在前端使用该预览图像向用户显示图像。

我的问题:

我对使用多台服务器的应用程序没有任何经验,这个想法是否可行,还是有更好的方法来做到这一点? 对于这种情况,NFS安装是否快速可靠?

你一定会想到正确的思路,但是根据我的经验,虚拟机上的共享存储很lessperformance出来,所以我怀疑在这种情况下,我是否真的下了NFS路由。

最大的缺点是在EBS之上NFS的单点故障,这可能是相当棘手的减轻。 在一个非虚拟的数据中心中,我会使用集群NAS设备来处理故障转移NFS。 在EC2上,我不确定我会怎么做。

如果您已经在使用Amazon EC2进行辅助作业,那么为什么不将这些资源存储在S3存储桶中。 性能很好,可以在世界的任何地方使用HTTP方法来访问存储桶。

所有你需要做的就是上传到S3,让工作人员抓取文件,处理它,然后把结果资产放回到S3上。

您甚至可以在本地安装S3存储桶。 https://stackoverflow.com/questions/10801158/how-stable-is-s3fs-to-mount-amazon-s3-as-a-local-directory

事实上,您可以更多地使用亚马逊堆栈,并使用他们简单的消息服务而不是(或者)卸载人员。