使用PHP根据服务器流量重定向用户

使用PHP根据服务器流量重定向用户,php,curl,Php,Curl,我正在制作一个网站,我想分散我的流量,以避免崩溃,并确保我可以提供100%的正常运行时间。我将通过5个不同的服务器和一个主服务器来实现这一点。请允许我解释一下 我有一个网站(domain.com),在该网站的主页上有一个cURL框架,将用户连接到其他五个流量最少的服务器之一。我希望脚本更改cURL框架以显示流量最少的服务器 有谁能帮我或建议我如何编码,因为我是一个PHP初学者 提前感谢,, Callum您需要一些东西来确定每个服务器上的流量;这将输出一个可以与之进行比较的度量。这五个服务器中的每

我正在制作一个网站,我想分散我的流量,以避免崩溃,并确保我可以提供100%的正常运行时间。我将通过5个不同的服务器和一个主服务器来实现这一点。请允许我解释一下

我有一个网站(domain.com),在该网站的主页上有一个cURL框架,将用户连接到其他五个流量最少的服务器之一。我希望脚本更改cURL框架以显示流量最少的服务器

有谁能帮我或建议我如何编码,因为我是一个PHP初学者

提前感谢,,
Callum

您需要一些东西来确定每个服务器上的流量;这将输出一个可以与之进行比较的度量。这五个服务器中的每一个都应该动态地计算它们的流量负载,并在某个地方进行更新(我建议使用一个数据库)。因此,当用户进来时,您的前端服务器可以在数据库中查询负载最小的服务器,并将其引导到那里。

我们开始:

让5台从属服务器更新主服务器上数据库中的表,每X秒/分钟插入一次负载。然后在主服务器中,检查其中哪个负载最低,并将用户重定向到该特定服务器。

如何获取服务器负载?

有一个函数叫做
sys_getloadavg()
将返回三个样本,分别代表过去1、5和15分钟内在一个数组中的平均系统负载(系统运行队列中的进程数)

这样,如果系统负载超过了设定的数量,您应该将访问者重定向到不同的从属服务器。例如:

$load = sys_getloadavg();
if ($load[0] > 80) {
    //insert into database "I'm busy!!"
    $query = "UPDATE `server_load` SET `load` = $load WHERE `server_id` = 1";
    mysql_query($query);
}
请注意,
$load
上的
0
表示它正在获取最后一分钟的服务器负载,使用1或2表示5分钟和15分钟的平均系统负载。 查询将位于从属服务器上的脚本上,每次运行时,它都会更新表
server\u load
上的平均服务器负载

如何选择主服务器

一旦将“获取服务器负载”功能与从属服务器隔离。您只需从主服务器查询数据库,并从
server\u load
表中获取最低负载。所提到的表具有足够的功能,包括时间戳字段、id字段和具有以下结构的加载字段:

`timestamp` int(11) not_null
`id` int(1) not_null autoincrement
`load` int(3) not_null
对于介绍mysql和php交互的基本教程,我建议从phpsense开始。如果你花足够的时间通读我链接的文档,你应该能够实现你的目标。如果您在本网站上找不到以下问题,请确保以独立实体的身份提出这些问题。他们很可能已经被你之前的人一次又一次地问了。希望我能帮上忙

来源:


Callum,我是新来的,我不确定这是否违反规定,但由于没有消息系统,我将在这里发布此消息。。。对于你提出并删除的关于圆角的问题,答案是将此添加到你的CSS中:(当你删除它时,我发现它不允许我发布)

.结果:第一个孩子{ -左上角moz边界半径:0px; -moz边框半径右上角:10px; -moz边框半径右下角:0px; -moz边框半径左下角:0px; -webkit边界半径:0px 10px 0px 0px; 边界半径:0px 10px 0px 0px; } .结果:最后一个孩子{ -左上角moz边界半径:0px; -moz边框半径右上角:0px; -moz边框半径右下角:10px; -moz边框半径左下角:10px; -webkit边界半径:0px 0px 10px 10px; 边界半径:0px 0px 10px 10px; }
对于初学者来说,我想说的是相当高级的,让我们看看我能为您找到什么。希望当前的答案对您来说足够:)只是一些“问题之外”的想法:这里有一个关键词:负载平衡。对于负载平衡,已经有了可以使用的特殊软件甚至硬件。不需要自己开发。为什么要用PHP来开发呢?给自己找一个合适的负载平衡器,就像Zeiss提到的那样。@Callumwhite:在一些编程问题网站上,这听起来像是两个非常好的问题。:-)回答得很好。但我认为也许你应该改写“每隔X秒/分钟插入他们的负载”。哈哈哈,只要你头脑清醒,这没什么错。如果这只是针对iOS/Android,你可以去掉moz和webkit行 .result:first-child { -moz-border-radius-topleft: 0px; -moz-border-radius-topright: 10px; -moz-border-radius-bottomright: 0px; -moz-border-radius-bottomleft: 0px; -webkit-border-radius: 0px 10px 0px 0px; border-radius: 0px 10px 0px 0px; } .result:last-child { -moz-border-radius-topleft: 0px; -moz-border-radius-topright: 0px; -moz-border-radius-bottomright: 10px; -moz-border-radius-bottomleft: 10px; -webkit-border-radius: 0px 0px 10px 10px; border-radius: 0px 0px 10px 10px; }