Created Design: Runtime extension points (markdown)

Nick O'Leary 2015-05-11 21:52:37 +01:00
parent 892edf422d
commit 5fecd81f64
1 changed files with 30 additions and 0 deletions

@ -0,0 +1,30 @@
(Original thread: https://groups.google.com/forum/#!topic/node-red/LFu_z85G3Fg)
There are a number of places in the node-red runtime where it would be desirable to plug-in alternative implementations, or provide hooks to add functionality. There are a number of use cases this would enable.
This page is an attempt to start organising these thoughts.
## Use Cases
### Running multiple instances of a flow
This is where the flows are designed such that multiple instances can be run with some sort of load balancing in front of them. This is suited to HTTP-initiated flows, with any shared state maintained via an external service such as Redis.
The requirement is to be able to trigger the deploy of flows across all instances.
This could be done in the existing storage-plugin layer.
### Running a flow across multiple instances
This is where a flow is distributed across multiple runtimes. Two connected nodes may not be running on the same instance.
The requirements are:
- co-ordinate the deploy of the flow across multiple machines
- be able to route messages between the instances are defined by the flow
## Extension Points
- Storage layer - how/where things get stored - [already done](http://nodered.org/docs/api/storage/index.html).
- Message routing - how a message gets routed. Default implementation does the in-memory direct access to a node's `.receive` function. Alternative implementations could serialise the message to JSON and send over the network
- Flow handling - sits in the load/save path for flows. Need to refine how much is exposed to the API and where exactly it sits in the deploy process.