воскресенье, ноября 26, 2006

Новое обновление

Дятел оборудован клювом. Им он долбит.


В одной из сетей, в которых установлен Scepsis, была замечена странная аномалия - сервер потреблял порядка 90% процессорного времени. Проведённое на скорую руку расследование выявило одну из возможных причин: арп-флуд. Однако флуд пошёл на спад, загрузка же осталась прежней. Проведённый анализ трафика сервера показал наличие огромного количества запросов на обновление списка контактов.

Поясню, в чём заключается проблема. Процесс обновления списка контактов в ичате выглядит следующим образом: клиент отправляет запрос на обновление, адресуемый всем клиентам (себе в том числе). Каждый клиент (!), получивший этот запрос, отправляет запрашиваемому клиенту refresh-ответ для каждой линии, на которой он присутствует.

Что же происходило в нашем случае. При арп-флуде часть соединений неизбежно обрывается, список довольно быстро устаревает, поэтому пользователи начинают активно пользоваться кнопкой "обновить список". Поскольку процесс обновления требует некоторого времени, а при флуде это время несколько больше чем обычно, пользователю начинает казаться, что нажатие кнопки не возымело нужного действия, и он нажимает её ещё раз. И ещё раз. И ещё много-много раз. Ограничения на количество нажатий в клиенте нет. Таким образом вследствие этой недоработки провоцируется огромное количество ненужных сообщений, которые обрабатываются сервером, и соответственно ресурсы сервера расходуются впустую.

Подумав и проведя ряд экспериментов, я пришёл к выводу, что можно совершенно безболезненно ограничить хождение рефреш-запросов, а точнее их частоту для каждого клиента. Введение ограничения на частоту рефреш-запросов равное одному запросу в пятнадцать секунд показало просто поразительные результаты! Загрузка сервера снизилась с 90 процентов до близкой к нулю, с волнообразными всплесками, характерными для "естественного" цикла обновлений списков контактов.

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

Комментариев нет: