【问题标题】:What's the Best method of checking Site / Server Uptime Efficiently (PHP)有效检查站点/服务器正常运行时间的最佳方法是什么(PHP)
【发布时间】:2010-07-03 19:59:34
【问题描述】:

我正在尝试用 PHP 构建一个监控站点/服务器正常运行时间的系统,该系统需要每分钟检查数千个域/ips。我研究了 cURL,因为这似乎是最好的方法。

编辑: 系统将需要探测服务器,检查其响应时间是否合理,并返回其响应代码。然后它将向包含响应时间和状态代码的 mysql 数据库添加一行。系统的通知部分从那里相当直接。该系统将在专用服务器上。希望这会增加一些清晰度。

【问题讨论】:

  • 你能在这些服务器上安装一些东西(或不安装)吗?
  • 您能否稍微扩展一下这个问题,提供的任何解决方案都会有所不同,具体取决于您是否想每次都知道状态(并可能保存),或者您是否只需要知道服务器何时关闭跨度>
  • 放在一边; php 可能不是解决这个问题的最佳语言
  • 是的,它们将是专用的盒子。

标签: php codeigniter curl uptime scalable


【解决方案1】:

为什么不采用 KISS 方法并使用 php 的 get_headers() 函数?

如果你想检索状态码,这里有一个从 cmets 到 php 手册页的 sn-p:

function get_http_response_code($theURL) {
  $headers = get_headers($theURL);
  return substr($headers[0], 9, 3); 
}

这个函数(作为一个核心的 php 特性)应该比 curl 更快更高效。

【讨论】:

  • get_headers() 的问题我无法设置超时... :(
【解决方案2】:

如果我理解正确,你的这个系统会不断地连接到数千个域/ip,如果它工作,它假设服务器已经启动并运行?

我想你可以使用 cURL,但它会花费很长时间,尤其是当你处理数千个请求时 - 你需要多台服务器和大量带宽才能正常工作。

您还可以查看多线程请求的 multi cURL(即同时发送 10+ 个 cURL 请求,而不是一次发送一个)。

http://php.net/manual/en/function.curl-multi-exec.php

【讨论】:

    【解决方案3】:

    有很多很好的工具可以处理这样的事情。不用自己写。

    Nagios 为例。许多管理员使用它进行监控。

    【讨论】:

    • 该系统将成为公共服务,因此它将有一个 php 前端,并且“控制面板”Nagios 看起来更适合 sysmins?
    • Nagios 可以通过 PHP 模块轻松扩展,用于前端以及服务器检查接口。
    【解决方案4】:

    您的瓶颈将在于等待给定主机响应。给定 30 秒超时和 N 个要检查的主机,并且除最后一个主机之外的所有主机都没有响应,您需要等待 30(N-1) 秒才能检查最后一个主机。您可能永远无法检查最后一个主机。

    您当然需要发送多个 HTTP 请求 - 或者是已经建议的多个 cURL,或者是用于 OO 方法的 HttpRequestPool 类。

    您还需要考虑如何将 N 个主机的集合分解为最大数量的子集,以避免由于必须首先处理无响应队列而导致无法到达主机的问题主机。

    检查来自 1 台服务器的 N 台主机最有可能由于无响应主机队列而无法到达一台或多台主机。这是最便宜、最简单、最不可靠的选择。

    从 N 个服务器中分别检查 1 台主机,由于没有响应的主机队列,导致无法到达一台主机而没有到达一台或多台主机的可能性最小。这是最昂贵、(可能)最困难和最可靠的选择。

    考虑最适合您的成本/难度/可靠性平衡。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      • 2013-08-25
      • 1970-01-01
      • 2018-07-21
      相关资源
      最近更新 更多