由于我的laravel应用程序将部署到heroku,我想知道如何避免会话关联,以便任何节点都可以处理用户请求。
据我所知,第一次提供身份验证的服务器将在会话中存储auth-token,以便稍后识别用户,但是,如果添加新节点来扩展应用程序,是否必须使用存储auth-token的同一服务器为用户提供服务?如何在laravel中避免这种情况?
发布于 2016-11-03 20:58:46
如果你想横向扩展,你首先需要让你的web应用程序无状态,这意味着你需要将用户会话和身份验证信息集中存储在其他地方,而不是本地存储在每台服务器上。正如@Amir Bar提到的那样,Redis服务器将是最佳选择,因为它是一个数据结构服务器(通常用于缓存),Redis上存储的所有数据都存储在公共数据结构(列表、哈希表...)中。在RAM上,因此它的延迟将非常低。
一旦您的web应用程序是无状态的,只需使用负载均衡器来分发负载,然后在负载均衡器后面添加所需数量的web服务器节点。这就足够了。
在扩展web服务器之后,您面临的下一个挑战将是数据库服务器的可扩展性。您可以在负载均衡器后添加任意数量的web服务器节点。但伸缩数据库是另一种野兽。如果你正在使用NoSQL,那么恭喜你!由于NoSQL数据库非常容易扩展,因此几乎每个NoSQL数据库都内置了水平扩展功能。扩展关系数据库比扩展NoSQL数据库更难。如果您正在为高读取率的系统进行扩展,则主从复制模型将是合适且简单的。但是如果你同时扩展高读和高写的系统。希望你在你的解决方案研究中玩得开心。解决方案将基于您当前的设计。
无论如何,当你遇到数据库读写瓶颈时,先试着优化你的查询和数据库访问,N+1问题是一个非常常见的问题,它会大大减慢你的数据库访问速度。
https://stackoverflow.com/questions/35717993
复制相似问题