我目前正在考虑用Gearman取代我们的家庭酿造批次处理器。它运行的报告可能占用数百兆内存(PHP)。因此,如果运行了太多这样的报告,服务器将锁定。我不得不添加逻辑,以防止在内存不足、服务器过载并崩溃的情况下,控制进程向许多工作人员生成。
如果我切换到Gearman,如果系统内存不足,是否有某种类型的逻辑可以防止额外的工作人员?我看到了限制工人的选择,但这并不能直接解决问题。此外,如果一个系统不堪重负,平衡系统之间的工作负载是否足够聪明?
其他人有什么建议?当条件合适时,我有可能在Gearman中插入我自己的支票来产生工人吗?或者还有什么其他解决方案?
在LAMP堆栈上开发,我对Gearman不太熟悉,所以在需要的地方进行指责。
限制工作程序的数量是可行的——如果您希望报告使用3-400 MB的内存,请将工作程序的数目限制在/400MB左右。
如果您的内存使用率低于预期,您将无法扩展Gearman本身来生成工作线程,但您可以创建一个包装器来处理您的工作线程并为您执行此操作。在走这条路之前,先看看GearmanManager的扩展以处理这些问题。然而,我的建议是顺其自然,而是在你对你期望的负载有了一定的经验后调整工作人员的数量(包括请求报告的速度、报告的内存大小以及你需要对请求报告的用户做出响应的速度)。
Gearman会自动将负载平衡到响应最快的服务器——当任务到达gearmand时,它会轮询所有可用的工作人员,并告诉他们新任务已经到达,最先响应的客户端将获得任务。这意味着,如果服务器有负载,它对请求的响应会较慢,并且任务通常会在具有更高可用处理能力的服务器上结束(忽略网络延迟的差异)。这也将自动处理不同大小的服务器。