Laravel应用程序和负载均衡器

4
我将我的应用程序托管在AWS云上,负载均衡器运行在两个实例之上,由Nginx和Php7.0-fpm提供服务。假设我的应用程序下载文件并将其存储在本地,以便向客户提供内容。使用配置为两个实例的自动缩放组;
1)如果我的会话从instance-1开始,在那里下载我的文件,然后突然切换到instance-2,我会得到相同的内容吗?
或者
2)如果一个会话在单个实例上创建,那么在我退出应用程序之前,将继续使用相同的实例吗?
非常感谢您的任何帮助!

我建议将其下载并保存在S3中,以便每个实例都可以访问。 - PULL STACK DEV
@Mumtaz 我同意。对于静态文件来说这没问题。但是,如果我想编辑文档呢?比如说它是一个电子表格。本地进行的操作不会被中断吗? - Sathiya Sarathi
  1. 是的。
  2. 是的。
- Brian Lee
请你详细解释一下,@DigitalDrifter? - Sathiya Sarathi
1个回答

4
对于一个拥有多个实例且负载均衡的网站,强烈建议将缓存和会话存储在同一位置而不是分散在各个实例中。为此,您可以在所有服务器上安装memcached,并将它们配置为指向1个服务器以存储它们所有的内容。
SESSION_DRIVER=memcached
CACHE_DRIVER= memcached
MEMCACHED_HOST=127.0.0.1 #on your memcache server, point to localhost
MEMCACHED_HOST=10.10.1.10 #on other instances, point to memcache server
MEMCACHED_PORT=11211

对于文件和图像上传,请使用AWS的S3或专用存储服务器通过FTP存储,以便所有服务器都可以直接访问并以相同的方式访问。这是最简单和最有效的方法 :)

如果您将它们存储在本地,您的服务器将无法与相同的内容同步,您的用户最终会遇到404错误。


1
搞定了,谢谢 @emotality :) - Sathiya Sarathi
1
我们应该将Memcache单独托管在一个独立的服务器上,而不是完整的应用程序。因为在ASG组下的实例可能会根据策略终止。 - balaaagi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接