我目前正在寻找用Gearman替换我们的家用啤酒批处理器。它运行的报告可能需要几百兆的内存(PHP)。因此,如果运行了太多这些报告,服务器将锁定。我必须添加逻辑以防止控制进程在内存不足的情况下产生到许多工作者并且使我们的服务器过载并让它崩溃。
如果我切换到Gearman,是否存在某种类型的逻辑以防止系统内存变低时的额外工作人员?我看到一个限制工人的选项,但这并没有直接解决问题。此外,如果一个系统变得不堪重负,它是否足够智能以平衡系统之间的工作负载?
其他人有什么建议吗?当条件合适时,我是否有可能将自己的支票插入Gearman以产生工人?或者还有其他什么解决方案?
在LAMP堆栈上开发并且我对Gearman不是很熟悉,所以在需要的地方进行谴责。
答案 0 :(得分:1)
限制工作人员数量是可行的方法 - 如果您希望报告使用3-400 MB内存,请将工作人员数量限制在400 MB左右。
如果你的内存使用率低于预期,你将无法将Gearman扩展到spawn worker,但是你可以创建一个处理你的worker并为你做的包装器。在你走这条路之前,先看看扩展GearmanManager来处理这些问题。然而,我的建议是让它成为现实,然后在你获得一些经验,确切地知道你期望的负载类型(报告请求的速度,报告记忆的大小)之后调整工人的数量。明智的,你需要多快回复请求报告的用户。
Gearman将自动负载平衡到响应最快的服务器 - 当任务到达gearmand时,它将轮询所有可用的工作人员并告诉他们新任务已到达,并且首先响应的客户端将获得该任务。这意味着如果服务器有负载,它将对请求响应较慢,并且任务通常最终会在具有更多可用处理能力的服务器上结束(忽略网络延迟的变化)。这也将自动处理不同大小的服务器。