[Erlang] Распараллелить следующее
От: ZveN  
Дата: 31.05.08 14:26
Оценка:
Привет!
Имеется 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}.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.