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

时间:2017-11-08 13:30:09

标签: c++ performance load-balancing scheduling random-access

H_ello可爱的人,

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

组件最初在中央单元处注册IP和端口。该管理器定期发送到可以找到其他组件的组件。但不仅如此,每个组件都被赋予了与其他组件相比应该解决的频率的重量/概率/机会。

作为示例:1Master,组件A,B,C 所有在Master注册的组件,Master发送给A:[B(127.0.0.1:8080, 3 ); C(127.0.0.1:8081。 5 )]

A循环运行并从此数据反复计算通信伙伴。

因此,A应该以3比5的比例请求B和C.每个最终获得的请求数取决于运行性能。这与比率有关。

当然,数字3和5会定期出现并动态变化。它不是3个组件,但可能有数百个。

我的想法是:

添加3和5.计算1到8之间的随机数。如果大于3,则取C else B ....

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

谢谢你的每一个案例;)

1 个答案:

答案 0 :(得分:1)

我有个想法: 为什么不尝试累积概率?

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;
    }
}