lucene分布式架构-满足高并发的实时检索需求


                                                                                                                 一洽在线客服系统


          最近一洽在人工客服对话的基础上增加了智能应答服务,一洽对待服务质量的态度永远是7*24小时永不间断,上线前必须做到的标准如下:


           1.允许出现单节点故障

           2.可在负载过高时随时添加集群节点

           3.所有集群内的server可同时操作知识库的索引,包括创建和读取

           4.索引需要有多层备份

           5.用最少的服务器资源做最高效的工作

           

           业务应用场景:

           1.saas平台多人使用

           2.单体知识库容量小,知识库数量众多

           3.查询请求量很大


          根据以上要求研发和运维团队也都提出了自己的架构方案。


          同事A(方案一):使用hadoop做lucene的分布式索引(网络上到处都有架构方案,唯一的要求是成本高,成本高

          同事B(方案二):同一台机器部署多个个server 共用同一个机器上的索引文件 然后对索引的写操作使用redis做分布式锁来做伪集群(不可不说这也是一种方案,确实从最大程度上满足了第5条标准)

          同事C(方案三): 做一个索引同步的中间件,配合redis的分布式锁来达到索引实时同步,同时满足每台server上都有一份完成的索引文件。

          同事D(方案四):分布式server集群,公用同一个网络磁盘作为索引目录,同时对网络磁盘进行多重备份,看起来很简单,唯一担心的是网络磁盘的读写效率。    


          方案一和方案二就不多说了,有钱的可以选择方案1,对自己没要求对客户不负责的可以选择方案二。

          这里和大家分享下一洽在实施方案三和方案四的过程中遇到的坑和解决方案,供大家参考。


          方案三架构如下:


          


      1.在每次写完毕后删除掉write.lock那么在文件监控到某个目录下write.lock出现时即有索引的更新

      2.等待获取write.lock锁可保证索引文件已经写完毕,避免碎片文件多次同步

      3.将分布式锁交给中间件是保证每次索引写完毕后必须先同步完索引才能继续进行写入

     

      此方案经过运维童鞋废寝忘食的工作,中间件终于诞生,经过长时间的压测,方案运行状态良好,但这个方案的弊端也很明显,如果某个客户的知识库很大那么其索引文件必定也很大,过大的索引文件在服务器组间的复制性能会影响到客户的使用。


      无奈之下放弃了这个节约服务器资源的方案,转而进行hadoop的分布式集群架构, 各种考虑分组、hash来提升集群的性能尽量满足众多企业同时拥有自己的知识库同时频繁修改的业务场景,就在集群方案测试通过后之前最不看好的方案四被那个不屈不挠的同事发现了可实施的具体方案,下面就给大家介绍下方案四在一洽是如何进行实施和测试的。

  

       方案四架构如下:出奇的简单,但测试效果确出奇的高效稳定。

       

        1.所有的server都共用同一个索引文件目录

        2.针对同一索引目录的写操作使用分布式锁进行控制

        重点要说明的事NAS这个东西,这里的NAS云盘在一洽的系统架构中指的是阿里云刚刚推出的分布式文件存储系统,这里就不打广告了应该各家云服务器提供商会陆续提供此种类型的服务,测试结果如下:


        24小时 1000个线程同时不间断的向nas的1000个不同的索引目录写入索引,同时进行正常的索引查找服务,测试出来的最大搜索延迟为200MS,平均获得查询结果的时长在50MS内,可见此方案的性价比之高,同时nas作为挂载云盘可同时挂载多个来进行扩容以及hash后的分片服务。

         根据测试结果我们目前上线的智能问答系统采用的就是第四种方案,第一种方案作为备份。当然如果您也想试试方案四的话一定记得给NAS做备份哦。

         任何一种系统架构都不是完美的,只要能满足今后很长一段时间的需求以及有可行的扩展方案它就是一个好的架构,希望有同类业务场景需求的同学,我们的经验能给你们带来一些帮助^_^


           

        

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: lucene-core-4.9.0.jar是Lucene搜索引擎的核心库文件,它是一个用Java语言编写的开源软件,主要用于实现全文搜索和索引功能。 Lucene是一个高性能的全文搜索引擎库,它提供了一系列用于创建、更新和查询索引的API。对于需要在大量文本数据中进行快速和准确搜索的应用程序来说,Lucene是一个非常好的选择。 核心库文件lucene-core-4.9.0.jar包含了Lucene搜索引擎的所有核心功能,包括索引的创建和管理、搜索查询的执行、搜索结果的排序和过滤等。通过引入该库文件,开发人员可以在自己的应用程序中使用Lucene提供的功能来实现文本数据的全文索引和搜索。 在使用Lucene时,开发人员可以根据自己的需要,使用lucene-core-4.9.0.jar的API来创建索引,将文档进行分词、过滤和标准化处理,然后将处理后的文档添加到索引中。当需要进行搜索时,可以使用Lucene提供的查询语法和查询API,对索引中的文档进行高效的全文搜索。 除了lucene-core-4.9.0.jar之外,Lucene还提供了其他一些相关的jar文件,例如lucene-analyzers-common.jar和lucene-queryparser.jar等,它们可以用于分析和处理文本数据,以及解析查询语法。通过组合使用这些库文件,开发人员可以更灵活地构建自己的全文搜索应用程序。 总之,lucene-core-4.9.0.jar是Lucene搜索引擎的核心库文件,它提供了一系列用于创建、更新和查询文本数据索引的API,为开发人员提供了实现全文搜索功能的便利。 ### 回答2: lucene-core-4.9.0.jar是Lucene项目的核心库,它是用Java编写的全文搜索引擎库。Lucene是一个开源项目,旨在提供一个强大且高效的搜索引擎,用于构建各种应用程序,如网站搜索,文本分析和信息检索等。 lucene-core-4.9.0.jar提供了许多关键的功能和类,包括索引创建和管理,查询解析和执行,文本分析和词法处理等。通过使用这个库,开发人员可以轻松地构建自己的搜索应用程序,并实现快速和准确的搜索功能。 在Lucene的使用过程中,开发人员可以通过创建索引来处理需要搜索的文档集合。索引是一个用于快速查找和检索文档的数据结构,它包含了文档中的关键词、位置和其他重要信息。lucene-core-4.9.0.jar提供了一些类来帮助创建和维护索引,在搜索时可以快速定位相关文档。 另外,lucene-core-4.9.0.jar还提供了丰富的查询语法和API,以便开发人员可以根据特定的需求构建和执行复杂的查询。这些查询可以包括布尔逻辑、过滤器、范围查询和模糊匹配等多种形式。通过使用Lucene的查询功能,用户可以快速找到符合其需求的相关文档。 总之,lucene-core-4.9.0.jar是Lucene项目的核心库,提供了全文搜索引擎的关键功能和类。它可以帮助开发人员构建强大的搜索应用程序,实现快速和准确的搜索功能。 ### 回答3: lucene-core-4.9.0.jar 是一个用于构建搜索引擎的Java库。Lucene是一个开源的全文搜索引擎工具包,它提供了用于索引和搜索文本的功能。 lucene-core-4.9.0.jar 是Lucene库的核心组件,用于实现基本的搜索和索引功能。它包含了索引文档和搜索相关内容所需的所有必要类和方法。这个.jar文件是由Lucene 4.9.0版本的源代码编译而成的。 使用 lucene-core-4.9.0.jar,我们可以很方便地在自己的应用程序中实现搜索功能。首先,我们需要构建一个索引,将要搜索的文本内容进行索引化。然后,我们可以使用 Lucene 提供的 API 进行搜索操作,通过关键字或特定的查询语句来搜索索引中的内容。Lucene 提供了丰富的查询语法和搜索算法,可以根据需求进行高级的搜索操作,如模糊搜索、排序、过滤等。 通过使用 lucene-core-4.9.0.jar,我们可以为我们的应用程序添加强大的搜索能力,无论是搜索文件、数据库、网站内容或是其他结构化的数据。Lucene 库已经在众多应用中得到了广泛的应用,包括网站搜索引擎、文档管理系统、电子邮件客户端等。 总之,lucene-core-4.9.0.jar 是一个功能强大且灵活的Java库,可以帮助开发人员快速构建搜索引擎和实现全文搜索功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值