2012-10-15 40 views
2

我正在尋找關於如何在Java服務中解決我的故障轉移問題的一些建議。對內存中的Java對象進行故障轉移

在高層次上,我的服務從另一個服務接收3個單獨的對象數據流,執行一些合併邏輯,然後寫入數據存儲。

流中的每個對象都有一個唯一的鍵。來自3個流的數據可以同時到達,沒有保證的排序。

數據到達後,它將存儲在某個java.util.concurrent集合中,例如BlockingQueue或ConcurrentHashMap。

問題是此服務必須支持故障轉移,並且我不確定如果在數據存儲在內存中對象時發生故障轉移時如何解決此問題。

一個簡單的想法我有如下:

  1. 寫入文件/接收對象別處時,在此之前加入到隊列
  2. 當一個對象被最後procesed並存儲在數據存儲區,以
  3. 發生故障切換時,確保同一文件跨複製,我們知道我們需要接收數據爲

性能的對象是我服務的一個重要因素,並作爲IO很昂貴,這看起來像一個粗糙的方法,並且非常簡單。

因此,我想知道是否有任何庫等可以輕鬆解決這個問題?

+0

當性能是一個問題時,任何需要寫入文件的內容都沒有了。 – Philipp

+0

我會使用內存數據庫與故障轉移的複製:http://repcached.lab.klab.org/ – amphibient

回答

1

我會用Java Chronicle部分原因是因爲我寫的,但主要是因爲...

  • 它可以在文本或二進制格式的寫入和讀取每秒百萬項的磁盤。
  • 可以在進程之間共享,例如,具有亞微秒等待時間的主動 - 主動羣集。
  • 不需要系統調用或刷新即可推出數據。
  • 生產者沒有被消費者放慢速度(超過機器總內存)
  • 它可以以低堆GC和無鎖方式使用。
+0

沒有得到嘗試它作爲我的實現的一部分 – DJ180