ruote 2.0




            2009/10/07
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 ...
agenda
agenda
ruote 2.0 engine
‣   ruote engine : historically
    ‣ middleware/backend-ish
    ‣ not for your big front web 2.0 app
    ‣ cheap workflow ...
‣   ruote engine : core requirements
    ‣ has to run multiple processes
      ‣ with multiple branches
      ‣ and/or sub...
‣   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 ‘mult...
‣   multi-process resilience
    ‣ ruote 2.0 knows it could run in a
      multi-process env
    ‣ it has defense mechanis...
‣   our favourite env these days
    ‣ ruote-{kit|http}
      workflow as an http service
    ‣ ruote-amqp
    ‣ remote par...
‣   anyway...
    ‣ 1 engine that scale
      for everything ?
    ‣ why not 1 engine
      per domain / unit ?
    ‣ why ...
‣   engine workqueue
    ‣ where each operation is performed
    ‣ only 1 op at a time
    ‣ by default, uses Thread/Queue...
cleaner interface
cleaner interface
ruote 2.0 process definitions
‣   AST is JSON friendly
‣   attributes common to all expressions
    ‣ :if / :unless
    ‣ :timeout, :on_timeout
    ‣ :o...
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
   ...
:on_error
:on_error
‣   :on_cancel
    ‣ subprocess or participant
      triggered
      when expression gets cancelled
    ‣ unlike :on_error...
:on_cancel
:forget
‣   cursor / jump
    ‣ can now jump to
      a tag,
      a participant name or
      a subprocess name
    ‣ almost that...
cursor / jump
‣   directed commands
    ‣ cursor/repeat has
      jump/rewind/break/... commands
    ‣ until now these commands were
   ...
rewind :ref => ‘tag’
skip :ref => ‘tag’
‣   concurrent_iterator
    ‣ :times / :branches
    ‣ add_branches partner expression
concurrent_iterator
concurrent_iterator
‣   ruote 0.9.x had the ‘eval’ expression
    ‣ evaluating segments of process
‣   ruote 2.0 has ‘apply’
    ‣ same missio...
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 a...
engine vars
engine vars
‣   more about
    process definitions and
    expressions
    http://ruote.rubyforge.org/expressions.html

    http://ruot...
2.0 projects
‣   ruote-dm
    datamapper persistence
    http://github.com/jmettraux/ruote-dm
‣   ruote-ar
    activerecord persistence...
‣   ruote-kit
    full blown ruote-rest evolution
    http://github.com/kennethkalmer/ruote-kit
‣   ruote-http
    tiny si...
‣   ruote-amqp
    amqp participants and listeners
    http://github.com/kennethkalmer/ruote-amqp
‣   ruote-fluo
    still ...
‣   ruote [2.0] website
    http://ruote.rubyforge.org
‣   ruote mailing list
    http://groups.google.com/group/openwferu...
many thanks
to everyone in the community
especially to the “ruedas y cervezas”
participants ;-)
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
Upcoming SlideShare
Loading in …5
×

towards ruote 2.0

704 views

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
704
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

towards ruote 2.0

  1. 1. ruote 2.0 2009/10/07
  2. 2. warning : these slides pre-suppose you have some familiarity with ruote (0.9.x)
  3. 3. ‣ 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
  4. 4. agenda
  5. 5. agenda
  6. 6. ruote 2.0 engine
  7. 7. ‣ ruote engine : historically ‣ middleware/backend-ish ‣ not for your big front web 2.0 app ‣ cheap workflow engine ‣ 1 engine per business unit
  8. 8. ‣ 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
  9. 9. ‣ ruote 2.0 engine ‣ multi ruby process resilient :( ‣ complete rewrite with a cleaner interface
  10. 10. ‣ 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...
  11. 11. ‣ 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)
  12. 12. ‣ 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
  13. 13. ‣ 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 ?
  14. 14. ‣ 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)
  15. 15. cleaner interface
  16. 16. cleaner interface
  17. 17. ruote 2.0 process definitions
  18. 18. ‣ 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 ‣ ...
  19. 19. AST is JSON friendly
  20. 20. XML is still here
  21. 21. ‣ common attributes ‣ can be given to any expression
  22. 22. :if / :unless
  23. 23. :timeout
  24. 24. :on_timeout
  25. 25. ‣ :on_error ‣ much like begin / rescue... ‣ occurs when error is triggered ‣ error is thus not logged in error_journal
  26. 26. :on_error
  27. 27. :on_error
  28. 28. ‣ :on_cancel ‣ subprocess or participant triggered when expression gets cancelled ‣ unlike :on_error trigger happens when cancel is complete
  29. 29. :on_cancel
  30. 30. :forget
  31. 31. ‣ 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
  32. 32. cursor / jump
  33. 33. ‣ 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
  34. 34. rewind :ref => ‘tag’
  35. 35. skip :ref => ‘tag’
  36. 36. ‣ concurrent_iterator ‣ :times / :branches ‣ add_branches partner expression
  37. 37. concurrent_iterator
  38. 38. concurrent_iterator
  39. 39. ‣ ruote 0.9.x had the ‘eval’ expression ‣ evaluating segments of process ‣ ruote 2.0 has ‘apply’ ‣ same mission ‣ and more (yield)
  40. 40. vanilla apply
  41. 41. yield like apply
  42. 42. set ‘v:x’ => ‘y’
  43. 43. ‣ 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)
  44. 44. engine vars
  45. 45. engine vars
  46. 46. ‣ more about process definitions and expressions http://ruote.rubyforge.org/expressions.html http://ruote.rubyforge.org/patterns.html
  47. 47. 2.0 projects
  48. 48. ‣ ruote-dm datamapper persistence http://github.com/jmettraux/ruote-dm ‣ ruote-ar activerecord persistence http://github.com/kennethkalmer/ruote-activerecord ‣ ruote-couch (coming soon) couchdb persistence http://github.com/kennethkalmer/ruote-couch
  49. 49. ‣ ruote-kit full blown ruote-rest evolution http://github.com/kennethkalmer/ruote-kit ‣ ruote-http tiny sinatra ruote webservice http://github.com/jmettraux/ruote-http
  50. 50. ‣ ruote-amqp amqp participants and listeners http://github.com/kennethkalmer/ruote-amqp ‣ ruote-fluo still in the run http://github.com/jmettraux/ruote-fluo
  51. 51. ‣ ruote [2.0] website http://ruote.rubyforge.org ‣ ruote mailing list http://groups.google.com/group/openwferu-users ‣ freenode.net IRC #ruote
  52. 52. many thanks to everyone in the community especially to the “ruedas y cervezas” participants ;-)

×