SlideShare a Scribd company logo
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 to tinker
      and try
    ‣ with some discipline, you might
      even end up doing BPM with it
agenda
agenda
towards ruote 2.0
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
towards ruote 2.0
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
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 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
towards ruote 2.0
2.0 projects
‣   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
‣   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
‣   ruote-amqp
    amqp participants and listeners
    http://github.com/kennethkalmer/ruote-amqp
‣   ruote-fluo
    still in the run
    http://github.com/jmettraux/ruote-fluo
towards ruote 2.0
‣   ruote [2.0] website
    http://ruote.rubyforge.org
‣   ruote mailing list
    http://groups.google.com/group/openwferu-users
‣   freenode.net IRC
    #ruote
many thanks
to everyone in the community
especially to the “ruedas y cervezas”
participants ;-)

More Related Content

PPTX
Being agile with modern Java
PDF
Ansible Israel Kickoff Meetup
PPTX
React Fiber
PPTX
Akka: Arquitetura Orientada a Atores
ODP
Rbenv
PDF
Haibu: dev deployment is fast and easy again
KEY
Ruote: A Ruby workflow engine
KEY
Being agile with modern Java
Ansible Israel Kickoff Meetup
React Fiber
Akka: Arquitetura Orientada a Atores
Rbenv
Haibu: dev deployment is fast and easy again
Ruote: A Ruby workflow engine

Similar to towards ruote 2.0 (20)

PDF
ruote stockholm 2008
PPTX
Exploring Ruby on Rails and PostgreSQL
PDF
Functional Web Apps with WebMachine Framework - Mikhail Bortnyk
PDF
Functional Web Apps with WebMachine Framework
PDF
TorqueBox at DC:JBUG - November 2011
PDF
The Current State of Asynchronous Processing With Ruby
PDF
RubyKaigi 2014: ServerEngine
KEY
Polyglot parallelism
KEY
TorqueBox - Ruby Hoedown 2011
PDF
Pwrake: Distributed Workflow Engine for e-Science - RubyConfX
KEY
Cooking a rabbit pie
PPTX
Day 1 - Intro to Ruby
KEY
Messaging, interoperability and log aggregation - a new framework
PPTX
IronRuby - A brave new world for .Net (NDC2010)
KEY
Fast, concurrent ruby web applications with EventMachine and EM::Synchrony
KEY
Concurrency in ruby
PDF
TorqueBox
PDF
The Year of JRuby - RubyC 2018
PDF
When Ruby Meets Java - The Power of Torquebox
PPT
Ruby On Rails
ruote stockholm 2008
Exploring Ruby on Rails and PostgreSQL
Functional Web Apps with WebMachine Framework - Mikhail Bortnyk
Functional Web Apps with WebMachine Framework
TorqueBox at DC:JBUG - November 2011
The Current State of Asynchronous Processing With Ruby
RubyKaigi 2014: ServerEngine
Polyglot parallelism
TorqueBox - Ruby Hoedown 2011
Pwrake: Distributed Workflow Engine for e-Science - RubyConfX
Cooking a rabbit pie
Day 1 - Intro to Ruby
Messaging, interoperability and log aggregation - a new framework
IronRuby - A brave new world for .Net (NDC2010)
Fast, concurrent ruby web applications with EventMachine and EM::Synchrony
Concurrency in ruby
TorqueBox
The Year of JRuby - RubyC 2018
When Ruby Meets Java - The Power of Torquebox
Ruby On Rails
Ad

Recently uploaded (20)

PDF
Encapsulation theory and applications.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Approach and Philosophy of On baking technology
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Encapsulation theory and applications.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
NewMind AI Weekly Chronicles - August'25 Week I
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
“AI and Expert System Decision Support & Business Intelligence Systems”
Approach and Philosophy of On baking technology
Network Security Unit 5.pdf for BCA BBA.
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Mobile App Security Testing_ A Comprehensive Guide.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Unlocking AI with Model Context Protocol (MCP)
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Chapter 3 Spatial Domain Image Processing.pdf
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
20250228 LYD VKU AI Blended-Learning.pptx
Building Integrated photovoltaic BIPV_UPV.pdf
CIFDAQ's Market Insight: SEC Turns Pro Crypto
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Ad

towards ruote 2.0

  • 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
  • 8. ruote engine : historically ‣ middleware/backend-ish ‣ not for your big front web 2.0 app ‣ cheap workflow engine ‣ 1 engine per business unit
  • 9. 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
  • 10. ruote 2.0 engine ‣ multi ruby process resilient :( ‣ complete rewrite with a cleaner interface
  • 11. 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...
  • 12. 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)
  • 13. 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
  • 14. 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 ?
  • 15. 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)
  • 19. ruote 2.0 process definitions
  • 20. 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 ‣ ...
  • 21. AST is JSON friendly
  • 22. XML is still here
  • 23. common attributes ‣ can be given to any expression
  • 27. :on_error ‣ much like begin / rescue... ‣ occurs when error is triggered ‣ error is thus not logged in error_journal
  • 30. :on_cancel ‣ subprocess or participant triggered when expression gets cancelled ‣ unlike :on_error trigger happens when cancel is complete
  • 33. 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
  • 35. 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
  • 36. rewind :ref => ‘tag’
  • 37. skip :ref => ‘tag’
  • 38. concurrent_iterator ‣ :times / :branches ‣ add_branches partner expression
  • 41. ruote 0.9.x had the ‘eval’ expression ‣ evaluating segments of process ‣ ruote 2.0 has ‘apply’ ‣ same mission ‣ and more (yield)
  • 44. set ‘v:x’ => ‘y’
  • 45. 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)
  • 48. more about process definitions and expressions http://ruote.rubyforge.org/expressions.html http://ruote.rubyforge.org/patterns.html
  • 51. 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
  • 52. 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
  • 53. ruote-amqp amqp participants and listeners http://github.com/kennethkalmer/ruote-amqp ‣ ruote-fluo still in the run http://github.com/jmettraux/ruote-fluo
  • 55. ruote [2.0] website http://ruote.rubyforge.org ‣ ruote mailing list http://groups.google.com/group/openwferu-users ‣ freenode.net IRC #ruote
  • 56. many thanks to everyone in the community especially to the “ruedas y cervezas” participants ;-)