The cluster will work as follows: if not configured defaults do regular server, when configured you have to supply the ip and port of the root node. Once the cluster config is detected, the loading of plugins is halted, client connects to cluster, sends its name, address, port and asks for already loaded services. Services marked with mirror=True can be loaded simultaneously on multiple cluster nodes, so the connecting client loads every service that is set to mirror or not yet loaded, then sends the list of supported services back to the root.
The root and clients will have their separate communication channel. All clients and root will know every other client, so that if root failure occurs the clients can elect new root node (for example based on uptime or smth)
The cluster will work as follows: if not configured defaults do regular server, when configured you have to supply the ip and port of the root node. Once the cluster config is detected, the loading of plugins is halted, client connects to cluster, sends its name, address, port and asks for already loaded services. Services marked with mirror=True can be loaded simultaneously on multiple cluster nodes, so the connecting client loads every service that is set to mirror or not yet loaded, then sends the list of supported services back to the root.
The root and clients will have their separate communication channel. All clients and root will know every other client, so that if root failure occurs the clients can elect new root node (for example based on uptime or smth)