3

我使用 Jelastic 来托管 PHP 应用程序。编辑者可以通过应用程序上传存储在文件系统中的图片。这些图片存储在文档根目录中,并在前端提供,例如http://example.com/uploads/123/picture.jpeg

对于 NGinx 应用服务器,我启用了垂直缩放但只有一个节点,即没有水平缩放。

图片上传不可靠。当我通过我的 PHP 管理界面更新图片 #1,然后更新另一张图片时,图片 #1 已变回旧图片。

我的问题:图片上传是否在单个节点上的多个 cloudlet 之间同步?如果我水平扩展到多个节点会发生什么?

4

2 回答 2

7

我的问题:图片上传是否在单个节点上的多个 cloudlet 之间同步?

我认为这里存在术语问题。

Cloudlet:由 RAM 和 CPU 使用率组成的复合资源单元。1 Cloudlet = 128MB RAM 和大约。200MHz 中央处理器。服务器(Jelastic 将其称为“节点”)通常使用多个小云;例如,它可能在任何给定时刻使用几 GB RAM 和/或几 GHz CPU。

更多详细信息,请访问http://kb.layershift.com/introducing-cloudlets

每个节点都是一个独立的(虚拟)服务器,有自己的文件系统。因此,如果您有一个 NGINX PHP 应用程序服务器,它使用 1 个或 100 个 cloudlet 都没有关系(请记住,这只是 RAM 和 CPU 消耗的衡量标准!),它有 1 个文件系统和所有文件成功写入将可用于任何后续请求。

如果我水平扩展到多个节点会发生什么?

对,这里你要小心。如果您的应用程序正在写入本地文件系统,则在处理多个水平扩展的服务器时会出现问题。这是一个非常典型的扩展问题,每个应用程序都必须处理。

如果我们只是在谈论静态资源(例如图像),那么处理此问题的最佳和最简单的方法之一就是将所有这些资源上传到单个服务器。例如,如果你有 4 个 NGINX PHP 服务器——假设它们对 your-application.com 进行负载平衡——你可能会创建其中一个服务器(或者可能是一个完全独立的环境)images.your-application.com

因此,您执行对 images.your-application.com 的上传,并在您希望显示这些上传的图像时直接在 HTML 中引用它。

请记住,images.your-application.com 仅负责提供实际图像;所以它真的很轻,应该可以通过垂直缩放来处理一个体面的体积——这在 Jelastic 上是完全自动的。

当您需要扩展 images.your-application.com 时,最简单的方法是采用 CDN 服务(CloudFlare、Incapsula 等)。这将使 images.your-application.com 仅处理尚未缓存在 CDN 中的上传和少量下载流量。

于 2014-02-05T11:04:55.250 回答
0

遇到同样的问题,请阅读这个jelastic教程

总之,jelastic 有一个脚本可以帮助您进行sincronization,您只需执行该脚本并指出您要在所有节点中同步的文件夹。

然后,每次您将文件上传到这些文件夹时,文件将在几秒钟或几分钟内可供所有节点使用;时间取决于文件大小。

于 2016-01-13T23:31:06.277 回答