我需要实现基于PaxosLease的主选举库,并在网络层设计上遇到问题。
网络核心要求如下:
根据上述要求,我将网络层设计如下:
设计看起来不错。由于某些节点在开始时可能会脱机,因此会出现问题:ReadSession可以由连接到该节点的新的联机节点创建,如何为该新的联机节点创建WriteSession?我们无法知道离线节点何时联机,我们只能通过接受来自新联机节点的新连接而不是其侦听端口来了解其匿名端口。
对我来说,这确实是一个设计问题。我目前有这两个想法:
async_connect
重新注册到Asio::ip::tcp::socket::async_connect
中(意味着连接失败)。但是这个想法仍然存在问题:asio::io_context
]在async_connect
的处理程序上花费了很多IO资源。 因此,我希望有一个设计可以在新的联机节点连接到当前节点后立即准备WriteSession。
非常感谢!
实际上,您创建的网络拓扑是一个分布式系统。您所面对的问题已由Zookeeper和chubby等许多著名应用程序解决。
如果您不想那么复杂,也许您可以尝试使用某些广播协议,例如LAN中的LSD或WLAN中的DHT。