对于大多数情况,apache2 中的循环技术 lbmethod=byrequests 是否足够?

Should round-robin technique lbmethod=byrequests in apache2 be enough for most scenarios?

在我的系统中,有不同类型的请求在内存成本和时间成本方面具有不同的范围。

也就是说,如果有R1,R2.....R100这样的请求类型,那么这些请求类型处理请求所需要的内存量和响应时间相差很大,甚至相差了10到100次。

循环法应该是这种情况下的正确方法,还是循环法最终会掩盖这种情况下的大多数情况?

如果循环法不是正确的选择,那么 apache 上是否有更多可用的自定义选项?

通常我会说,一旦您处理足够多的请求,再加上粘性因素,就不值得担心,因为它往往会趋于平衡。

但是如果某些请求对于后端来说要高出 1 或两个数量级,您可能会考虑 "bybusyness" 或 "bytraffic" 如果这些昂贵的请求恰好需要更长的时间来处理或生成大量响应.在较低的负载下,这将为您提供更好的机会,避免 1 个后端不幸并并行处理太多昂贵的请求(除了粘性)。

Should round-robin be the right method for such scenario or does round-robin will eventually cover up most scenarios in this situation?

我们对 50 个并发用户、100 个并发用户和最后 350 个并发用户进行了 36 小时 运行(持续时间压力测试)和 4 小时 运行(峰值压力测试)的全量数据.我们尝试进行负载分配的不同虚拟机之间的 CPU 和 RAM 利用率没有任何差异。

我们做了多个这样的 运行,CPU 和 RAM 利用率之间的差异不够显着

因此,我认为可以公平地得出结论,循环法确实涵盖了很多场景,包括这个场景,并且是在这个场景中用于负载分配的正确方法。

循环算法按照收到请求的顺序在节点之间发送请求。这是一个简单的例子。假设您有 3 个节点:node-A、node-B 和 node-C。

• 第一个请求发送到节点 A。

• 第二个请求被发送到节点 B。

• 第三个请求发送到节点 C。

负载平衡器继续根据此顺序向服务器发送请求。听起来流量会在节点之间平均分配。但事实并非如此。

在这里阅读更多以详细了解:What is the problem with Round robin algorithm?