故障转移内存中的Java对象

时间:2012-10-15 13:56:34

标签: java error-handling failover

我希望了解如何在Java服务中解决故障转移问题。

在较高级别,我的服务从另一个服务接收3个独立的对象数据流,执行一些合并逻辑,然后写入数据存储区。

流中的每个对象都有一个唯一键。来自3个流的数据可以同时到达,没有保证订购。

数据到达后,它将存储在一些java.util.concurrent集合中,例如BlockingQueue或ConcurrentHashMap。

问题是此服务必须支持故障转移,如果在数据存储在内存中对象时发生故障转移,我不知道如何解决此问题。

我有一个简单的想法如下:

  1. 在接收对象时,在添加到队列
  2. 之前写入文件/其他位置
  3. 当一个对象最终被处理并存储在数据存储区中时
  4. 发生故障转移时,请确保复制相同的文件并知道我们需要接收哪些对象
  5. 性能是我服务的一个重要因素,而且由于IO价格昂贵,这似乎是一种粗略的方法,而且非常简单。

    因此,我想知道是否有任何库可以轻松解决这个问题?

1 个答案:

答案 0 :(得分:1)

我会使用Java Chronicle部分是因为我写了它,但主要是因为......

  • 它可以以文本或二进制格式每秒向磁盘写入和读取数百万条目。
  • 可以在进程之间共享,例如具有亚微秒延迟的主动 - 主动群集。
  • 不需要系统调用或刷新来推出数据。
  • 生产者不会被消费者放慢速度,这可能是未来的GB(超过机器的总内存)
  • 它可用于低堆无GC且无锁定的方式。