snmpbulkwalk на Erlang

По работе приходится писать софт для мониторинга сетей и устройств(которых бывают тысячи и десятки тысяч), поэтому приходится пробовать что-то новое, для обеспечения соответствующей производительности.

Задался вопросом, а можно ли использовать Erlang  для обеспечения сбора информации по SNMP с тысяч устройств. Пока тестовой зоны нет, привожу реализацию клиента осуществляющий получение таблицы интефейсов(ifTable).

Код как доступен на GitHub’e

Параллельный алгоримт Брона — Кербоша на Erlang

Предисловие

На четвертом курсе, по предмету сети мне выдали курсовую работу по разработке вычислительного грида, решающий какую либо ресурсоемкая  задачу. Задачу выбрал перемножение больших матриц и реализацию делал в распределенной ОС Inferno программируя на shell, т. к. Limbo (один из прародителей Go) не очень пришелся по душе, и был ограничен в свободном времени, т. к. совмещал учебу с работой.

Квалификационная работа бакалавра

Прочитав различные статьи по технологии грид, захотелось поэкспериментировать с диспетчеризацией процессов, а так же использовать что-то более интересное чем shell. И тут наткнулся на Erlang.

На мой взгляд Erlang хорошо подходил для конкретной задаче по следующим критериям:

  • параллельность- это свойство языка, Erlang распределенный язык;
  • функциональная парадигма, хорошо подходит, для реализации формальных алгоритмов.

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

Исходники записки в LaTeX куда то пропали, а остался код(распределенная и параллельная версия программы) и отчет использование ресурсов Intel Manycore Testing Lab, где тестировалась параллельная версия программы.