在可变数量的服务器之间拆分流量的算法

Algorithm to split traffic across variable number of servers

我有一个 .NET Core 服务 AAA,它从另一个 Core 服务 BBB 检索一些数据。 BBB 有一个内存缓存(ConcurrentDictionary),部署到 10 个盒子。要缓存的数据总大小约为100GB。

AAA 将有一个 运行 BBB 的服务器列表,我正在考虑按照 ServerId = DataItemId % 10 的方式做一些事情,以便每个盒子都能提供服务并缓存 10%总数据集。我想不通的是,当其中一个 BBB 盒子出现故障时该怎么办(例如,由于 Windows 更新)。

是否有一些算法来拆分流量,允许服务器关闭和打开,但仍将大部分请求重定向到已兑现相关数据的服务器?

Azure 负载均衡器不与应用程序负载交互。它根据散列函数做出决策,该散列函数包括 TCP/UDP 传输 IP 数据包的 5 元组。 Basic 和 Standard LB 的区别在于,Standard LB 使用了改进的哈希函数。对于请求的份额没有严格的保证,但是随着时间的推移到达的流的数量应该是相对均匀的。健康探测可用于检测后端实例是健康还是生病。这控制新流是否到达后端实例。 https://aka.ms/lbprobes 有详细信息。