我们正在构建一个 java 应用程序,它将使用嵌入式 Neo4j 进行图遍历。以下是我们要使用嵌入式版本而不是集中式服务器的原因
- 此应用程序不是数据所有者。数据将通过其他应用程序在其上摄取。将数据保存在本地将有助于我们进行快速计算,因此它将改进我们的 api sla。
- 由于数据足迹很小,我们不想维护集中式服务器,这将产生额外的成本和维护。
- 不需要额外的缓存
现在这种架构带来了两个挑战。首先如何在嵌入式 Neo4j 应用程序的所有实例中同时更新数据。其次,如何确保所有实例同步,即使用相同版本的数据。
我们想用 Kafka 来解决第一个问题。想法是在所有实例中使用具有不同 groupid 的 kafka 侦听器(以确保所有获取更新)。每当有更新时,事件都会在 kafka 中发布。所有实例都会监听事件并执行更新操作。
然而,我们仍然没有任何可靠的设计来解决第二个问题。由于各种原因,其中一个实例可能会错过事件(它的消费者已关闭)。一种方法是通过调用数据所有者应用程序的 api 来不断检查最新版本。如果版本落后于重播事件。但这带来了维护所有更新的事件日志的额外复杂性。你们认为是否可以以更好,更简单的方式完成?