我使用Jelastic来托管PHP应用程序。编辑者可以通过存储在文件系统中的应用程序上传图片。这些图片存储在文档根目录中,并在前端提供,例如, http://example.com/uploads/123/picture.jpeg
对于NGinx应用服务器,我启用了垂直缩放,但只有一个节点,即没有水平缩放。
图片上传不可靠。当我通过我的PHP管理界面更新图片#1,然后更新另一张图片时,图片#1已更改回旧图片。
我的问题:图片上传是否在单个节点上跨多个cloudlet同步?如果我水平扩展到多个节点会发生什么?
答案 0 :(得分:6)
我的问题:图片上传是否在单个节点上跨多个cloudlet同步?
我认为这里有一个术语问题。
Cloudlet:由RAM和CPU使用率组成的复合资源单元。 1 Cloudlet = 128MB RAM和大约200MHz CPU。服务器(Jelastic将其称为“节点”)通常使用多个cloudlet;例如它可以在任何给定时刻使用几GB RAM和/或几GHz CPU。
http://kb.layershift.com/introducing-cloudlets
的更多详情每个节点都是一个独立的(虚拟)服务器,具有自己的文件系统。因此,如果你有一个NGINX PHP应用服务器,它是否使用1或100个cloudlets无关紧要(记住,这只是对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缓存的下载流量。
答案 1 :(得分:0)
遇到同样的问题,请阅读this jelastic tutorial。
总之,jelastic有一个脚本可以帮助你进行sincronization,你只需要执行脚本并指出你想要在所有节点中同步的文件夹。
然后,每次将文件上传到这些文件夹时,在几秒或几分钟的时间内,文件将可用于所有节点;时间取决于文件大小。