Answers:
我还没有尝试过minimumconn,但是我的理解是minimumconn的典型用例是当您对可能具有长期连接的事物进行负载平衡时。这样做的原因是,最不重要的一点是确保平衡的并发性,而随着路透社的发展,这将提供更平衡的到达率。如果不清楚这个区别,请参阅我关于区别的答案。
当您说负载不是均匀分布时,可能有助于更好地定义“负载”。如果您指的是服务器资源,那么我建议您确定到底是什么导致负载增加(即某些类型的连接)并从那里反向工作。
这取决于什么协议和要平衡的用例。对于连接量与负载/使用量相关的任何事物,最好使用leastconn
。由于网络和应用程序的工作方式,这几乎总是正确的,leastconn
默认情况下最好使用。
例如,一家公司有一个可供员工连接的远程桌面池。您希望员工可以在台式机之间均匀地分布。
在该用例中,活动连接的数量大约是“现在有多少员工正在使用该桌面”。连接最少的主机使用的员工最少,负载也可能最少。在这种情况下,请使用“最小连接”,它将负载平均分配给用户数量。
理想的负载平衡器应注意远程桌面负载。有多少用户?有多少个应用程序?消耗多少内存和CPU?有一些专用于远程桌面的商业解决方案(Microsoft / Citrix / etc ...),它们通常测量这些指标以很好地传播使用情况。HAProxy是一个简单的网络负载平衡器,它没有比使用计数连接更好的了leastconn
。
使用HTTP,活动连接意味着服务器正在忙于处理请求。连接与负载成正比。您要选择活动连接(正在执行的请求)最少的服务器。使用leastconn
的HTTP(S)流量。
想象一下有两个HTTP服务器的场景,其中一个服务器处理请求的速度较慢(可能是过载,也许是较旧的硬件)。
roundrobin
将在两台服务器之间分配一半请求。这是非常低效的,速度更快的服务器应该花费更多。更糟糕的是,速度较慢的服务器可能会过载,随着更多请求的到来,服务器甚至会变得更慢,并且可能随时开始删除请求。你不要那样
leastconn
会检测到服务器不平衡。速度较慢的服务器将保持更长的连接时间,而连接数却更多。leastconn
考虑到这一点,并且倾向于使用其他服务器。
以我的经验,包括我专门为中型到大型网站进行性能测试的职位。leastconn
效率可以roundrobin
达到HTTP(S)的300%。roundrobin
不能公平地分配连接,这将导致高负载下的不稳定。
(让我们忽略HAProxy不支持UDP,而UDP连接较少)。
最后一个例子。DNS是一个简单的协议。客户端发送一条UDP消息以请求域,而DNS服务器则以一条消息进行回复。
在这种情况下,实际上没有连接。即使有,它也会立即关闭(理论上)。
在这种情况下,对连接进行计数是没有意义的,对于而言并不是最佳选择leastconn
。一个简单的roundrobin
可以分发消息。
人们有时认为他们不应该leastconn
用于短暂的连接(类似于上一个示例)。甚至HAProxy文档也对此产生误导。
leastconn
Use of this algorithm is recommended where very long sessions are
expected, such as LDAP, SQL, TSE, etc... but is not very well
suited for protocols using short sessions such as HTTP.
[misleading advice, should ignore it]
在现实世界中,short connections
这不是一回事。
应用程序基于TCP构建。邮件已传递并经常按顺序处理。服务器慢速或过载时,“短”连接会变长。如果存在(更多)连接,则可能正在完成一些(更多)工作。连接数和连接持续时间各不相同,并具有一定意义。
考虑一个基本的HTTP服务器。有些资产需要花费几毫秒,某些API调用需要花费几秒钟,页面可能需要花费任何时间来加载其中的任何数量的请求,依此类推。leastconn
了解正在进行的活动并调整分布,这正是您希望从负载均衡器中获得的。