Java 基于ceral的Karaf分布式持久化方法

Java 基于ceral的Karaf分布式持久化方法,java,mongodb,jpa,osgi,apache-karaf,Java,Mongodb,Jpa,Osgi,Apache Karaf,我最近一直在研究如何使用来创建分布式应用程序。这看起来很有希望,但我在寻找一种与分布式思维模式类似的持久性策略时遇到了一个问题 Cell处理分布式内存,但我需要的是一种让所有节点有序地将数据持久化到磁盘的方法 最好是在每个Karaf实例旁边有一个持久性存储,它可以持久化和检索对象,并在对象之间进行同步。我发现的唯一方法是在我所有的Karaf iInstance旁边创建一个实例,并在一个数据库中收集它们。 然而,这种方法有几个缺点,最重要的是在向集合中添加新的MongoDB实例时需要手动步骤 那么

我最近一直在研究如何使用来创建分布式应用程序。这看起来很有希望,但我在寻找一种与分布式思维模式类似的持久性策略时遇到了一个问题

Cell处理分布式内存,但我需要的是一种让所有节点有序地将数据持久化到磁盘的方法

最好是在每个Karaf实例旁边有一个持久性存储,它可以持久化和检索对象,并在对象之间进行同步。我发现的唯一方法是在我所有的Karaf iInstance旁边创建一个实例,并在一个数据库中收集它们。 然而,这种方法有几个缺点,最重要的是在向集合中添加新的MongoDB实例时需要手动步骤

那么:有没有合适的OSGi方法以同步的方式对磁盘进行持久化?我似乎找不到任何解决方法。

没有“合适的OSGi方法”来解决这个问题。 但是,对于给定的技术堆栈,您已经看过了,这可能是可行的

我“只是”希望数据存储位于容器中,以便所有内容都可以作为一个整体安装和配置

在这种情况下,我认为ApacheKaraf+ApacheKaraf Cellar与已经使用过的Hazelcast Cellar地图相结合是您的解决方案。在此场景中运行任何应用程序时,您都可以使用提供的Hazelcast实例。这将确保所有自定义数据以“hazelcast”方式同步

最后,它归结为使用一些可以在任何环境中运行的技术/工具来解决在不同节点之间分发特定数据的需求。
在这种情况下,我建议使用Cellar和Hazelcast,因为它很容易使用。 但可能还有其他解决方案,我现在还不知道

编辑: 要使分布式系统存储来自任何节点的数据,您要么需要重建现有的技术,如Cassandra,要么只使用Cassandra数据库


另一种方法是使用Cell拥有不同的集群组,Cell只包含一个与数据库对话的服务,该服务将从此数据库提供JTO对象。此服务可以通过Cell机制(远程服务)分发到其他集群组。从那时起,可以通过引用OSGi服务来实现与单个DB的对话,该服务用于将数据从任何节点存储到数据库,事实上,这些服务仅在另一个集群组的一个节点上可用

在这种情况下,并发应该以编程方式处理。 如Achim所述,可以通过hazelcast地图锁定现有对象。 要持久化的新对象仅取决于原始接口/服务(WebService请求、文件使用等)。对于文件使用,您必须确保文件只处理一次


数据库提供程序(甚至MySql(;)也涵盖了数据库集群的复制机制

这不是一个与osgi相关的问题。这是一个分布式系统的一般问题,您需要从不同的系统访问单个资源。是的,我同意。我想知道的是,如果有一些优秀的方法来解决这个问题,例如,运行分布式系统的Karaf实例。我不会有太多麻烦写入系统,所以同步复制应该可以,我“只是”希望数据存储驻留在容器中,以便所有内容都可以作为一个实例安装和配置。内存中的数据也是如此,但黄金问题是:当我需要将某些内容持久化到磁盘时,我到底该怎么做。我希望摆脱数据库集群,在每个Karaf实例中都有一个数据存储,并拥有这些数据存储se在它们之间进行同步。难道不存在这样的解决方案吗?呃,这对于OSGi或Karaf来说也没有什么特别的。这对于任何分布式系统都是正确的。