【问题标题】:Set up distributed index using Hibernate Search and Lucene使用 Hibernate Search 和 Lucene 设置分布式索引
【发布时间】: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


【解决方案1】:

您需要注意正在使用的版本。捆绑在 JBoss EAP 中的 Infinispan 版本不是为了存储 Lucene 索引而设计的(即像其他用途一样经过广泛测试)。

当 JBoss EAP 6.2 发布时,捆绑的 Infinispan 被认为可以很好地满足应用程序服务器的内部需求,但您可能已经发现,索引存储的特性至少存在一些性能问题。

在 Infinispan 的最新开发中,我们对索引存储功能进行了许多改进,修复了一些错误并从中获得了非常显着的性能改进。我希望您愿意尝试 Infinispan 7.2.0.Beta1 吗? 所有这些改进也正在向后移植到 JBoss Data Grid,6.5 版将使它们作为受支持的产品提供。请注意,以前不支持存储 Hibernate Search 索引的这一特性——它将成为 JDG 6.5 的新特性。 JDG 6.5 中的模块将与 JBoss EAP 兼容,您只需确保使用 JDG 提供的 Infinispan 构建,而不是用于 EAP 内部使用的构建。

性能改进仍在进行中。它已经好多了——尤其是与旧版本相比——但我们不会停止工作,所以如果你能尝试最新的 Infinispan 7.2.x 最前沿版本(另一个版本计划在明天发布),我将非常感激您的反馈以继续推动它。

【讨论】:

  • 感谢您的回答,Sanne!我尝试切换到更新的 infinispan 版本,但似乎依赖关系使得我需要使用更新的 Hibernate 版本,所以我可以使用更新的 Hibernate Search 版本,这样我就可以使用更新的 Infinispan 版本。我认为更换容器附带的 Hibernate 版本可能不是一个好主意。我错过了什么吗?
  • 你是对的,在上游项目中,你需要升级 Infinispan 和 Hibernate Search,因为社区更新到 Lucene 4.10x。 JDG 6.5 中支持的组件与 Lucene 3.6.x 和 EAP 包括 Hibernate 版本兼容。您可以尝试 EAP 6.4(现在可用,包括 Hibernate Search)或切换到 WildFly 9。我们的目标是将来不具有如此强大的版本耦合,但由于它是一项新功能,(非常)旧的功能将无法正常工作。
猜你喜欢
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多