Best practices for nodes configuration syntonization

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.
    • 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.
  • Provide a dedicated service for reading identical configuration parameters

    • Pros:
      • Similar to the Option 2 of uavcan/register but does not overuse its functionality.
  • 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.
  • 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.

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.