Ограничение процессорной нагрузки (реализация)
Материал из 1GbWiki.
NovaCxarmulo (Обсуждение | вклад)
(Новая: == Принцип работы == Каждую минуту запускается парсер запросов к серверу, который записывет время обра...)
К следующему изменению →
Версия 19:00, 3 апреля 2008
Содержание |
Принцип работы
Каждую минуту запускается парсер запросов к серверу, который записывет время обработки запросов в базу данных MySQL, а в начало каждого php-скрипта добавляется префикс, получающий статистику нагрузки для своего сайта и принимающий решение о блокировании дальнейшей обработки скрипта.
Сама база данных работает в отдельном экземпляре MySQL с максимально упрощенной авторизацией, все таблицы держатся в памяти, поэтому дополнительные запросы статистики не создают заметной нагрузки на сервер.
Реализация
Статистика нагрузки рассчитывается сервером и записывается в базу, к которой можно подключиться из своих скриптов и понять помент, в который нужно заблокировать работу сайта для предотвращения выхода им за допустимую процессорную нагрузку.
Собственный алгоритм блокировки можно реализовать на любом из доступных языков программирования, ниже приведено подробное описание формата данных и
Формат конфигурационного файла
В конфигурационном для нашей реализаци используются пары ключ-значение по одному на строку в формате:
key=value
Сейчас подерживаются два параметра: FULL_BLOCK, CLIENT_BLOCK в обоих указывается процент нагрузки от одного ядра процессора.
Пример содержания файла:
FULL_BLOCK=3 CLIENT_BLOCK=0.05
Параметры для доступа к базе
Сервер: 127.0.0.1 Порт: 3399 База: ProcLimit; Пользователь: user Без пароля.
Структура таблиц
Список сайтов
Sites | ||||
---|---|---|---|---|
Таблица недоступна для свободного чтения | Поле | Тип | Пример | Описание |
ID | CHAR(32) | 6652D7688AF645EFF4FBD40B05A62C28 | MD5 имени сайта, буквы заглавные | |
Name | VARCHAR(255) | MYSITE.RU | Доменное имя сайта заглавными буквами, без WWW. |
Лог запросов
Logs | |||
---|---|---|---|
Поле | Тип | Пример | Описание |
HASH | INT | -1839737443 | Хеш строки из лог-файла, нужен для внутренних целей. |
Site_ID | CHAR(32) | 6652D7688AF645EFF4FBD40B05A62C28 | MD5 имени сайта, буквы заглавные |
Time | DATETIME | 2008-04-03 21:10:15 | Время вызова файла скрипта |
ProcessorTime | INT | 76 | Число миллисекунд процессорного времени, потраченых сервером на обработку запроса. |
IP | INT(4) | -712745798 | IP-адрес, IP-адрес с которого был сделан запрос (алгоритм перевода IP-адреса в число можно посмотреть в примере реализации) |
Статистика по сайту
Summary | |||
---|---|---|---|
Поле | Тип | Пример | Описание |
Site_ID | CHAR(32) | 6652D7688AF645EFF4FBD40B05A62C28 | MD5 имени сайта, буквы заглавные |
ProcessorTime | INT | 2037 | Число миллисекунд процессорного времени, потраченное сервером на обработку запросов к сайту за последний час. |
Статистика по сайту и IP-адресу
IPSummary | |||
---|---|---|---|
Поле | Тип | Пример | Описание |
Site_ID | CHAR(32) | 94 | MD5 имени сайта, буквы заглавные |
IP | INT | 367 | IP-адрес, с которого поступали запросы (алгоритм перевода IP-адреса в число можно посмотреть в примере реализации) |
ProcessorTime | INT | 2037 | Число миллисекунд процессорного времени, потраченное сервером на обработку запросов к сайту, поступивших с этого IP-адреса. |