Hel*_*ost 10 networking load-balancing
我有一个 udp 服务器,它是我业务流程中的核心部分。为了处理我在生产环境中期望的负载,我可能需要 2 或 3 个服务器实例。服务器几乎完全是无状态的,它主要收集数据,它上面的层知道如何处理可能由多个服务器实例产生的最少量陈旧数据。
我的问题是,如何在服务器之间实现负载平衡?我更愿意在服务器之间尽可能均匀地分配请求。我还想要保真度,我的意思是如果客户端 X 被路由到服务器 y,那么我希望 X 的所有后续请求都转到服务器 Y,只要它是明智的并且不会使 Y 过载。
顺便说一下,它是一个 .NET 系统......你会推荐什么?
状态在服务器内部,而不是某种交易。状态是服务器从它们接收到的数据中聚合的一些数据,并且可以使用简单的 WCF WebService 进行查询。该应用程序基于 UDP,虽然我不同意该决定,但它的“高于我的工资等级”
我目前正在试用 MS 的 NLB,它工作正常,它开箱即用,具有保真度,但它在整个网络上产生噪音......
也没有DNS...哦,这是一个完全的服装协议。
Linux Virtual Server是一个建立在真实服务器集群上的高度可扩展和高度可用的服务器。LVS 支持 UDP 协议和源哈希算法(当您希望客户端始终出现在同一真实服务器上时使用)。
我使用 LVM 来平衡 DNS(rr)、SIP(sh)。
小智 4
我有一个 udp 服务器,[...]服务器几乎完全无状态[..]有一定的保真度,我的意思是如果客户端 X 被路由到服务器 y,那么我希望 X 的所有后续请求都转到服务器 Y,如下所示只要它是合理的并且不会使 Y 过载。
那么,您正在使用未公开的应用程序协议来保留某些应用程序状态并在 UDP 之上运行?你正朝着一个困难的方向前进。UDP 不是一种可靠的数据传输,这就是它的全部要点 - 对于可靠的数据传输,请参阅它的流行朋友 TCP。获得“保真度”的唯一方法是拥有一个负载平衡代理,该代理了解您的应用程序层协议,并且知道您当前的应用程序状态并可以采取相应的操作。
我看到 3 种方法可以接近提供您所寻求的内容:
根据源(最终用户)IP 地址,将传入连接静态分布在 3 个 IP 地址上。这样,给定的用户将始终被定向到同一服务器。大多数专业防火墙都可以为您做到这一点。您可能必须自己使这 3 个服务器高度可用,因为大多数防火墙不会为您进行后端运行状况检查。
使用 DNS,并使用 DNS 循环法,正如 Matt Simmons 已经建议的那样。
使用 Windows 内置的网络负载平衡 (NLB)。老实说,我不知道 NLB 和基于半状态 UDP 的服务如何实现故障转移场景 — 您必须根据应用程序处理状态的方式自行调查。从好的方面来说,NLB 非常容易设置,使用 Windows 许可证免费,成熟且性能良好。
归档时间: |
|
查看次数: |
18632 次 |
最近记录: |