2015-04-01 49 views
1

我們的應用程序使用Hibernate Search來索引它的一些數據。該應用程序在兩個JBoss EAP 6.2應用程序服務器上運行,用於負載分配和故障轉移。我們需要在一臺機器上進行的更改立即可見。索引是應用程序的核心部分,需要與數據庫數據保持一致。完全重建需要很長時間,因此即使在服務器崩潰的情況下,重要的是它仍然保持完整。另外,索引預計會變得太大而無法將其全部保存在內存中。使用Hibernate Search和Lucene設置分佈式索引

我們當前的解決方案是使用帶有共享文件系統(NFS)和JGroups後端的標準文件系統目錄,以確保只有一臺服務器隨時寫入給定索引。這或多或少地起作用,但有時我們遇到索引更新很長(最多20秒)或完全失敗的問題。由於其他原因,我們需要從當前使用的文件系統遷移,因此我們正在評估當前設置的替代方案。

我們嘗試過的一件事是帶有文件緩存存儲區的Infinispan目錄,但我們在OutOfMemoryErrors方面存在一些問題(另請參閱我在Infinispan論壇中的帖子https://developer.jboss.org/thread/253732)。此外,在我們的第一次測試中(我的開發人員計算機上設置了兩個羣集服務器的索引更新大約3秒),性能仍然不可接受,但這可能是由於配置問題。

我認爲這不是一個不常見的要求,但我找不到有關實施它的最佳實踐的很多信息。

誰有類似的設置經驗? Infinispan目錄是否適合你?任何人都可以提出一個工作配置,或者如何繼續到達一個配置?你嘗試過哪些方法,哪些方法有效?

+0

較新版本的Hibernate Search和Infinispan目錄有大量的性能改進,您不需要使用EAP內部的版本。例如,您可以使用JBoss Data Grid提供的模塊,這些模塊包含Hibernate Search和Infinispan目錄的更新版本:http://www.jboss.org/products/datagrid/download/。 這些模塊位於現有EAP模塊之上,幷包含一個單獨的「插槽」,您可以依賴該插槽而不與內部庫衝突。你嘗試過這條路線嗎? – gnf 2015-04-13 09:02:55

+0

您嘗試過哪些JGroups後端?有一個靜態主選擇(通過配置),一個嘗試自動選舉,但這是實驗性的。我會盡力幫助Infinispan相關的問題,但我很想知道您嘗試過哪些替代方案。 – Sanne 2015-04-16 11:34:16

+0

我們使用自動選舉後端,因爲我們需要其他節點在一個節點失敗時自動接管。 – lbilger 2015-04-17 12:08:11

回答

1

您需要小心使用哪些版本。捆綁在JBoss EAP中的Infinispan版本並不打算用於存儲Lucene索引(即,廣泛地進行測試,以作其他用途)。

當JBoss EAP 6.2發佈時,捆綁的Infinispan被認爲適合應用服務器的內部需求,但正如您可能已經發現的那樣,索引存儲的功能至少存在一些性能問題。

在Infinispan的最新發展中,我們對索引存儲功能進行了許多改進,修復了一些錯誤,並從中獲得了非常顯着的性能改進。我希望你可以願意嘗試Infinispan 7.2.0.Beta1? 所有這些改進也正在被移植到JBoss Data Grid,6.5版本將使它們成爲支持的產品。注意這個存儲Hibernate搜索索引的功能以前不被支持 - 它將成爲JDG 6.5的一個新功能。 來自JDG 6.5的模塊將與JBoss EAP兼容,您只需確保使用由JDG提供的Infinispan構建版本,而不是EAP的內部使用版本。

性能改進仍在進行中。它已經好多了 - 尤其是與舊版本相比 - 但我們不會停止這方面的工作,所以如果你可以嘗試最新的Infinispan 7.2.x版本(另一個版本計劃明天),我會非常感激您的反饋,以繼續推動它。

+0

感謝您的回答,Sanne!我嘗試切換到一個更新的infinispan版本,但似乎依賴關係是這樣的,我需要使用更新的Hibernate版本,因此我可以使用更新的Hibernate Search版本,因此我可以使用更新的Infinispan版本。我認爲換掉容器附帶的Hibernate版本可能不是一個好主意。我錯過了那裏的東西嗎? – lbilger 2015-04-17 12:06:10

+0

您是對的,在上游項目中,您需要升級Infinispan和Hibernate Search,因爲社區已更新爲Lucene 4.10x。 JDG 6.5中支持的組件與Lucene 3.6.x兼容,EAP包含Hibernate版本。你可以嘗試EAP 6.4(現在可用幷包含Hibernate Search)或切換到WildFly 9.我們的目標是未來不會有如此強大的版本耦合,但由於它是一個新功能,所以(非常)舊的功能無法工作。 – Sanne 2015-04-18 20:40:19