-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdrools-platform.html
550 lines (462 loc) · 31.4 KB
/
drools-platform.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
<!DOCTYPE html>
<html lang="en">
<head>
<title>Pymma Software</title>
<meta charset="utf-8">
<!--[if IE]><meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'><![endif]-->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link
href='http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,800,700,600,300'
rel='stylesheet' type='text/css'>
<link
href='http://fonts.googleapis.com/css?family=Titillium+Web:600,600italic,300italic,700italic,700,200,400,200italic,400italic,900,300'
rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="css/bootstrap.css" media="screen">
<!-- REVOLUTION BANNER CSS SETTINGS -->
<link rel="stylesheet" type="text/css" href="css/fullwidth.css" media="screen" />
<link rel="stylesheet" type="text/css" href="css/settings.css" media="screen" />
<link rel="stylesheet" type="text/css" href="css/jquery.fancybox-1.3.4.css" media="screen">
<link rel="stylesheet" type="text/css" href="css/font-awesome.css" media="screen">
<link rel="stylesheet" type="text/css" href="css/jquery.bxslider.css" media="screen">
<link rel="stylesheet" type="text/css" href="css/flexslider.css" media="screen">
<link rel="stylesheet" type="text/css" href="css/style.css" media="screen">
<link rel="stylesheet" type="text/css" href="css/responsive.css" media="screen">
<link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon">
<link rel="icon" href="img/favicon.ico" type="image/x-icon">
<script src="js/modernizr.min.js"></script>
<script>
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date(); a = s.createElement(o),
m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-60086731-1', 'auto');
ga('send', 'pageview');
</script>
</head>
<body>
<!-- Preloader -->
<div id="preloader">
<div id="status"> </div>
</div>
<!-- Container -->
<div id="container">
<!-- Header
================================================== -->
<header class="clearfix" id="home">
<!-- Static navbar -->
<nav class="navbar navbar-default navbar-static-top">
<div class="top-line">
<div class="container">
<div class="row">
<ul class="top-socials col-md-4">
<li><a href="#"><i class="fa fa-linkedin"></i></a></li>
<li><a href="#"><i class="fa fa-skype"></i></a></li>
</ul>
<ul class="top-info col-md-5 col-md-offset-3">
<li><a href="#"><i class="fa fa-envelope"></i>[email protected]</a></li>
<li>
<p><i class="fa fa-phone"></i>+ 33 320 307 130</p>
</li>
</ul>
</div>
</div>
</div>
<!-- end topline -->
<nav class="navigation">
<div class="container">
<div class="logo">
<a href="index.html"><img src="img/pymma-software-2014.png" alt=""></a>
</div>
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse"
data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active drop"><a href="index.html">Home</a>
</li>
<!--li class="drop"><a href="services.html">Services</a></li-->
<li><a href="about.html">About Us</a></li>
<li class="drop"><a href="#">Portfolio</a>
<ul class="drop-down">
<li><a href="drools-platform.html">Drools Platform</a></li>
</ul>
</li>
<li><a href="contact.html">Contact</a></li>
</ul>
</div>
</div>
</nav>
</nav>
</header>
<!-- End Header -->
<div class="banner">
<div class="container">
<h4>About</h4>
<div class="site_map">
<a href="index.html">Home</a> / Drools Platform
</div>
<div class="clear"></div>
</div>
</div>
<!-- content
================================================== -->
<div class="history white-bg">
<div class="container">
<h1 class="main-title">Drools Platform</h1>
<div class="main-border"></div>
<p class="main-subtitle">Our story</p>
<div class="timeline animated">
<div class="timeline-row">
<div class="timeline-time">
What is a rules engine and what does it enable ?
</div>
<div class="timeline-icon">
<div class="bg">
<i class="fa fa-circle-o"></i>
</div>
</div>
<div class="panel timeline-content">
<div class="panel-body">
<h2>
1970 and the Rete Paradigm
</h2>
<p>
<p>To understand what a rule engine is and why it was designed, we need to go back to
the 1970s. In the world of research, the notion of object language appeared at that
time and it was necessary to model the whole business and to implement it through
this notion of modeling around object language.</p>
<p>In the 1990s, this way of programming spread through many languages such as C++ or
java/dotnet for information systems. It soon became apparent that this way of doing
things, although it had many advantages over procedural programming, had some
shortcomings.</p>
<p>In the case of numerous, complex and often changing business rules, object modeling
had many limitations and above all the business code was distributed across all
objects and made maintainability complex and costly. The object world had an answer
for all its design problems: design pattern in business modeling principles.
As far as the business is concerned, it is a question of putting in one place and
thus facilitating evolution and maintainability (pattern strategy). </p>
<p> But the performance and completeness of the computer code produced then always
depends on the dexterity of the developer.</p>
<p>So a solution had to be found for this.</p>
<p> In 1983, a young American student (Charles Forgy) defended his thesis on the
development of an algorithm to represent and execute business rules: the Rete
algorithm. (network in Latin). </p>
<p> This algorithm :
<p>1) Allows you to describe the rules (declarative programming) in the form of "if
facts are true then I do actions (add, modify or delete a fact). In fact, the
algorithm will allow you to infer (reason) on facts to continue your reasoning. This
description is done in a clean rule description language.</p>
<p>2) Implement an execution engine that will read the rules, represent these rules in a
graph called "Rete", and allow to browse this graph to know which rules to execute
according to input data and data produced by the rules.</p>
</p>
</p>
</div>
</div>
</div>
<div class="timeline-row">
<div class="timeline-time">
What does the Rete algorithm resolves ?
</div>
<div class="timeline-icon">
<div class="bg">
<i class="fa fa-circle-o"></i>
</div>
</div>
<div class="panel timeline-content">
<div class="panel-body">
<p>What is important to understand is that this algorithm has been designed to solve
the following problems:</p>
<p>- Decouple the writing of rules from their execution. Indeed, end-users describe
their business rules one after the other and it is the chaining of these rules that
carries out the business. It was therefore necessary to have a type of tool that
would allow this way of doing things to be monitored.</p>
<p>- Business rules can change often. It is therefore necessary to be able to quickly
change rules and execute them taking into account the changes.</p>
<p>
This approach allows a business analyst to describe and implement rules without
worrying about scheduling or the performance of the code produced, as was the case
for the programmer in the previous case.</p>
<p>
Many rule engines stop there and the rules are verified one after the other. This is
very inefficient when there are many rules. These tools allow you to organize the
rules to overcome this problem.</p>
<p>But performance degrades quickly and to overcome this, Rete's algorithm goes
further:</p>
<p>- It will index the rules and therefore at each start up each modification will be
taken into account. This tree is stored in random access memory. Depending on the
input data and the data modified by the rules, the algorithm will browse this tree.
Obviously, there are indexes, hashmaps that are created by the algorithm to quickly
find the potentially executable rule(s).</p>
<p>This allows the tools implementing this algorithm :
<p>- To have performances that remain constant (or almost constant) no matter how many
rules are declared (the start time can change).</p>
<p>- To have Excellent execution performance (+ 50k rules per second). This is true if the
rules are well written and the data model is well business oriented (this is the
same problem as for relational databases).</p>
</p>
<p>In our feedbacks, for example a loyalty system with a basket of 100 products and
10-20 business operations, we have a few hundred rules running (depending on the
rules) and all in less than 300-400 ms from end to end maximum. It obviously depends
on how the rules have been written and the hardware on which the rules run
(virtualized environments don't always have very powerful processors).</p>
<p>It is important to understand that a rule engine such as drools runs entirely in RAM
and therefore makes full use of the processor power through this indexing of the
management rules, because there is no waiting for availability of tier service data
as there is when waiting for data from a database.
</p>
<p>It is important to keep these facts in mind because choosing a tool such
as drools, even if it implies changes in programming paradigm (procedural to
declarative) and technical constraints, allows you to
perpetuate your information system by investing in a tool that
<p>- Has very good execution performance no matter (almost) how many rules are
declared.</p>
<p>- Allows you to decouple management rules from the rest of the information system.
</p>
<p>- Allows rules to be reused by other systems (subject to technical constraints such
as the existence of a service rest for a mainframe).</p>
<p>- Allows more business profiles to focus on business rules. And we know that such a
profile stays longer in a company.</p>
<p>- As part of an open source tool such as drools to be independent of an editor</p>
</p>
</p>
</div>
</div>
</div>
<div class="timeline-row">
<div class="timeline-time">
Drools brief history & our platform
</div>
<div class="timeline-icon">
<div class="bg">
<i class="fa fa-circle-o"></i>
</div>
</div>
<div class="panel timeline-content">
<div class="panel-body">
<p>The drool ruler engine appeared in the years 2003/2004. It is open source and its use
is regulated by the Apache Open Source Foundation license in version 2. This license
allows a professional use without fear of possible lawsuits on the product code
(business rules) to use drools. </p>
<p>It is necessary to be careful because many open source tools such as noSQL MongoDB or
ElasticSearch databases change their distribution license and make it less open.</p>
<p>Drools is maintained by RedHat/jboss (the publisher of the Redhat Linux distribution)
which is a subsidiary of IBM. So far, this acquisition has only been good for
Drools. A large community gravitates around drools and remote very quickly all the
anomalies and proposes patches.</p>
<p>Originally, drools had only one programming interface (API) and the rules were
written in a specific language: drl = drools rule language. </p>
<p>It was necessary to program from computer tools.</p>
<p>Since then, the community has equipped itself with a web, multi-user and
multi-project interface that allows to manage the whole life cycle of the rules from
their writing to the construction of an executable binary by the rule engine.</p>
<p>It is a tool that allows to develop and fine-tune rules but :
<p>- The deployment of the solution has to be built each time as high availability.</p>
<p>- There is no trace tool to see what happens during rule execution, which rules have
been executed, what data is present etc... You have to write it to yourself each
time.</p>
<p>- User rights management is possible but needs to be configured.</p>
</p>
<p>It is an Open source tool which is a "Swiss Army knife" that you have to adapt to
your needs.</p>
<p>For 14 years, we have been involved in drools projects: training, support and/or
implementation of drools rules. This has allowed us to accompany our customers not
only in the implementation of the rules but also in its implementation in the
technical infrastructure of our customers.</p>
<p>From this long project experience, we have developed our platform which allows us to
start a drools project with everything in it very quickly:
<p>- User management</p>
<p>- Storage of traces</p>
<p>- Deployment of new rule packages to the execution engines</p>
<p>- Added a new runtime engine that configures itself</p>
<p>- All this from docker containers and/or via devops scripts Ansible</p>
</p>
<p>Our platform in its current form is in production at two customers, one of which is
using Openshift./p>
<p>Otherwise, most of our customers use parts of our platform, especially for traces of
executed rules.</p>
<p>Our tool therefore offers
<p>- A load balancer that will direct traffic to the right runtime engine,</p>
<p>- An administration interface that allows to manage users, projects, deployment,
adding</p>
<p>execution engine and viewing execution traces.</p>
<p>- We take over the web interface of the community and we have integrated it</p>
</p>
<p> By default, on the development workstation, all this runs in dock containers.</p>
</div>
</div>
</div>
<div class="timeline-row">
<div class="timeline-time">
Who can use our tool ?
</div>
<div class="timeline-icon">
<div class="bg">
<i class="fa fa-circle-o"></i>
</div>
</div>
<div class="panel timeline-content">
<div class="panel-body">
<p>Our tool is open source with the same License as drools itself and the source code is
available on GitHub.</p>
<p>
We put all our developments there.</p>
<p>The objective is to propose mid-2021 a hosted offer to allow a fast availability
according to the customer's needs.</p>
<p>Our offer will come in several forms:
<p>- An offer for the trainings that we propose: we are rewriting our trainings to be
able to run them on our hosted offer with a dedicated graphical interface</p>
<p>- A mutualized offer but separating customer data from each other</p>
<p>- A dedicated offer on the main cloud offers on the market. The customer will be on
his servers or on servers that we will take for him.</p>
</p>
<p>The offer is currently being finalized and we are focusing on the first two points
with a shared offer that we will host in our (small) Datacenter in our premises in
the first instance.</p>
<p>The goal is to facilitate access to training and project launch. The user will be
able to quickly and easily have all the elements at his disposal to develop the
rules and to execute them. He will be able to access his execution engine via a
secure internet address (url).</p>
</div>
</div>
</div>
<div class="timeline-row">
<div class="timeline-time">
Adoption problems
</div>
<div class="timeline-icon">
<div class="bg">
<i class="fa fa-circle-o"></i>
</div>
</div>
<div class="panel timeline-content">
<div class="panel-body">
<p>The product as it is has been developed over the last 5 years over the course of time.</p>
<p>As for the brakes on the adoption of the ruler engine, they are numerous but we will
describe one of the biggest problems we are currently encountering.</p>
<p>Computing has always been sensitive to modes/currents such as client/server, object
modeling, multi-layer, micro-service, serverless, etc.</p>
<p>Thanks to open source, everything is going faster and technologies are advancing very
fast. There was a time when the concept of cobol was changed every 20/30 years</p>
<p>We focus on implementing complex business rules in back-office or middle-office
applications.</p>
<p>Many people think that the solution always comes from a good choice of technical
architecture and the simplification that is often made is to choose a micro-service
"cloud" technical architecture and that therefore the scalability will be done without
any worries and with extraordinary results.</p>
<p>we shall skip over the fact that this considerably enriches the companies that offer this
(the cloud).</p>
<p>These new approaches lead developers to cut business processing into multiple calls to a
rule engine or a program implementing business rules.</p>
<p>A simple call to find out which business offerings are adapted to the customer and based
on their history will require 5-15 calls to finer services (or micro services). We are
talking about experience feedback and not theoretical cases. This requires from those
who make these small services very important performances, so all these calls in the end
cost a lot in performance.</p>
<p>The result of all this is that instead of focusing on rich business development all the
teams are just solving technical problems.</p>
<p>We haven't talked about drools in detail here but this tool allows component management
and therefore from these to make a single service that can provide all services in one
call. This requires an adapted software architecture to do so.</p>
<p>We made prototypes for these customers where we could have correct performances.</p>
<p>In the 5-15 services example, our implementation was much better on a full call versus
the 15 services call and only the unit had the same performance.</p>
<p>This implementation of the 5-15 services has as a consequence a limitation of its use to
have correct performance.</p>
<p>But for those who need to implement complex back-office rules and offer it to a web site
or partners and who are aware that they have to do otherwise by using an efficient
algorithm, drools is an excellent solution.</p>
</div>
</div>
</div>
</div>
<!-- End History -->
<!--div class="impression">
<div class="container">
<h1>Do you want a demonstration of drools in Action ?</h1>
<p>Soon, we can propose you a demonstration drools and our tooling on the cloud</p>
<a href="contact.html" class="button-def">Get Started</a>
</div>
</div-->
</div>
<!-- End drools Platform -->
</div>
<!-- End content -->
<!-- footer
================================================== -->
<footer>
<div class="inner-footer">
<div class="container">
<div class="row">
<div class="col-md-3 f-about">
<h3>About Us</h3>
<p>Pymma Software is a french based company skilled in Software Development and consultancy.
Expertise in Business Rules & Processes Engines and SOA are our basement for enabling
our customers to be successful</p>
</div>
<div class="col-md-3 f-contact">
<h3>Get in touch</h3>
<p><i class="fa fa-map-marker"></i>133 rue Simon Vollant <br>
59130 Lambersart - FRANCE</p>
<p><i class="fa fa-phone"></i> +33 972 644 673</p>
<a href="#"><i class="fa fa-envelope"></i>[email protected]</a>
</div>
</div>
</div>
</div>
<!-- end contanir & inner-footer -->
<div class="last-div">
<div class="container">
<div class="row">
<div class="copyright">
© 2014 Pymma Software
</div>
<div id="back-to-top">
<a href="#top">Back to Top</a>
</div>
<ul class="foot-socials">
<li><a href="#"><i class="fa fa-twitter"></i></a></li>
<li><a href="#"><i class="fa fa-facebook"></i></a></li>
<li><a href="#"><i class="fa fa-linkedin"></i></a></li>
<li><a href="#"><i class="fa fa-google-plus"></i></a></li>
<li><a href="#"><i class="fa fa-skype"></i></a></li>
</ul>
<div class="clear"></div>
</div>
</div>
</div>
</footer>
<!-- End footer -->
</div>
<!-- End Container -->
<script type="text/javascript" src="js/jquery.min.js"></script>
<script src="js/jquery-1.10.2.min.js"></script>
<script type="text/javascript" src="js/jquery.bxslider.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
<script type="text/javascript" src="js/jquery.appear.js"></script>
<script type="text/javascript" src="js/waypoint.min.js"></script>
<script type="text/javascript" src="js/jquery.countTo.js"></script>
<script type="text/javascript" src="js/jquery.migrate.js"></script>
<script type="text/javascript" src="js/jquery.flexslider.js"></script>
<script src="js/main.js"></script>
<!-- jQuery KenBurn Slider -->
<script type="text/javascript" src="js/jquery.themepunch.revolution.min.js"></script>
<script type="text/javascript" src="js/jquery.countTo.js"></script>
<script type="text/javascript" src="js/script.js"></script>
<!-- include jQuery + carouFredSel plugin -->
<script type="text/javascript" src="js/jquery.carouFredSel.js"></script>
<!-- optionally include helper plugins -->
<script type="text/javascript" src="js/jquery.mousewheel.min.js"></script>
<script type="text/javascript" src="js/jquery.touchSwipe.min.js"></script>
<!-- Style Switcher -->
<script src="js/styleswitch.js"></script>
<script src="js/style_switch_custom.js"></script>
</body>
</html>