Каков наилучший метод проверки работоспособности сайта / сервера (PHP) - PullRequest
0 голосов
/ 03 июля 2010

Я пытаюсь построить систему мониторинга работоспособности сайта / сервера на PHP, система должна будет проверять тысячи доменов / ips в минуту.Я посмотрел в cURL, так как это, кажется, лучший метод.

Редактировать: Система будет обязана проверять сервер, проверять его время отклика и возвращать код ответа.Затем он добавит в базу данных mysql строку, содержащую время ответа и код состояния.Часть уведомлений системы довольно проста.Система будет на выделенных серверах.Надеюсь, что это добавляет ясности.

Ответы [ 4 ]

1 голос
/ 04 июля 2010

Почему бы не пойти на подход KISS и использовать функцию php get_headers () ?

Если вы хотите получить код состояния, вот фрагмент из комментариев к странице руководства php:

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

Эта функция (будучи основной функцией php) должна быть быстрее и болееэффективнее, чем скручиваемость.

1 голос
/ 04 июля 2010

Есть очень хорошие инструменты для подобных вещей. Не нужно писать это самостоятельно.

Посмотрите, например, Nagios . Многие администраторы используют его для мониторинга.

1 голос
/ 04 июля 2010

Ваше узкое место будет в ожидании ответа данного хоста.Учитывая 30-секундный таймаут и N хостов для проверки, и все, кроме последнего хоста, не отвечают, вам нужно подождать 30 (N-1) секунд, чтобы проверить последний хост.Возможно, вам никогда не удастся проверить последний хост.

Вам, безусловно, нужно отправить несколько HTTP-запросов - либо multi-cURL, как уже предлагалось, либо класс HttpRequestPool для подхода OO.

Вам также нужно будет подумать, как разбить набор из N хостов, чтобы проверить максимальное количество подмножеств, чтобы избежать проблемы с невозможностью связаться с хостом из-за необходимости сначала иметь дело с очередью неотвечающихhosts.

Проверка N хостов с 1 сервера дает наибольший шанс не достичь одного или нескольких хостов из-за очереди не отвечающих хостов.Это самый дешевый, самый простой и наименее надежный вариант.

Проверка 1 хоста на каждом из N серверов дает наименьшую вероятность того, что один из них не достигнет одного или нескольких хостов из-за очереди не отвечающих хостов.Это самый дорогой, (возможно) самый трудный и самый надежный вариант.

Рассмотрите баланс затрат / сложности / надежности, который лучше всего подходит для вас.

1 голос
/ 04 июля 2010

Если я правильно понимаю, ваша система будет постоянно подключаться к тысячам доменов / ips, и если она работает, предполагается, что сервер запущен и работает?

Полагаю, вы могли бы использовать cURL, но это займет много времени, особенно если вы говорите тысячи запросов - вам потребуется несколько серверов и большая пропускная способность, чтобы это работало правильно.

Вы также можете взглянуть на multi-cURL для многопоточных запросов (т.е. одновременно отправлять более 10 запросов cURL, а не по одному за раз).

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

...