SlideShare a Scribd company logo
1 of 56
Download to read offline
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
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
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
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
‣   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

Similar to towards ruote 2.0

Movable Type 5.2 Overview at MTDDC 2012
Movable Type 5.2 Overview at MTDDC 2012Movable Type 5.2 Overview at MTDDC 2012
Movable Type 5.2 Overview at MTDDC 2012
Yuji Takayama
 

Similar to towards ruote 2.0 (20)

Containers explained as for cook and a mecanics
 Containers explained as for cook and a mecanics  Containers explained as for cook and a mecanics
Containers explained as for cook and a mecanics
 
Apache HTTPD 2.4 Reverse Proxy: The Hidden Gem
Apache HTTPD 2.4 Reverse Proxy: The Hidden GemApache HTTPD 2.4 Reverse Proxy: The Hidden Gem
Apache HTTPD 2.4 Reverse Proxy: The Hidden Gem
 
Taskflow
TaskflowTaskflow
Taskflow
 
Take Home Your Very Own Free Vagrant CFML Dev Environment
Take Home Your Very Own Free Vagrant CFML Dev Environment Take Home Your Very Own Free Vagrant CFML Dev Environment
Take Home Your Very Own Free Vagrant CFML Dev Environment
 
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
 
Movable Type 5.2 Overview at MTDDC 2012
Movable Type 5.2 Overview at MTDDC 2012Movable Type 5.2 Overview at MTDDC 2012
Movable Type 5.2 Overview at MTDDC 2012
 
Owasp Juice Shop: Achieving sustainability for open source projects
Owasp Juice Shop: Achieving sustainability for open source projectsOwasp Juice Shop: Achieving sustainability for open source projects
Owasp Juice Shop: Achieving sustainability for open source projects
 
NodeJS
NodeJSNodeJS
NodeJS
 
Building Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsBuilding Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in Rails
 
LCU14 201- Binary Analysis Tools
LCU14 201- Binary Analysis ToolsLCU14 201- Binary Analysis Tools
LCU14 201- Binary Analysis Tools
 
Client Side Measurement & Performance With Rails
Client Side Measurement & Performance With RailsClient Side Measurement & Performance With Rails
Client Side Measurement & Performance With Rails
 
Introduction to Apache Apex
Introduction to Apache ApexIntroduction to Apache Apex
Introduction to Apache Apex
 
php & performance
 php & performance php & performance
php & performance
 
groovy & grails - lecture 9
groovy & grails - lecture 9groovy & grails - lecture 9
groovy & grails - lecture 9
 
AMIMOTO: WordPress + Amazon Web Services Hands-on PARIS
AMIMOTO: WordPress + Amazon Web Services Hands-on PARISAMIMOTO: WordPress + Amazon Web Services Hands-on PARIS
AMIMOTO: WordPress + Amazon Web Services Hands-on PARIS
 
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)
 
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)
 
What's New and Newer in Apache httpd-24
What's New and Newer in Apache httpd-24What's New and Newer in Apache httpd-24
What's New and Newer in Apache httpd-24
 
Avoid the Vendor Lock-in Trap (with App Deployment)
Avoid the Vendor Lock-in Trap (with App Deployment)Avoid the Vendor Lock-in Trap (with App Deployment)
Avoid the Vendor Lock-in Trap (with App Deployment)
 
ApacheConNA 2015: Apache httpd 2.4 Reverse Proxy
ApacheConNA 2015: Apache httpd 2.4 Reverse ProxyApacheConNA 2015: Apache httpd 2.4 Reverse Proxy
ApacheConNA 2015: Apache httpd 2.4 Reverse Proxy
 

Recently uploaded

Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
UXDXConf
 
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
panagenda
 

Recently uploaded (20)

Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
 
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties ReimaginedEasier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
 
Extensible Python: Robustness through Addition - PyCon 2024
Extensible Python: Robustness through Addition - PyCon 2024Extensible Python: Robustness through Addition - PyCon 2024
Extensible Python: Robustness through Addition - PyCon 2024
 
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
 
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfLinux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
 
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
 
Powerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaPowerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara Laskowska
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджера
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
 
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
 
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
 
ECS 2024 Teams Premium - Pretty Secure
ECS 2024   Teams Premium - Pretty SecureECS 2024   Teams Premium - Pretty Secure
ECS 2024 Teams Premium - Pretty Secure
 
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdfThe Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoft
 
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
 

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
  • 6.
  • 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)
  • 18.
  • 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
  • 49.
  • 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
  • 54.
  • 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 ;-)