水平缩放laravel app?

时间:2016-03-01 08:31:42

标签: authentication heroku laravel-5.2 horizontal-scaling

由于我的laravel应用程序将部署到heroku,我想知道如何避免会话亲和性,以便任何节点都可以处理用户请求。

据我所知,首次提供身份验证的服务器会在会话中存储auth-token以便稍后识别用户,但是,如果要添加新节点以扩展应用程序,用户必须是使用具有auth-token存储的相同服务器提供服务?如何在laravel中避免这种情况?

1 个答案:

答案 0 :(得分:2)

如果您想横向扩展,首先需要让您的网络应用无状态,这意味着您需要存储用户会话和auth信息集中在其他地方而不是本地存储在每个服务器上。 Redis服务器将是@Amir Bar提到的最佳选择,因为它是一个数据结构服务器(通常用于缓存),存储在Redis上的所有数据都存储在公共数据结构中(list,hashtable .. 。)在RAM上,因此它的延迟会非常低。

一旦您的Web应用程序处于无状态,只需使用负载均衡器来分配负载,然后在负载均衡器后面根据需要添加尽可能多的Web服务器节点。那就足够了。

扩展Web服务器后的下一个挑战是数据库服务器的可扩展性。您可以在负载均衡器后面添加任意数量的Web服务器节点。但扩展数据库是另一个野兽。如果你正在使用NoSQL,那么恭喜!由于NoSQL数据库非常容易扩展,因此几乎每个NoSQL数据库都内置了水平扩展功能。 扩展关系数据库比扩展NoSQL数据库更难。如果您正在为高读取系统进行扩展,那么主从复制模型将是合适且简单的。但是,如果您正在为高读取和高写入系统进行扩展。希望您在解决方案研究中度过愉快的时光。解决方案将基于您当前的设计。

无论如何,当您到达数据库读/写瓶颈时,首先尝试优化查询和数据库访问,N + 1问题是一个非常常见的问题,会大大减慢您的数据库访问速度。