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