【发布时间】:2015-06-05 20:31:07
【问题描述】:
我们的应用程序使用 Hibernate Search 来索引它的一些数据。该应用程序运行在两台 JBoss EAP 6.2 应用程序服务器上,用于负载分配和故障转移。我们需要在一台机器上进行的更改在另一台机器上立即可见。索引是应用程序的核心部分,需要与数据库数据保持一致。完全重建它需要很长时间,因此即使在服务器崩溃的情况下也能保持完整,这一点很重要。此外,该索引预计会变得太大而无法将其全部保存在内存中。
我们当前的解决方案是使用带有共享文件系统 (NFS) 和 JGroups 后端的标准文件系统目录,以确保任何时候只有一台服务器写入给定索引。这或多或少有效,但有时我们会遇到索引更新需要很长时间(长达 20 秒)或完全失败的问题。由于其他一些原因,我们需要从当前使用的文件系统迁移出去,因此我们正在评估当前设置的替代方案。
我们尝试的一件事是带有文件缓存存储的 Infinispan 目录以实现持久性,但我们在那里遇到了一些关于 OutOfMemoryErrors 的问题(另请参阅我在 Infinispan 论坛中的帖子 https://developer.jboss.org/thread/253732)。此外,在我们的第一次测试中,性能仍然无法接受(在我的开发人员机器上设置了两个集群服务器的索引更新大约需要 3 秒),但这可能是由于配置问题。
我认为这并不是一个不常见的要求,但我找不到太多关于实施它的最佳实践的信息。
谁有类似设置的经验? Infinispan 目录对您有用吗?任何人都可以建议一个工作配置或如何继续达到一个吗?您尝试过哪些替代方案,哪些可行?
【问题讨论】:
-
Hibernate Search 和 Infinispan Directory 的较新版本具有巨大的性能改进,您不必使用 EAP 内部的版本。例如,您可以使用 JBoss 数据网格提供的模块,这些模块包含 Hibernate Search 和 Infinispan 目录的较新版本:jboss.org/products/datagrid/download。这些模块位于现有 EAP 模块之上,并包含一个单独的“插槽”,您可以依赖它而不会与内部库发生冲突。你试过那条路吗?
-
您尝试过哪些 JGroups 后端?有一个具有静态主选择(通过配置)和一个尝试自动选择,但这是实验性的。我会尽力帮助解决与 Infinispan 相关的问题,但我很想知道您尝试了哪些替代方案。
-
我们正在使用自动选举后端,因为我们需要另一个节点在一个节点发生故障时自动接管。
标签: lucene hibernate-search infinispan