roundrobin
关于什么时候应该使用什么时候使用有什么建议leastconn
吗?
我roundrobin
目前正在使用并观察到我的后端服务器的负载分布不均匀。当然可能还有其他问题,但我们想leastconn
试一试,但由于它是关键任务服务器,我想在进行更改之前参考其他经验。
有什么想法可以分享吗?
roundrobin
关于什么时候应该使用什么时候使用有什么建议leastconn
吗?
我roundrobin
目前正在使用并观察到我的后端服务器的负载分布不均匀。当然可能还有其他问题,但我们想leastconn
试一试,但由于它是关键任务服务器,我想在进行更改之前参考其他经验。
有什么想法可以分享吗?
我没有尝试过 leastconn,但我的理解是,leastconn 的典型用例是当您对可能具有长期连接的东西进行负载平衡时。这样做的原因是 leastconn 专注于确保平衡的并发性,因为 road robin 将提供更平衡的到达率。如果这种区别不清楚,请参阅我对差异的回答。
当您说负载分布不均时,可能有助于更好地定义“负载”。如果您指的是服务器资源,那么我建议您确定究竟是什么导致了负载增加(即某些类型的连接)并从那里向后工作。
这取决于要平衡的协议和用例。对于连接数量与负载/使用情况相关的任何情况,最好使用
leastconn
. 由于网络和应用程序的工作方式,它几乎总是正确的,你最好leastconn
默认使用。RDP / X11 远程桌面 / 跳转主机
例如,一家公司有一个员工连接到的远程桌面池。您希望员工在桌面之间稍微均匀地分布。
该用例中的活动连接数大致是“现在有多少员工正在使用该桌面”。连接最少的主机使用它的员工最少,而且它可能负载最少。在这些情况下使用“leastconn”,它会根据用户数量平均分配负载。
理想的负载均衡器应该知道远程桌面负载。有多少用户?有多少申请?消耗了多少内存和CPU?有专用于远程桌面的商业解决方案(Microsoft/Citrix/等...),它们通常测量这些指标以很好地传播使用。HAProxy 是一个简单的网络负载均衡器,它不能比使用
leastconn
.HTTP / HTTPS
对于 HTTP,活动连接意味着服务器正忙于处理请求。连接数与负载成正比。您希望选择活动连接数最少的服务器(正在进行的请求)。用于
leastconn
HTTP(S) 流量。想象一个有两台 HTTP 服务器的场景,其中一台服务器处理请求的速度较慢(可能它超载了,也可能它的硬件较旧)。
roundrobin
将在两个服务器之间分配一半的请求。这是非常低效的,更快的服务器应该占用更多。更糟糕的是,较慢的服务器可能会过载,随着更多请求的进入,它会变得更慢,并且可能随时开始丢弃请求。你不想要那个。leastconn
会检测到服务器不均匀。较慢的服务器保持连接的时间更长,它的连接数更高。leastconn
考虑到这一点并更喜欢另一台服务器。根据我的经验,包括我专门为中型到大型网站进行性能测试的角色。
leastconn
可以比roundrobin
HTTP(S) 高效 300%。roundrobin
不公平地分配连接,它会导致高负载不稳定。DNS请求
(让我们忽略 HAProxy 不支持 UDP 并且 UDP 是无连接的)。
最后一个例子。DNS 是一个简单的协议。客户端发送单个 UDP 消息来请求域,DNS 服务器在单个消息中回复。
在这种情况下,并没有真正的联系。即使有,也会立即关闭(理论上)。
在这些情况下计算连接数是没有意义的,它不是
leastconn
. 一个简单的roundrobin
可以分发消息。一个常见的误解
人们有时认为他们不应该
leastconn
用于短暂的连接(类似于最后一个例子)。甚至 HAProxy 文档对此也具有误导性。在现实世界中,
short connections
不是一个东西。应用程序建立在 TCP 之上。消息通常按顺序传送和处理。当服务器速度慢或过载时,“短”连接会变长。如果有(更多)连接,则可能有一些(更多)工作正在完成。连接计数和连接持续时间各不相同且有意义。
想想一个基本的 HTTP 服务器。一些资产需要几毫秒,一些 API 调用需要几秒钟,一个页面可能需要任何时间来加载其中的任何数量的请求,等等。请求不是短暂的,它们的生命周期取决于在哪个服务器上处理什么。
leastconn
了解正在进行的活动并调整分配,这正是您想要从负载均衡器获得的。