Re-architect the Node Resource Manager
This issue is here to keep track of current design discussions happening relative to the overall architecture of the many NRM components.
@vreis is working hard on identifying the exact frontier between NRM, the container runtimes, the message passing layer, the control flow layer, the various clients, and the different OS/Node interfaces. The ultimate goal is to be able to streamline most of the core NRM logic, as it is inherently "just a control loop".
Overall Design
The idea is to delineate the frontier between the different NRM components to:
- provide precise definitions for datatypes these components use
- define the right abstractions (methods and state) for how these components appear to each other
- create an infrastructure (as in declarative programming) to automatically generate most of the APIs between components
- create the means to replace some of these components with better, more adapted, more stable implementations.
So far we've identified the following components:
- core NRM event loop (networking and control flow)
- OS/Node Interactions
- Control Loop (externalized with future-proofing)
And the following datatypes:
- NRM events: messages, decisions, control flow events, timers
- NRM state: configuration, active components
- Command: every bit of information required to launch a process from the control flow core
- Behavior: action to take after event
And the following abstractions:
- Container
- Actuator
- Sensor
- Controller
- Application