使用随机化来实现服务器负载平衡?

问题描述 投票:0回答:2

我正在使用数组来尝试“负载平衡”多个 RTMP 服务器。

$servers = array(
    '1.1.1.1',
    '2.2.2.2',
);
$edge = $servers[array_rand($settings)];

但是这段代码没有多大帮助;我最终在一台服务器上得到 3k,在另一台服务器上得到 2k。

我正在考虑利用 APC 并缓存最后给出的 IP,以跟踪用户之间更好的 IP 分配。

我需要的是,一个人获得IP 1.1.1.1,下一个获得IP 2.2.2.2,以维护具有更近距离用户范围的服务器,而不是一个人获得3k,另一个人获得2k。

我可以使用 MySQL,但我可能会用所有请求来敲击服务器。

实现 IP 正确分配的最佳方法是什么?

php random load-balancing
2个回答
1
投票

这是一个简单的示例,说明如何使用 php memcached 循环三个数组键:

$servers = ['1.1.1.1','2.2.2.2','3.3.3.3'];
$m = new Memcached();
$m->addServer('localhost', 11211);
$key = $m->get('server');
if ($key === false) $key = 0;
echo $servers[$key];
if (++$key > count($servers) - 1) $key = 0;
$m->set('server', $key);

0
投票

在放弃随机方法之前,您应该尝试一下

mt_rand
函数。它产生比
rand
array_rand
更多的随机结果。

$servers = array(
    '1.1.1.1',
    '2.2.2.2',
);
$num_servers = count( $servers );
$edge = $servers[ mt_rand( 0, $num_servers - 1 ) ];
© www.soinside.com 2019 - 2024. All rights reserved.