gpt4 book ai didi

lucene - 跨多个应用服务器同步 Lucene.net 索引

转载 作者:行者123 更新时间:2023-12-03 22:33:23 24 4
gpt4 key购买 nike

我们正在为企业 Web 应用程序设计搜索架构。我们将为此使用 Lucene.net。索引不会很大(大约 100,000 个文档),但搜索服务必须始终处于运行状态并且始终处于最新状态。将一直有新文档添加到索引和并发搜索。
由于我们必须为搜索系统提供高可用性,因此我们有 2 个应用程序服务器,它们公开 WCF 服务来执行搜索和索引(服务的副本在每个服务器中运行)。然后服务器使用 lucene.net API 来访问索引。

问题是,保持索引始终同步的最佳解决方案是什么?我们考虑了几个选项:

  • 使用一台服务器进行索引和
    让第二台服务器访问
    通过 SMB 建立索引:无法做到,因为我们
    有单点故障
    情况;
  • 对两台服务器建立索引,基本上每个索引都写入两次:可能性能很差,并且可能会出现不同步,例如。服务器 1 索引正常,服务器 2 磁盘空间不足或其他什么;
  • 使用 SOLR 或 KATTA 包装对索引的访问:不,我们不能在服务器上运行 tomcat 或类似的东西,我们只有 IIS。
  • 将索引存储在数据库中:我发现这可以使用 Lucene 的 java 版本(JdbcDirectory 模块)来完成,但我找不到与 Lucene.net 类似的任何东西。即使这意味着对性能的小幅影响,我们也会选择这个选项,因为它可以干净地解决最小开发的并发和同步问题。
  • 使用 Lucene.net DistributedSearch contrib 模块:我无法提交包含有关此文档的单个链接。通过查看代码我什至不知道这段代码做了什么,但在我看来,它实际上将索引拆分到多台机器上,这不是我们想要的。
  • rsync 和 friend ,在 2 个服务器之间来回复制索引:这对我们来说感觉很骇人且容易出错,而且,如果索引变大,可能需要一段时间,在此期间我们将返回损坏或不一致数据给客户端,所以我们必须制定一些我们不希望的临时锁定策略。

  • 我知道这是一个复杂的问题,但我相信很多人以前都遇到过。欢迎任何帮助!

    最佳答案

    似乎最好的解决方案是将两台服务器上的文档索引到它们自己的索引副本中。

    如果您担心索引在一台服务器上成功而在另一台服务器上失败,那么您需要跟踪每台服务器的成功/失败,以便在问题解决后重新尝试失败的文档。这种跟踪将在 Lucene 之外的任何系统中完成,无论您使用什么系统来呈现要索引到 Lucene 的文档。根据索引的完整性对您的重要性,您可能还必须从正在使用的任何负载均衡器中删除故障服务器,直到问题得到解决并且索引已重新处理任何未完成的文档。

    关于lucene - 跨多个应用服务器同步 Lucene.net 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/944166/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com