In my system, different nodes share some identical configuration parameters that rarely change (approximately once per month) but could change while the system is running. It is not critical to restart a node during its reconfiguration. However, it is crucial that all nodes remain synchronized when the system is in operation mode.
I am exploring the best options to implement this behavior. Here are my options, along with some pros and cons from my perspective:
-
uavcan/register
- Option 1: Populate identical configuration parameters in each node’s registry.
- Pros:
- Utilizes standard functionality.
- Cons:
- Requires special synchronization logic (and maybe tool), especially when adding new nodes to an already configured system in operation mode.
- Pros:
- Option 2: Store identical configuration parameters in a central node registry from which other nodes read.
- Pros:
- Utilizes standard functionality.
- Simplifies synchronization logic, but still requires some notifications to other nodes about configuration updates when the system is in operation mode.
- Cons:
- Overuse standard functionality.
- Pros:
- Option 1: Populate identical configuration parameters in each node’s registry.
-
Provide a dedicated service for reading identical configuration parameters
- Pros:
- Similar to the Option 2 of
uavcan/register
but does not overuse its functionality.
- Similar to the Option 2 of
- Pros:
-
Periodically publish identical configuration parameters from a central node
- Pros:
- Straightforward and organic implementation.
- Cons:
- Almost all of the utilized bandwidth is senseless because it sends similar data.
- Pros:
-
Publish identical configuration parameters from a central node only when a new node appears or a configuration parameter changes
- Pros:
- Uses only the necessary amount of bandwidth.
- Synchronization logic is straightforward.
- Cons:
- Still requires synchronization logic.
- Pros:
I may be missing some other options.
Currently, I am leaning towards the last option with implementation in a separate node. However, this approach (and actually all others) seems to deviate from the distributed system paradigm.
I am a bit confused by this task and would be very grateful for any valuable feedback or suggestions on this topic.