拥有用于动态机会/概率的简单负载均衡器(在C++中,但语言无关)

Own simple load balancer for dynamic chances / probabilities (in C++ but language undependent)

本文关键字:C++ 语言 均衡器 机会 动态 用于 概率 负载 简单 拥有      更新时间:2023-10-16

H_ello可爱的人,

我的程序是作为一个可扩展的网络框架编写的。它由几个作为单独程序运行的组件组成。可以动态添加各个组件的附加实例。

组件最初在一个中央单元注册IP和端口。该管理器定期发送到可以找到其他组件的组件。但不仅如此,每个组件都被分配了一个权重/概率/机会,与其他组件相比,它应该多久处理一次。

例如:1主机,组件A、B、C所有在Master注册的组件,Master发送到A:[B(127.0.0.1:8080,3);C(127.0.0.1:80815)]

A在循环中运行,并根据这些数据反复计算通信伙伴。

因此,A应该以3比5的比例请求B和C。每个请求最终得到的请求数取决于运行性能。这是关于比例的问题。

当然,数字3和5是周期性的,并且是动态变化的。它不是关于3个组件,而是可能的数百个。

我的想法是:

添加3和5。计算一个介于1和8之间的随机数。如果大于3,则取C,否则取B。。。。

但我认为这不是一个干净的解决方案。可能在每个循环中都是计算密集型的。此外,管理和数据结构也很昂贵。此外,我认为STL中的随机数不够平衡。有人能给我一个提示吗,我是如何干净地实现这一点的,或者有人有经验或想法吗?

在任何情况下都要感谢您;)

我有个主意给你:为什么不试试累积概率呢?

1.)生成一个均匀分布的随机数。2.)遍历列表,直到访问元素的累积概率大于随机数。

看看这个(Java代码,但也可以用C++),(你暗示你使用C++非常好!!)

double p = Math.random();
double cumulativeProbability = 0.0;
for (Item item : items) {
cumulativeProbability += item.probability();
if (p <= cumulativeProbability) {
return item;
}
}