[erlang-questions] How to do this in Erlang -- any suggestions ?
Edmond Begumisa
ebegumisa@REDACTED
Tue Jun 14 18:39:27 CEST 2011
The more I think about it, the more I think Banibrata is really onto
something here!
A generic tool of this nature could be rather useful. If such a tool
allowed me to say things like...
"If 30 'EXIT' messages appear in supervision subtree Y over a period of
1sec and 60% of these contain {tcp_error, _} then call
sasl:set_alarm({'network_down', Y})" in which case an SMS would be sent to
my phone.
I can think of a million uses for such a tool :)
- Edmond -
On Tue, 14 Jun 2011 06:13:56 +1000, Mihai Balea <mihai@REDACTED> wrote:
>
> On Jun 13, 2011, at 9:12 AM, Banibrata Dutta wrote:
>
>>
>> Well, I haven't. In fact, starting with a small set of possible
>> patterns, seems to be the most intuitive approach. When I bring in the
>> thought of permitting non-programmers to write "something" (e.g.
>> natural language rules, or a simple DSL snippet), and then such a thing
>> modifying the FSM, without me having to code anything further in
>> Erlang, is when I am hitting a mental roadblock. I've coded fairly
>> complex FSM's in C/C++ using the table-based approach. Does gen_fsm
>> take a similar approach ? Will it be a good, natural fit ? Maybe a
>> rather naive question for people extremely familiar with Erlang, but
>> I'm still very much on the learning curve's positive vector.
>
> Erlang gen_fsms are quite simple and standard, they define a bunch of
> states and use pattern matching to select actions for each state/event
> combination. Pretty much equivalent to a table-based fsm, only there's
> no distinct table to speak of.
>
>
>>
>> however you might want to make them a bit more flexible. Maybe have a
>> bunch of processes running pattern recognizers, say one process per
>> pattern or class of patterns.
>>
>> My natural tendency was to think more in terms of 1 process per source,
>> e.g. 1st event from a source causes an Erlang process to be created,
>> which then embodies the entire possible FSM. The main issue with
>> pattern based processes (if I understood it correctly), is determining
>> the right process to hand-off the event to, and once handed-off,
>> backtracking would mean extra work.
>>
>> Maybe you can filter events based on source so certain recognizers will
>> only get certain events.
>>
>> Yes, that was the starting point, as I had imagined.
>
> Event forwarding based on source is technically easy in Erlang, just use
> a process registry (proc, grpoc, even the built in process registrar)
> and use sources as keys.
> The problem with this approach is you might have at least some
> correlation between sources. Events originating from different sources
> but belonging to the same pattern (i.e. server going black due to switch
> failing in some other room, due to power outage and the like).
>
>>
>> If you have a low correlation between event sources maybe you can even
>> design your system to distribute the processing of unrelated events to
>> different nodes in a cluster (big scalability gain if you can do that).
>>
>> Excellent thought... indeed. Source based sharding.
>>
>> Another way of approaching this would be to duplicate the event stream
>> to multiple nodes in your cluster and have each node only look for
>> certain subsets of patterns.
>>
>> Actually, my bad, I should've mentioned, I wanted to do all this in
>> Real-Time. So I don't really have a pattern-string, so to say. I don't,
>> without that I can really take this approach. Or can I ?
>
> I think you can. If your patterns are independent, or at least can be
> grouped in independent categories, what would prevent you from assigning
> sets of independent patterns to different nodes? Not saying you need to
> do that, but it might be helpful if you find out that recognizing and
> processing thousands of patterns take up too much cpu.
>
> Mihai
>
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
More information about the erlang-questions
mailing list