Your SlideShare is downloading. ×
0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
towards ruote 2.0
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

towards ruote 2.0

526

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. …

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
526
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. ruote 2.0 2009/10/07
  • 2. warning : these slides pre-suppose you have some familiarity with ruote (0.9.x)
  • 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. agenda
  • 5. agenda
  • 6. ruote 2.0 engine
  • 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. ‣ 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. ‣ ruote 2.0 engine ‣ multi ruby process resilient :( ‣ complete rewrite with a cleaner interface
  • 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. ‣ 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. ‣ 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. ‣ 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. ‣ 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. cleaner interface
  • 16. cleaner interface
  • 17. ruote 2.0 process definitions
  • 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. AST is JSON friendly
  • 20. XML is still here
  • 21. ‣ common attributes ‣ can be given to any expression
  • 22. :if / :unless
  • 23. :timeout
  • 24. :on_timeout
  • 25. ‣ :on_error ‣ much like begin / rescue... ‣ occurs when error is triggered ‣ error is thus not logged in error_journal
  • 26. :on_error
  • 27. :on_error
  • 28. ‣ :on_cancel ‣ subprocess or participant triggered when expression gets cancelled ‣ unlike :on_error trigger happens when cancel is complete
  • 29. :on_cancel
  • 30. :forget
  • 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. cursor / jump
  • 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. rewind :ref => ‘tag’
  • 35. skip :ref => ‘tag’
  • 36. ‣ concurrent_iterator ‣ :times / :branches ‣ add_branches partner expression
  • 37. concurrent_iterator
  • 38. concurrent_iterator
  • 39. ‣ ruote 0.9.x had the ‘eval’ expression ‣ evaluating segments of process ‣ ruote 2.0 has ‘apply’ ‣ same mission ‣ and more (yield)
  • 40. vanilla apply
  • 41. yield like apply
  • 42. set ‘v:x’ => ‘y’
  • 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. engine vars
  • 45. engine vars
  • 46. ‣ more about process definitions and expressions http://ruote.rubyforge.org/expressions.html http://ruote.rubyforge.org/patterns.html
  • 47. 2.0 projects
  • 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. ‣ 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. ‣ 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. ‣ ruote [2.0] website http://ruote.rubyforge.org ‣ ruote mailing list http://groups.google.com/group/openwferu-users ‣ freenode.net IRC #ruote
  • 52. many thanks to everyone in the community especially to the “ruedas y cervezas” participants ;-)

×