Optimization 负载平衡加权报告?

Optimization 负载平衡加权报告?,optimization,language-agnostic,load-balancing,Optimization,Language Agnostic,Load Balancing,我在一家车队跟踪公司工作,这个问题是关于我计划如何做报告的。让我解释一下我们的环境。我们有1个数据库、1个负载分配进程和3个报告处理服务器(假设它们在各个方面都是相同的)。当客户请求报告时,该报告的所有参数都会进入数据库。我目前正在开发一个负载分配应用程序,该应用程序将从数据库中获取待处理的报告,并将其委托给3个报告处理服务器,这些服务器生成报告并通过电子邮件发送。当服务器完成报告(或出现错误)时,它会通知负载分配应用程序。报告可以有各种大小,从1辆车的1天GPS数据到数百辆车的3个月GPS数据

我在一家车队跟踪公司工作,这个问题是关于我计划如何做报告的。让我解释一下我们的环境。我们有1个数据库、1个负载分配进程和3个报告处理服务器(假设它们在各个方面都是相同的)。当客户请求报告时,该报告的所有参数都会进入数据库。我目前正在开发一个负载分配应用程序,该应用程序将从数据库中获取待处理的报告,并将其委托给3个报告处理服务器,这些服务器生成报告并通过电子邮件发送。当服务器完成报告(或出现错误)时,它会通知负载分配应用程序。报告可以有各种大小,从1辆车的1天GPS数据到数百辆车的3个月GPS数据

我可以想出几种方法来实现负载平衡,但我对它们不太满意。我可以让每台服务器最多只做5个报告,但一台服务器可能会得到5个小报告,而另一台服务器可能会得到5个大报告。我可以采用“循环”的方法,在服务器之间按顺序分发报告,但这仍然不能防止任何服务器过载

我认为我现在最好的办法是统计每个报告需要多少GPS数据(这是一项简单的任务),当我将报告分配给每个服务器时,我会记录每个服务器的运行总数。当服务器完成报告(并通知负载平衡器)时,从该服务器的运行总数中减去该报告的GPS数据量。通过这种方式,我可以将下一个报告分配给具有最少GPS数据量的服务器。我还可以设置一个最大值,这样服务器就无法正常工作(这个问题导致我们从一开始就重构整个报告过程)。如果在所有服务器达到最大值时有更多的报告,它可以将它们排队,并在服务器完成一些报告后尝试这些报告

我不认为这是尽快完成报告的最佳方法。这些只是我迄今为止想出的最好的


如何优化跨多台服务器的不同大小的负载平衡报告的方法?

假设您只有一个主表可以从中选择数据,那么我会将一台服务器配置为首先执行所有大报告,而将其他两台服务器配置为执行从最小到最大的报告。否则,大型报告可能永远无法完成

对于较小的报告,您希望在没有更好的方法的情况下,让它们尝试并运行“相似”报告,即围绕主要使用的索引中的相似值聚集的报告。例如,如果服务器刚刚完成2011年6月的报告,那么下一个最好运行的报告是同一时期,而不是跳到2012年11月。虽然这取决于实际的表,但我认为您有很多按日期排序的数据组成了大部分选择。您真正想要做的就是对可能重用缓存索引/etc的报告进行分组,因为这样可以提供最佳吞吐量

我有一个类似的调度问题,任何指向主表的查询都会转到一台服务器(慢速队列),其他任何查询都会转到另一台服务器(快速队列),特殊情况除外