2015-03-13 42 views
0

我最近一直在尋找到,以創建一個分佈式應用程序中使用Apache Karaf Cellar。它看起來很有前途,但是我遇到了一個問題,就是找到一個像分佈式思維方式一樣的持久性策略。方法在Karaf分佈式持久性與酒窖

酒窖處理的分佈式內存,但我需要的是我的所有節點都堅持有序推進數據到磁盤的方式。

最好,我想一個持久存儲並排Karaf情況下,能夠保持和檢索對象以及它們之間的同步。我發現這樣做的唯一方法是創建一個MongoDB實例旁邊所有我的卡拉夫isntances並收集他們在replica set。 但是,這種方法存在一些缺陷,最重要的是,手動將新的MongoDB實例添加到集合中。

所以:有一個適當的OSGi的方式做持久化到磁盤以同步的方式?我似乎無法找到任何。

+1

沒有真正涉及到OSGi的一個問題是你有一個分佈式系統中的普遍問題,你需要訪問一個單一的。來自不同系統的資源 – 2015-03-14 14:43:08

+0

是的,我同意我想知道的是,如果有一些很好的方法來解決這個問題,例如一些運行分佈式系統的Karaf實例,我不會沉重地寫系統,所以同步複製應該沒問題,我「只是」希望數據存儲位於容器內部,因此所有內容都可以安裝並配置爲一體。 – 2015-03-15 18:53:11

回答

0

沒有「合適的OSGi方式」來解決這個問題。 但是對於給定的技術堆棧,您已經看過它可能可以做到。

我「只是」希望數據存儲生活的容器內使一切都可以安裝並配置爲一個

在這種情況下,我會說的Apache Karaf +的Apache Karaf酒窖與組合已經使用Hazelcast地窖地圖是您的解決方案。在此場景中運行的任何應用程序都可以使用提供的Hazelcast實例。這將確保您的所有自定義數據都以「榛子」方式同步。

在結束這歸結爲使用一些技術/工具,這將在任何環境中運行,以解決要求不同節點之間分發某些數據。
在這種情況下,我建議使用Cellar和Hazelcast,因爲它很容易使用。 但可能有其他解決方案可用,我現在還不知道。

編輯: 爲了有一個分佈式系統,從您可能需要重建現有技術,如卡桑德拉,或只使用一個數據庫卡桑德拉任何節點不存儲數據。

另一種方法是將有酒窖,一個只包含一個可與數據庫服務的不同羣集組,該服務將提供從該數據庫JTO對象。此服務可通過Cellar機制(遠程服務)分發到其他羣集組。從那裏談到單個數據庫可以通過引用OSGi服務來從任何節點向數據庫存儲數據來實現,實際上這些服務只能在另一個羣集組的一個節點上使用。

+0

這對於內存數據來說是正確的,但黃金問題是:究竟是什麼當我需要時,我會這樣做嗎?堅持到磁盤的東西。我很想擺脫數據庫集羣,並且只需要在每個Karaf實例中都有一個數據存儲區,並讓這些數據存儲區彼此同步。這種解決方案不存在嗎? – 2015-03-16 08:10:43

+0

erf,這對於一般的OSGi或Karaf來說也沒什麼特別的。這對於任何分佈式系統都是如此。 – 2015-03-16 08:32:19

0

在這種情況下的併發應該以編程方式處理。 如Achim所述,現有物體可以通過榛子圖鎖定。 要保留的新對象取決於您的始發接口/服務(WebService-Request,File-consumption等)僅用於文件消耗,您必須確保文件只處理一次。

數據庫集羣的複製機制是由數據庫供應商(甚至是由MySQL(覆蓋)