Привет!
Имеется gen_event который слушает udp порт, получает пакеты и преобразует их в erlang'овый record.
Пакетов _очень много_ и бывают сильные всплески — доходят они далеко не все, очень много потерь.
Так как позднее нужно будет писать данные в БД и проводить над ними различные вычисления (причем и писать и считать сразу), то встает вопрос об архитуктуре приложения, как это все грамотно распараллелить, господа?!
Приветствую объяснения "на пальцах" ибо пока еще императивная голова набекрень и отсутствует опыт реализации распределенных систем.
-module(module_in_awesome_erlang)
-behaviour(gen_event).
...
init([]) ->
{ok, Socket} = gen_udp:open(?DEFAULT_PORT, ?UDP_OPTIONS),
{ok, #state {socket = Socket}}.
...
handle_info({udp, Socket, _, _, Packet}, State) ->
{ok, Record} = netflow5:decode_packet(Packet),
gen_event:notify(?MODULE, {packet, Record}),
{ok, State}.
handle_event({packet, Record}, State) ->
% will save to database in future ;)
{ok, State}.