Какой лучший способ «пинговать» тысячи серверов каждую минуту? - PullRequest
0 голосов
/ 02 сентября 2011

Я запускаю сайт мониторинга сервера для видеоигры.Он контролирует тысячи серверов (в настоящее время 15 000 или около того).

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

У меня 20 работников, и оно выполнит работу примерно за 5минут.Я чувствую, что это должно быть гораздо быстрее.

Есть ли лучший, более быстрый способ сделать это?

Ответы [ 3 ]

1 голос
/ 02 сентября 2011

Используйте типичные решения для типичных задач. Этот случай касается доступного обнаружения каждые n секунд - одна из ежедневных задач sysadmin. Он не должен быть поверх ICMP, используйте протокол SNMP поверх UDP. Одним из комплексных решений является Nagious / Cacti / Zabbix, которые имеют встроенную функциональность для объединения всего, что есть в ваших серверах: LA, HDD, RAM, IO, NET, а также доступного обнаружения.

1 голос
/ 02 сентября 2011

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

Вот хорошая цитата из другого вопроса:

>        UDP is really faster than TCP, and the simple reason is because
> it's non-existent acknowledge packet (ACK) that permits a continuous
> packet stream, instead of TCP that acknowledges each packet.

Прочтите этот вопрос здесь: UDP против TCP, насколько он быстрее?

Исходя из моего опыта работы с игровыми серверами, большинство , если не 100% всех современных игровых серверов, позволяют запрашивать их наUDP-сокет.Затем он ответит подробностями на игровом сервере.(Я тоже раньше размещал много серверов).

В общем, убедитесь, что вы используете UDP, а не TCP ...

Пример запроса

Я просто сейчас ищу эту информацию и будуобновите мой вопрос ... когда я найду какой-нибудь источник ... для какой игры вы пытаетесь получить информацию?

0 голосов
/ 02 сентября 2011

Вы не упоминаете, как выполняете соединения с сокетом, но вы можете попробовать использовать привязки ruby ​​curl: curb вместо net / http.

Это обычно будет намного быстрее.

...