Перенаправить пользователей на основе трафика сервера с помощью PHP - PullRequest
8 голосов
/ 13 ноября 2010

Я создаю веб-сайт и хочу распределить трафик, чтобы избежать сбоев и обеспечить 100% бесперебойную работу.Я сделаю это, имея 5 разных серверов и один главный сервер.Позвольте мне объяснить.

У меня есть один веб-сайт (domain.com), и на домашней странице этого сайта есть фрейм cURL, который соединяет пользователей с одним из пяти других серверов, на которых меньше всего трафика.Я хочу, чтобы скрипт изменил фрейм cURL для отображения сервера с наименьшим трафиком.

Может кто-нибудь помочь мне или подсказать, как я мог бы это написать, поскольку я новичок в PHP.

Спасибо зазаранее, Каллум

Ответы [ 3 ]

10 голосов
/ 13 ноября 2010

Вот и мы:

Получить 5 подчиненных серверов для обновления таблицы в базе данных на главном сервере, вставляя их нагрузку каждые X секунд / минут. Затем на главном сервере проверьте, какой из них имеет наименьшую нагрузку, и перенаправьте пользователя на этот конкретный сервер. alt text

Как получить нагрузку на сервер?

Есть функция с именем 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);
}

Обратите внимание, что 0 на $load означает, что он получает нагрузку на сервер за последнюю минуту, используйте 1 или 2 для 5 и 15-минутной средней загрузки системы. Запрос будет выполняться по сценарию на подчиненных серверах, и каждый раз, когда он будет выполняться, он будет обновлять среднюю нагрузку на сервер в таблице server_load.

Как выбрать с основного сервера

После того, как вы изолировали функцию 'get server load' от подчиненных серверов. Все, что вам нужно сделать с главного сервера, это запросить базу данных и получить наименьшую нагрузку из таблицы server_load. Упомянутая таблица будет достаточно функциональной с полем отметки времени, полем идентификатора и полем загрузки со следующей структурой:

`timestamp` int(11) not_null
`id` int(1) not_null autoincrement
`load` int(3) not_null

Для базового учебника по взаимодействию с mysql и php я предлагаю ссылку из phpsense. Если вы посвятите достаточно времени чтению документации, с которой я вас связал, вы сможете достичь своей цели. Обязательно задавайте все следующие вопросы как независимые лица, если вы не можете найти их на этом сайте. Скорее всего, их снова и снова спрашивали люди, предшествовавшие вам. Надеюсь, я помог.

Источники:

1 голос
/ 13 ноября 2010

Вам понадобится что-то для определения трафика на каждом сервере;это должно вывести метрику, с которой вы можете сравнить.Каждый из пяти серверов должен динамически вычислять нагрузку своего трафика и обновлять его где-нибудь (я бы предложил базу данных).Таким образом, ваш интерфейсный сервер может при входе пользователя запрашивать базу данных для сервера с наименьшей нагрузкой и направлять их туда.

0 голосов
/ 10 июля 2011

Каллум, я новичок здесь, и я не совсем уверен, что это противоречит правилам, но так как нет системы обмена сообщениями, я публикую это здесь ... Ответ на ваш вопрос, который вы задавали и удалялизакругленные углы, чтобы добавить это в ваш CSS: (я выяснил, когда вы удалили его, а затем он не позволил мне публиковать)

.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;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...