[rules-users] Drools Fusion inconsistencies at increasing event throughputs

Vieri vieri.emiliani at gmail.com
Tue Mar 25 06:18:24 EDT 2014


Wolfgang,
thanks for the prompt reply. Inline comments.


On 25 March 2014 09:12, Wolfgang Laun <wolfgang.laun at gmail.com> wrote:

> A rule with timer will only continue firing if its first true state
> remains constant. This means that you can't do what you want to do
> this way. (You might set up a rule with a repeating or cron timer that
> inserts a Trigger fact that triggers the accumulate and is retracted,
> or do some similar haque.)
>

This is exactly what we did (the "pretentiously called" pub/sub pattern).

declare CronTrigger
@role( event )
@timestamp( timestamp )
interval : String
timestamp : Date
end

declare MetricRequest
metric : String
end

declare Subscription
key : String
interval : String
end


 And the rules are:

// Setup rules

rule "Create subscriptions"
when
then
insert( new Subscription("epm", "10s") );
end

// Cron management

rule "Cron trigger 10s"
    timer ( cron: 0/10 * * * * ? )
when
then
entryPoints["triggers"].insert( new CronTrigger( "10s", new Date() ) );
end

rule "Subscription"
when
CronTrigger( $interval := interval ) from entry-point "triggers"
Subscription( $interval := interval, $key : key )
then
entryPoints["requests"].insert( new MetricRequest($key) );
end


// Business rules
rule "Create counter"
    when
    $e : SynthEvent() from entry-point "synth"
    then
    entryPoints["counters"].insert( new EventCounter( $e.getId(), "event",
$e.getTimestamp() ) );
end

// Metrics
rule "Count epm"
when
$req : MetricRequest( metric == "epm" ) from entry-point "requests"
    Number( $count : intValue ) from accumulate(
        EventCounter( key == "event" ) over window:time( 60s ) from
entry-point "counters", count(1) )
then
    logger.debug("epm = {}", $count );
    retract( $req );
end




> The session.execute(command) is a rather roundabout way for inserting
> facts. If you want to be fast,  use session.insert(.).
>
>
Good to know. Still, the system hangs (i.e. no EventCounter event created)
no matter which method I use (session.insert(e),
session.getEntryPoint("synth").insert(e) or
session.execute(CommandFactory.newInsert(e, null, false, "synth")). I
cannot see any evidence that proves one method to be less unstable than the
others. BTW, it seemed to me that session.insert wasn't working properly
but further testing proved I was wrong.



> Don't use rules for keeping track what's going on, or the Heisenberg
> effect will spoil your efforts. It's better to set up insert/retract
> listeners, e.g. for maintaining counters of facts per class. This
> might give you a better idea of what goes on and wrong. (We'd all be
> interested to hear more about the effect you've described!)
>
>
Actually, we are working on a real-time analytic tool and, yes, the
capability to generate temporally aggregated metrics, either from original
or inferred events, is crucial for us. This synthetic example is just a
test case, and I hoped it would go more smoothly. We used ESPER here and
there, and Drools Expert in many of our projects. We would love to switch
to Drools also for the CEP part, but I must admit I am a bit worried by our
initial tests.
Hopefully, with the help of the Drools' Community we'll manage to solve our
current issues ;)

So said:

   1. No matter how we add events to the session, at some point the "Create
   counter" rule stops triggering and inferred events aren't created
   anymore.
   2. If we switch to the pub/sub the system is more stable. Still, it
   hangs as we either increase the throughput or add complexity (read more
   rules).

Hope we'll get some help from this valuable community.
Thanks,

Vieri

Cheers
> -W


P.S. Full source code (not much more than I posted here) available on
request. Just to speed up things a bit ;)


>
> On 25/03/2014, Vieri <vieri.emiliani at gmail.com> wrote:
> > Dear Drools Experts,
> >
> >
> > *Short version*
> >
> >
> >    1. Cron-based rules triggers (more than once) for a full second,
> rather
> >    than once every defined period;
> >    2. After some time, event creation from the drl seems to hang. The
> "time
> >    to hang" decreases as we increase the throughput of incoming events;
> >    3. The two issues seem to be somehow related (well, maybe).
> >
> > *Full version*
> >
> >
> >  We are testing Drools Fusion to implement CEP functionalities in our
> > platform. We are performing these tests using Drools 6.0.1.Final.
> >...


> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



-- 
Vieri Emiliani
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20140325/c16454bf/attachment-0001.html 


More information about the rules-users mailing list