检查站点是否过载


Checking if site is overloaded

我看到一些网站显示一条消息说它们"超载"。不知道这是否是与数据库的连接正在最大化。

这是以编程方式完成的吗?还是通过服务器设置?

一般来说,这通常是负载均衡器设置,而不是直接编码到应用程序中的内容。负载均衡器偶尔会检查站点的服务器的运行状况,并在检测到流量不可用或具有高延迟等时将流量路由到其他服务器/站点。

将其编码到您的应用程序中意味着,如果您的服务器负载过重并且应用程序速度变慢,则检查它是否过载的代码也会变慢。如果这是有道理的。

编辑:为了扩展如何使用负载均衡器完成此操作,您通常会在应用程序中有一个页面运行一些基本检查,如果一切正常,则返回 HTTP 200,如果情况不正常,则返回 HTTP 503。然后,负载均衡器将访问服务器上的该 URL,并检查响应代码以查看它是启动还是关闭(您可以配置检查的频率(。如果它起来了,很酷。如果它关闭,它将开始将流量发送到其他地方。

由于您控制检查页面,因此您可以根据需要编写检查。通常,您只会在那里进行一些快速的健全性检查。例如,尝试连接到您的数据库,如果它给您一个"连接过多"错误,则返回 503,负载均衡器就会知道您过载了。

如果您只关心数据库大小写,而不关心服务器负载或延迟等内容,则可以通过在连接到数据库时捕获任何错误并在发生这种情况时将用户重定向到静态页面来获得类似的结果。例如

try
{
    $dbh = new PDO("mysql:host=localhost;dbname=whatever", $user, $pass);
}
catch (PDOException $e)
{
    header("Location: /site_overloaded_message.html"); exit();
}