我使用群集模块让多个工作人员从API获取数据,处理它并将聚合写入数据库。问题是,API限制了每秒的请求数。现在,我正在寻找一种解决方案来同步所有员工的限制。
我很感激每一个提示都能解决这个问题。
答案 0 :(得分:0)
如果您有每秒请求数量的限制,您可以跟踪您在主线程中留下的请求数量,并且每个孩子可以询问主线程是否可以在发送之前发送请求,以及主节点线程只有当它有可用于当前秒的请求时才会满足请求。 Here is another answer showing how master -> slave communication works
在每秒结束时,您将主线程重置为可用的请求数。
这种方法最适合实现最大化,但更简单的方法是启动N个线程并允许它们每秒发出K个请求,其中K * N小于请求数允许每秒。使用此方法达到限制的最安全且最不可能的方法是在一个请求的结束和下一个请求的开始之间执行setTimeout,但这将避免处理请求所需的延迟。下一个最佳选择是每个线程在第二个开始时触发N个请求,并且直到下一秒才再次触发。
您最安全的解决方案是不要接近极限,而是坚持每秒最多N / 2个请求,其中N是每秒最大请求数。