Доброго времени суток. Работаю над системой мониторинга ориентированной на работу в глобальной сети, с большим количеством клиентов… Клиент на c, сервер — erlang. Так как erlang слаб в арифметике, но очень хорошо работает с сетью, а большинство хостинг-площадок предоставляют анлимный трафик, ценообразующим фактором для них является процессор/память, возникла идея — перенести код отвечающий за анализ данных мониторинга непосредственно в клиенте, где проблем с лишними вычислительными мощностями нет. Небольшая задержка в формирование alarm'а не критична. Как это вижу я. Допустим есть пять программ-клиентов, есть величина подсчитываемая как сумма одноименных, или нет, параметров с этих клиентов. Так вот, сервер при получение свежих данных от одного из клиентов, просто ретранслирует их остальным четверым. При получение alarm'а, на сервере выставляется флажок и сообщения о возникновение alarm'а от остальных клиентов просто игнорируются, какое-то время. Хотелось бы услышать ваше мнение о подобной схеме.
P.S. Если конструктивная критика не убьет полёт этой мысли, дальше планирую дополнить клиент p2p-функционалом, то-есть хочется добиться того, чтобы сервер исключительно координировал работу клиентов, принимал alarm'ы, а сообщениями они обменивались непосредственно между собой.
Не понятно зачем клиент получает инфу от другого клиента.
А вообще — считаю что это неправильно. Агент должен быть маленьким и не мешать серверу работать. Его дело — собрать в себя текущие данные и выплюнуть серверу. А сервер должен считать — потому как именно в нем есть все данные о клиенте.
Повесьте логику на базу — считайте все в ней. Или сделайте сервер приложений, который будет для вас считать, если erlang не справляется.
pavelsh, но ведь в данном случае, выходит, что клиент как раз играет роль той компоненты, сервера приложения, отвечающей за интенсивные вычисления. Только она будет не отдельном процессом на том же сервере, а будет работать по сети, к тому-же обеспечивая резервирование и возможность безболезненного обновления.
Насчёт размера агента, код отвечающий за обработку данных и генерацию alarm'ов — +500 кб к размеру бинарника — максимум. А если вы говорили, про лишнюю нагрузку которую он создаёт нв процессор, то это даже не предмет для разговора, учитывая мощности современных компьютеров. К тому же, реализовав подобный подход к вычислениям, ровным счётом ничего не мешает завести отдельные ноды конкретно под alarm'ы, написанные хоть на ассемблере. Вешать логику на базу данных — считаю моветоном.
Если честно, не увидел в комментариях, того на что рассчитывал, увы.