warning :
these slides pre-suppose you
have some familiarity
with ruote (0.9.x)
‣ recap : ruote
‣ is a ruby workflow engine
‣ ruby makes it easy to tinker and try
‣ workflows should be easy to tinker
and try
‣ with some discipline, you might
even end up doing BPM with it
agenda
agenda
ruote 2.0 engine
‣ ruote engine : historically
‣ middleware/backend-ish
‣ not for your big front web 2.0 app
‣ cheap workflow engine
‣ 1 engine per business unit
‣ ruote engine : core requirements
‣ has to run multiple processes
‣ with multiple branches
‣ and/or subprocesses
‣ can be stopped / restarted
(if running with persistent storage)
‣ can run multiple versions of any
process
‣ has to allow in-flight modifications
to processes
‣ ruote 2.0 engine
‣ multi ruby process resilient :(
‣ complete rewrite
with a cleaner interface
‣ multi-process
‣ the average user wants to put ruote
in his rails app
‣ the rails app is
in a ‘multi-process’ ruby web server
‣ ruote 0.9 is
in trouble...
‣ multi-process resilience
‣ ruote 2.0 knows it could run in a
multi-process env
‣ it has defense mechanisms
things like ‘tickets’ and ‘locks’
‣ they have a cost :-(
‣ suggestions
‣ avoid mp envs for ruote
(the engine is idle most of the time)
‣ run ruote as a webservice
in a 1p env
‣ (ruote in 1p can use “caching”
and be faster)
‣ our favourite env these days
‣ ruote-{kit|http}
workflow as an http service
‣ ruote-amqp
‣ remote participants
as amqp (daemons)
http://github.com/kennethkalmer/daemon-kit
‣ load on ruote itself is low
‣ anyway...
‣ 1 engine that scale
for everything ?
‣ why not 1 engine
per domain / unit ?
‣ why not a separation between
tactical and technical engines ?
‣ why not engines that talk to each
other ?
‣ scale the business
or scale the tools ?
‣ engine workqueue
‣ where each operation is performed
‣ only 1 op at a time
‣ by default, uses Thread/Queue
‣ uses EventMachine if present
‣ future work :
‣ fibers ?
‣ it’s an implementation away
‣ anyway, engine is idle most of the
time (usually waiting for those slow
humans)
cleaner interface
cleaner interface
ruote 2.0 process definitions
‣ AST is JSON friendly
‣ attributes common to all expressions
‣ :if / :unless
‣ :timeout, :on_timeout
‣ :on_cancel / :on_error
‣ :forget
‣ directed commands
‣ break :ref => ‘tag’
‣ jump :to => ‘tag’
‣ concurrent_iterator enhancements
‣ subprocesses and apply
‣ ...
AST is JSON friendly
XML is still here
‣ common attributes
‣ can be given to any expression
:if / :unless
:timeout
:on_timeout
‣ :on_error
‣ much like begin / rescue...
‣ occurs when error is triggered
‣ error is thus not logged in
error_journal
:on_error
:on_error
‣ :on_cancel
‣ subprocess or participant
triggered
when expression gets cancelled
‣ unlike :on_error
trigger happens when cancel is
complete
:on_cancel
:forget
‣ cursor / jump
‣ can now jump to
a tag,
a participant name or
a subprocess name
‣ almost that
‘cursors as state machines’
feeling
‣ works with repeat (loop)
as well
cursor / jump
‣ directed commands
‣ cursor/repeat has
jump/rewind/break/... commands
‣ until now these commands were
only meant for the enclosing cursor/
repeat
‣ now with :tag and :ref,
more precision is possible
‣ works with the iterator expression
as well
‣ ruote 0.9.x had the ‘eval’ expression
‣ evaluating segments of process
‣ ruote 2.0 has ‘apply’
‣ same mission
‣ and more (yield)
vanilla apply
yield like apply
set ‘v:x’ => ‘y’
‣ engine variables
‣ can be read from processes
‣ cannot be set from processes
‣ are thus on the same foot as
participants
(which are registered at the engine
level)
engine vars
engine vars
‣ more about
process definitions and
expressions
http://ruote.rubyforge.org/expressions.html
http://ruote.rubyforge.org/patterns.html
‣ ruote-amqp
amqp participants and listeners
http://github.com/kennethkalmer/ruote-amqp
‣ ruote-fluo
still in the run
http://github.com/jmettraux/ruote-fluo
Initial presentation of Ruote 2.0. The slides were more
Initial presentation of Ruote 2.0. The slides were presented by Nando Sola for the first "Ruedas y Cervezas" in Madrid 2009-10-08.
The first part enumerates technical issues ruote 2.0 wanted to solve while the second part is about enhancement to the process definition language itself. less
0 comments
Post a comment