2

我正在寻找一些关于如何解决我的 Java 服务中的故障转移问题的想法。

在高层次上,我的服务从另一个服务接收 3 个单独的对象数据流,执行一些合并逻辑,然后写入数据存储。

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

数据到达后,会存储在一些 java.util.concurrent 集合中,比如一个 BlockingQueue 或者一个 ConcurrentHashMap。

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

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

  1. 接收对象时写入文件/其他地方,并在添加到队列之前
  2. 当对象最终被处理并存储在数据存储中时
  3. 发生故障转移时,确保复制相同的文件,并且我们知道我们需要接收哪些对象的数据

性能是我的服务中的一个重要因素,由于 IO 很昂贵,这似乎是一种粗略的方法,而且非常简单。

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

4

1 回答 1

1

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

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