我在一家车队跟踪公司工作,这个问题专门关于我打算如何做报告。让我解释一下我们的环境。我们有 1x 数据库、1x 负载分配进程和 3x 报告处理服务器(假设它们在各个方面都是相等的)。当客户请求报告时,该报告的所有参数都会进入数据库。我目前正在开发一个负载分配应用程序,该应用程序将从数据库中获取待处理的报告,并将它们委托给 3 个报告处理服务器,这些服务器构建并通过电子邮件发送报告。当服务器完成报告(或出现错误)时,它会通知负载分配应用程序。报告可以有各种大小,从 1 天的 1 辆车的 GPS 数据到 3 个月的数百辆车的 GPS 数据。
我可以想到几种方法来进行负载平衡,但我对它们不太满意。我可以让每台服务器最多只做 5 个报告,但是一台服务器可能会得到 5 个小报告,而另一台服务器可能会得到 5 个大报告。我可以做一个“循环”的方法,只是在服务器上按顺序分发报告,但这仍然不能防止任何服务器过载。
我认为我现在最好的想法是计算每个报告需要多少 GPS 数据(这是一项简单的任务),并且当我将报告分配给每个服务器时,我会为每个服务器保留一个运行总数。当服务器完成报告(并通知负载平衡器)时,从该服务器的运行总数中减去该报告的 GPS 数据量。这样,我可以将下一个报告分配给使用最少 GPS 数据的服务器。我还可以设置一个最大值,这样服务器就不会过度工作(导致我们从一开始就重构整个报告流程的问题)。如果在所有服务器都达到最大值时还有更多报告,它可以将它们排队并稍后在服务器完成一些报告时尝试它们。
我不相信这是尽快完成报告的最佳方法。这些只是我迄今为止想出的最好的。
如何优化我的方法以在多台服务器上平衡不同大小的报告?