vermilionrc
vermilionrc copied to clipboard
IPC or Event Bus
See https://github.com/bluejekyll/vermilion/issues/2#issuecomment-554667565 for application architecture:
If Vermilion were a military organization, then the IPC system it uses would be person the General trusts to take the orders as written and deliver to the field commanders, without changing or influencing them in any way. In that regard, the IPC should have no roll in potentially influencing the outcome of decisions or have the potential of causing decisions that were not properly originated to be carried out.
It's currently not clear if this project should built it's own Event Bus or not, we don't necessarily want to take over for what there might be a better option provided by the OS, that is TBD.
Requirements:
- SHOULD NOT require privileged execution to operate
- MUST provide a mechanism for point-to-point message delivery
- MAY authenticate and reject data, though this will not be responsible for validation
- SHOULD provide broadcast/multicast like mechanism for active members, e.g. for general shutdown.
- MAY offer remote access, though this would need to be a well vetted mechanism and MUST authenticate remote requests
- MUST provide local system access to Supervisors and Leaders
- SHOULD log events like source and destination to Logger, need to be careful, we may not want to log entire messages at all
- SHOULD be as low overhead as possible
- MUST use well structured data for transport
Questions:
- Should we look at using protobuf for all messaging?
- What should be the underlying protocol be, should we consider HTTP2 or quic? vs. named pipes, etc.
Notes:
- Logger: unprivileged log aggregator
- Leader: unprivileged authority for issuing commands in Vermilion
- Supervisor: (usuallly) unprivileged Process monitor