Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从多台服务器处理Laravel/Redis作业_Laravel_Redis_Queue_Server Side_Distributed Computing - Fatal编程技术网

从多台服务器处理Laravel/Redis作业

从多台服务器处理Laravel/Redis作业,laravel,redis,queue,server-side,distributed-computing,Laravel,Redis,Queue,Server Side,Distributed Computing,我们正在Laravel上构建一个报告应用程序,需要从第三方服务器获取用户数据,该服务器允许每秒1个请求 我们需要根据用户获取100K到1000K行,每个请求最多可以获取250行 因此,限制是: 1.我们可以每秒发送一个请求 2.每个请求250行 因此,获取一个用户数据需要400-4000个请求/作业,因此,为多个用户加载数据非常耗时,并且服务器速度变慢 因此,现在,我们计划使用多台服务器加载数据,比如4-10台服务器来获取用户数据,这样我们可以每秒从10台服务器发送10个请求 我们如何设计系统并

我们正在Laravel上构建一个报告应用程序,需要从第三方服务器获取用户数据,该服务器允许每秒1个请求

我们需要根据用户获取100K1000K行,每个请求最多可以获取250行

因此,限制是:

1.我们可以每秒发送一个请求 2.每个请求250行 因此,获取一个用户数据需要400-4000个请求/作业,因此,为多个用户加载数据非常耗时,并且服务器速度变慢

因此,现在,我们计划使用多台服务器加载数据,比如4-10台服务器来获取用户数据,这样我们可以每秒从10台服务器发送10个请求

我们如何设计系统并处理来自多个服务器的作业

是否可以使用专用服务器托管Redis,并从多个服务器连接到该Redis服务器并执行作业?是否会发生冲突/种族状况


任何与此相关的提示或之前的经验都会非常有帮助。

简短的回答是肯定的,这是绝对可能的,我以前在生产应用程序中多次实现过这一点

Redis和其他任何服务一样,可以在任何地方运行,任何地方的客户端都可以连接到它。这完全取决于您对服务器的配置,以决定具体的操作方式(以及添加密码、配置spiped、限制通过防火墙的访问等)。我建议您阅读他们在管理部分的文档:

此外,当您迁移到一个专用的Redis主机,并且有多个客户端访问它时,您可能需要考虑让不止一个Redis服务器运行,以实现可靠性、高可用性等。Redis通过几个简单的配置命令,便可实现高效、轻松的复制,您可以在此处阅读更多有关的内容:

在Redis上的最后一件事是,如果您最终实现了主从设置,那么如果您的主实例出现故障,您可能需要研究高可用性和自动故障切换。Redis在应用程序中内置了一个非常强大的实用程序,它可以监视主服务器和从服务器,检测主服务器何时关闭,并自动重新配置服务器,将其中一个从服务器升级到新的主服务器。该实用程序名为Redis Sentinel,您可以在此处阅读:

对于您关于竞争条件的问题,这取决于您如何准确地编写推送到队列中的作业。不过,对于您的用例来说,这听起来并不是一个太大的问题,但它确实取决于第三方系统的约束。无论哪种方式,如果您受到竞争条件的约束,您仍然可以为它实现一个解决方案,但可能需要使用Redis锁()之类的东西。Taylor最近在即将发布的Laravel 5.6版中添加了一个新功能,我相信它在调度器()中实现了Redis锁的一个版本。您可以研究它是如何实现的,如果您最终需要它,可以根据您的用例进行调整