我想创建一个分布式系统,其中数据在所有节点之间进行分片。我知道像Hazelcast或Apache Ignite这样的库可以帮到你。在我的例子中,对于每个分片键,我需要为另一个系统创建一个套接字订阅,因此它不仅仅是关于如何分发数据,还包括如何以分布式方式实际创建这些订阅。
这个想法是,为每个分片键创建一个对另一个系统的订阅。每个订阅都会保留一个包含数据的条目列表,以检查来自套接字连接的每个更新。
我想到的是为每个要保留的新条目发送带有分片键和主题数据的消息。然后,每个节点将应用分片算法来决定哪个负责处理消息,然后创建对套接字连接的订阅(如果它尚未存在)并将数据添加到套接字连接。
此复杂性是处理群集拓扑更改。我需要通过让一个节点充当领导者从数据库重新加载数据并再次重新发送数据来手动重新平衡这些连接。节点还需要对清除订阅的这些更改做出反应。为此,我想到使用一个版本号,该版本号会随着每次更改而增加,并允许节点识别这些更改。另一个解决方案是让每个节点通过事件了解拓扑更改,但这些是异步的,因此在清除订阅时我可能遇到竞争条件。
还有其他方式或更好的方法吗?也许有Ignite提供的一些功能? (在这种情况下,我使用Ignite作为缓存)
感谢。