我正在使用数组来尝试“负载平衡”多个 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 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);
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 ) ];