我们正在构建一个在Laravel上的报告应用程序,它需要从第三方服务器获取用户数据,每秒钟允许一个请求。
我们需要根据用户将100 K提取到1000 K行,并且每个请求最多可以获取250行。
因此,限制是:
1.我们可以每秒钟发送一个请求。
2.每次请求250行
因此,它需要400-4000个请求/作业来获取用户数据,因此,为多个用户加载数据非常耗时,而且服务器变得很慢。
所以,现在,我们计划使用多个服务器来加载数据,比如4-10个服务器来获取用户数据,这样我们就可以每秒从10个服务器发送10个请求。
我们如何设计系统和处理来自多台服务器的作业?
是否可以使用专用服务器托管Redis,并从多个服务器连接到该Redis服务器并执行作业?会发生任何冲突/种族状况吗?
任何与此相关的暗示或经验都会非常有帮助。
发布于 2017-12-04 16:13:52
简单地说,是的,这是绝对可能的,这是我在生产应用程序中多次实现的东西。
Redis就像任何其他服务一样,可以在任何地方运行,客户端可以从任何地方连接到它。这完全取决于您对服务器的配置,以决定具体情况如何发生(添加密码、配置尖峰、限制通过防火墙的访问等)。我再次推荐阅读他们在管理部分中的文档:https://redis.io/documentation
此外,当您移动到一个专用的Redis主机,多个客户端访问它时,您可能希望看到不止一个Redis服务器运行的可靠性、高可用性等。Redis通过一些简单的配置命令可以高效、容易地进行复制,您可以在这里读到更多的命令:https://redis.io/topics/replication。
在Redis上的最后一件事,如果您最终实现了主从设置,您可能需要查看高可用性和自动故障转移,如果您的主实例将要关闭。Redis在应用程序中有一个非常好的实用程序,它可以监视主和从程序,检测主服务器关闭的时间,并自动重新配置服务器,将其中一个从服务器提升到新的主服务器。这个实用工具叫做Redis,您可以在这里阅读到:https://redis.io/topics/sentinel
对于有关竞争条件的问题,这取决于您如何编写被推送到队列中的作业。然而,对于用例来说,这听起来并不是太大的问题,但它确实取决于第三方系统的约束。无论哪种方式,如果您受制于一个竞赛条件,您仍然可以为它实现一个解决方案,但是可能需要使用类似Redis (https://redis.io/topics/distlock)之类的东西。Taylor最近在即将发布的Laravel5.6版本中增加了一个新特性,我认为它实现了Redis在调度器(https://medium.com/@taylorotwell/laravel-5-6-preview-single-server-scheduling-54df8e0e139b)中的一个版本。您可以查看这是如何实现的,如果您最终需要它,则可以根据您的用例进行调整。
https://stackoverflow.com/questions/47440163
复制相似问题