[rules-users] Pooling stateful sessions to have threaded executions of a ruleset

Mercier Jonathan jmercier at genoscope.cns.fr
Fri Apr 11 03:48:29 EDT 2014


Le 09/04/2014 11:20, Maxime Falaize a écrit :
> I confirm that the multithreaded rules evaluation is not currently 
> supported. See 
> https://github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/RuleBaseConfiguration.java#L683
>
>
> 2014-04-07 12:27 GMT+02:00 Maxime Falaize <maxime.falaize at gmail.com 
> <mailto:maxime.falaize at gmail.com>>:
>
>     I'm sorry but I don't understand what you are talking about. In
>     this article, there is nothing about multithreaded rules
>     evaluation. It just says that the Phreak algorithm is designed for
>     thread safety and *future* multicore processors exploitation. It
>     doesn't mean that it is already multithreaded. Moreover I tested
>     my appliciation with and without multithreaded sessions (I am
>     using Drools 6.0.1.Final) and I noted a faster execution in the
>     multithreaded one.
>
>
>     2014-04-04 13:53 GMT+02:00 jmercier <jmercier at genoscope.cns.fr
>     <mailto:jmercier at genoscope.cns.fr>>:
>
>         Le 04/03/2014 09:55, Maxime Falaize a écrit :
>         > Hello,
>         >
>         > I want to ask you if it is a good practive to pool stateful
>         sessions
>         > for a specific ruleset to improve the execution performance.
>         > Actually in my application I execute my rules by calling SOAP
>         > webservice. For performance purpose, I test multithreaded
>         calls to my
>         > webservice and I noted that when I pool sessions in the
>         server side,
>         > it improves the performance a lot.
>         >
>         > To pool sessions, I just declare multiple ksession tag in my
>         > kmodule.xml :
>         >
>         > <kbase name="KBase" packages="com.example.*">
>         >         <ksession name="KSession1"/>
>         >          <ksession name="KSession2"/>
>         >         <ksession name="KSession3"/>
>         >         <ksession name="KSession4"/>
>         >         <ksession name="KSession5"/>
>         >  </kbase>
>         >
>         > In my spring webservice endpoint I just put that code to
>         handle the
>         > pool :
>         >
>         > @Endpoint
>         > public class ExampleEndpoint implements InitializingBean {
>         >
>         >     @Autowired
>         >     private ExampleRuleService ruleService;
>         >      private Map<Integer, Boolean> isRunningMap = new
>         > HashMap<Integer, Boolean>();
>         >     private static final int NB_POOL_SESSIONS = 5;
>         >
>         >     @PayloadRoot(localPart = "com.example.ExampleRequest")
>         >      @ResponsePayload
>         >     public ExampleResponse handleRequest(
>         >             @RequestPayload ExampleRequest request) throws
>         > InterruptedException {
>         >         KieServices ks = KieServices.Factory.get();
>         >         KieContainer kc = ks.getKieClasspathContainer();
>         >          while (true) {
>         >             for (int i = 0; i < NB_POOL_SESSIONS; i++) {
>         >                 boolean run = false;
>         >
>         >                 synchronized (isRunningMap) {
>         >                     if (!isRunningMap.get(i)) {
>         > isRunningMap.put(i, true);
>         >                         run = true;
>         >                     }
>         >                 }
>         >
>         >                 if (run) {
>         >                     KieSession ksession =
>         kc.newKieSession("KSession"
>         > + (i + 1));
>         >                      ExampleResponse response =
>         > ruleService.run(ksession, request);
>         >                     ksession.dispose();
>         >
>         >                     isRunningMap.put(i, false);
>         >                     return response;
>         >                  }
>         >             }
>         >             Thread.sleep(100);
>         >         }
>         >     }
>         >
>         >     public void afterPropertiesSet() throws Exception {
>         >         for (int i = 1; i <= NB_POOL_SESSIONS; i++) {
>         >             isRunningMap.put((i - 1), false);
>         >          }
>         >     }
>         >
>         > }
>         >
>         > It works well because in my benchmark I improve 5 times the
>         > performance (as I have 5 different threads) but I wondered
>         if it is a
>         > good practice and if it does not hide any issues that I
>         could have in
>         > the future.
>         >
>         > Thanks for your help.
>         >
>         > --
>         > Maxime FALAIZE
>         > _______________________________________________
>         > rules-users mailing list
>         > rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
>         > https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>         Hi maxime,
>
>         I do not remember if use drools 6 or drools 5. If you using
>         drools 6.
>         Phreaks algorithm use multi threading according to use 'from
>         accummulate' far i understand here:
>         http://planet.jboss.org/post/drools_6_performance_with_the_phreak_algorithm
>
>         Instead to put a thread by ksession here rules evaluation are
>         multi-threaded.
>
>
>         _______________________________________________
>         rules-users mailing list
>         rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
>         https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
>     -- 
>     Maxime FALAIZE
>
>
>
>
> -- 
> Maxime FALAIZE
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users

Ah yes. Maybe Mark Proktor could tell  some information about this
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20140411/c95b173c/attachment-0001.html 


More information about the rules-users mailing list