分布式搜索方案选型之一:Solr
我第一个了解到的分布式搜索框架是solr,它是由java开发的,基于lucene的分布式搜索引擎,提供了类似于webserver的编程接口,是一个比较成熟的搜索引擎,目前很多公司都在使用。很快我就部署了一个由4台机器组成的solr集群,开始导公司的数据进去测试,导的数据为200万。导入速度非常快。接下来就开始测试查询效率,发现它是有缓存的,第一次查询的时间基本上在80~150毫秒之间,第二次查由于有缓存,查询时间基本上只需要18~35毫秒,可以说非常之快。它如何做到分布式?因为现在做的是集群,每台机器存储的信息是一样的,怎样做到把索引信息进行拆分?于是就到solr的官网查资料,原来solr是有索引分片功能的,可以通过分片把索引拆分成多个部分,分布到不同的机器上。知道怎样做后就部署了两个分片,测试后发现性能差不多,不过这样还有问题就是怎样做到索引分布的负载均衡?solr并没有提供自带的负载均衡,完全要自己编程实现,而且实现起来非常复杂,于是放弃了这个方案。
solr官网:http://lucene.apache.org/solr/
分布式搜索方案选型之二:Solandra
我在学校项目实践时使用过solandra,它是一个基于solr和nosql数据库cassandra的分布式搜索引擎。cassandra是由facebook开源的nosql数据库,facebook的信箱搜索就是基于它实现的,它是基于列结构的,不同与关系数据库。它的数学模型基于google的bigtable和Amazon的Dynamo,它的一个重要特性是没有对外没有中心节点,所以不会存在单点故障的问题,如果当前猪节点挂了,那么它余下的节点会进行自动投票,选举出新的节点,这种特性未来必定是所有分布式系统的特性之一。它是当前热门的nosql数据库之一。
我看了下它的源码,它从底层上重新实现了solr索引的存储,把索引数据保存到cassandra中。它的这种实现方式给了我一个思路,就是lucene和nosql数据库结合的可行性。由于solandra的零配置和自动发现的特性,很容易就部署起来,基本上一启动服务就行了。我把原先用于测试的200万数据导浸solandra中,它完全是黑盒模式的,你根本不知道你的数据分布到了那台机器,你可以设置副本数来冗余数据,增加可用性和容错性。
导完数据就对它进行性能测试,发现它的第一次查询效率非常低,平均查询时间4秒,比原生的solr低了很多,我猜测这里性能的差距主要是因为它把索引存储cassandra中,原本的是直接保存到文件系统中的,现在是先从数据库读取到文件系统,多了一步,所以查询效率有所差异,不过这样的好处是真正实现了索引的分布式存储。想到如果运行当中有台机器挂了怎么办?于是就开始测试它的容灾性,结果发现,如果是一个3台机的solandra机器,挂了其中一台机还是可以查的,但是如果挂了两台机就搜索不出东西。这是因为我把索引的副本定义为2即集群中有两份完整的索引。由于它索引不可见的黑盒特性我们并不知道它实际上索引的分布情况,这样的话对后期索引的维护并不好。加上它查询效率的问题,最终放弃该方案。
solandra项目地址:https://github.com/tjake/Solandra
分布式搜索方案选型之三:SolrCloud
逛solr官网时无意发现了solrCloud这个开源项目,即solr云或叫分布式solr。它是基于solr的,使用zookeeper作为节点之间通信管理,它具有solr的所有特征,并提供索引分片的功能,不过这是要自己在配置文件中配置分片信息的。它好的地方是它是个实时的搜索引擎,即将推出的lucene4.0将实现实时搜索,而solrCloud就是基于开发中的lucene4.0的,目前solrCloud也是个本成品,本着试试的心态根据官方配置文档搭建了
一个三台机器,三个分片的分布式环境并对其进行测试。查询效率与三台机的solr集群差不多,都比较快。不过它的搜索接口很不好,你要在请求的url中指定分片的地址,如:http://localhost:8983/solr/collection1/select?shards=shard1,shard2,shard3。还有一个不好的地方是和solr一样,建立索引时它没有自动给你做负载均衡,如果你一直往分片1中插数据它也不管你的,你要自己编程去完成索引的均衡分配,这样的话工作量就很大了。于是放弃solrCloud。
solrCloud项目地址:http://wiki.apache.org/solr/SolrCloud
分布式搜索方案选型之四:Solr+Katta
一个叫katta的开源项目进入我的视线,它是一个分布式索引建立和管理工具,底层是hadoop的hdfs分布式文件系统,hadoop是当今云计算的热门使用项目,由apatch开源是一个海量数据的处理和存储方案,它的主要核心就是它的hdfs分布式文件存储系统和mapreduce算法,它们分别是google论文中的gfs和mapreduce的开源实现。目前大公司的云计算平台基本上都是基于它来搭建的。因为我之前在学校做的一个搜索引擎项目也是基于它的,所以我对它还是比较熟悉的,通过之前写过的自动化部署脚本,我很快就搭起了一个由4台机器组成的hadoop集群,每台机160G的硬盘,乘于4的话就是640G了,而且这640G还是一个整体来的哦,以后如果空间不够了,或者运算能力不够了的话就直接加机器就行了,使用hadoop可以非常容易的提高整个系统的运算能力,google的核心技术之一就它了。而katta这个项目只是个lucene的索引管理工具,通过hadoop的mapreduce算法来批量建立索引,它的很大部分特性都是参考了nutch(一个基于hadoop的开源爬虫项目),它提供的搜索功能很弱,只有最基本的查询方法,一些高级的如:分组,统计,范围查询都没有的,于是试试看看能否把它和solr进行集成,因为solr提供了很强大的搜索功能,网上搜索发现有人已经研究实现它了,就是这个帖子https://issues.apache.org/jira/browse/SOLR-1395,不过配置过程极其复杂,而且还要该很多的源码,我看那帖子是从10年就开始了的,他们的讨论已经持续一年多了,貌似还没有什么结果,可见难度还是比较大的。就没有深入去了解。
katta官网:http://katta.sourceforge.net/
分布式搜索方案选型之五(终篇):Elasticsearch
最后发现了elasticsearch这个分布式搜索框架,我一看它的介绍就觉得,就是它了。它基本上所有我想要的特性都包含了,分布式搜索,分布式索引,零配置,自动分片,索引自动负载,自动发现,restful风格接口。于是就开始使用,部署了四台机器,并把索引导了进去,我设置的分片为3,即把索引分成三片,副本为2,即有两份完整的索引。
通过它的管理工具可以很清晰的看到它索引分布的情况:哪块分布在那里,占用空间多少都可以看到,并且可以管理索引。还发现当一台机挂了时,整个系统会对挂机里的内容重新分配到其它机器上,当挂掉的机重新加入集群时,又会重新把索引分配给它。当然,这些规则都是可以根据参数进行设置的,非常灵活。对它的搜索效率进行测试,查询时间基本上维持在200毫秒左右,第二次搜索的话因为有缓存,所以和solr差不多。但经过详细对比测试后发现,solr在建索引时的查询性能非常之差,因为solr在建索引时会产生io的阻塞,造成搜索性能的下降,但elasticsearch不会,因为它是先把索引的内容保存到内存之中,当内存不够时再把索引持久化到硬盘中,同时它还有一个队列,是在系统空闲时自动把索引写到硬盘中。
它的存储方式有四种,1.像普通的lucene索引,存储在本地文件系统中。2.存储在分布式文件系统中,如freeds。3.存储在hadoop的hdfs中。4.存储在亚马逊的s3云平台中。它支持插件机制,有丰富的插件。比如和mongoDB couchDB同步的river插件,分词插件,hadoop插件,脚本支持插件等。它有个第三方的solr接口模拟插件,使用这个插件可以使你原本基于 solr的系统无须改代码直接切换到elasticsearch中,它还是个准实时的搜索引擎,所谓实时搜索引擎就是当你索引一个文档后你搜索这个文档立即就能搜索到。于是就决定使用这套分布式搜索框架。
后记:之前还简单了解过LinkedIn的zoie,它也是个准实时搜索框架,不过它是不支持分布式的,现在LinkedIn开源出了基于zoie的分布式搜索框架sensei,这个没研究过,有空可以试下。
elasticsearch solr对比评测:http://engineering.socialcast.com/2011/05/realtime-search-solr-vs-elasticsearch/
elasticsearch官网:http://www.elasticsearch.org/
from internet
相关推荐
分布式搜索方案选型是IT领域中对于大数据处理和高并发查询场景的重要决策。本文将详细介绍五种分布式搜索方案,包括Solr、Solandra和SolrCloud,帮助读者理解它们的特点、优势以及可能存在的问题。 首先,Solr是...
文章进一步探讨了数据资源整合的方案选型,包括自主开发索引工具、基于Lucene封装实现信息索引、调用第三方API以及基于Solr和Compass+Lucene进行信息索引的几种主要应用模式。其中,基于Solr实现信息索引的模式被...
在实际应用中,饿了么的分布式KV系统广泛应用于搜索、推荐、促销、智能调度和商品分类排序等场景。系统拥有十几套集群,分布在四个机房,处理着几十TB的数据,高峰时期单集群的QPS(每秒查询率)超过10万,平均响应...
### 高可用分布式架构设计与实践-内训方案 #### 第一课:知识原理篇 - **什么是架构的高可用** 架构的高可用性是指在系统发生故障时,能够保证业务不受影响或者影响最小化的能力。具体而言,高可用性的目标是...
**技术选型**:对比各种分布式数据库,选择最适合的解决方案。\n3. **原型设计与测试**:搭建测试环境,进行功能验证和性能测试。\n4. **迁移规划**:设计数据迁移方案,考虑应用改造和兼容性问题。\n5. **上线与...
首先,ES是一个分布式搜索服务器,它提供了轻松的分片(sharding)和复制(replication)功能。这意味着ES能够将一个大索引分割成小块,分散在不同的节点上,同时它还能够将索引复制到多个节点,从而实现高可用性和...
在可能存在错误的服务节点上,采用了包括安全认证、分布式缓存锁、消息服务、分布式搜索引擎等技术手段。安全认证保证了服务调用的安全性;分布式缓存锁用于处理并发访问的同步问题;消息服务则通过异步通信机制提高...
粒子群优化算法是一种启发式搜索算法,它模拟鸟群的社会行为,通过粒子(潜在解决方案)的群体合作和竞争来寻找问题的最优解。在模型中,粒子群优化算法用于优化选择和配置分布式发电机组。 在研究和仿真过程中,...
以上是基于文件内容提炼出的多个知识点,不仅详细介绍了分布式ECM存储架构的综合档案管理系统的建设要点,还涉及了档案管理现状、系统设计与实现、技术选型等多个方面的知识点。这些内容为现代企业档案管理系统的...
- 分布式搜索引擎(如Solr、Elasticsearch)。 - 集群管理(如Ambari、Cloudera Manager)。 - 分布式资源调度管理(如YARN、Mesos)。 - 分布式存储系统(如HBase、Kudu)。 - 机器学习(如Apache Mahout、...
19. 分布式事务解决方案:两阶段提交、三阶段提交、Saga、分布式事务协调器(如X/Open XA)等。 20. 大数据量聚合:Elasticsearch利用倒排索引和分布式计算能力高效处理。 21. 读写一致性:Elasticsearch通过主...
智慧园区综合管理平台解决方案的技术架构主要包括面向服务的体系架构(SOA)、前端技术选型、数据存储技术选型、消息处理框架、分布式计算框架、实时流式计算框架、分布式存储框架、分布式资源管理框架、数据计算...
因此,研究如何合理规划分布式电源的选址、选型和定容成为了当前电力系统研究的一个热点。合理规划不仅需要考虑经济性,还要考虑系统的稳定性和电能质量。 在优化配置微电网分布式电源时,需要选择适当的目标函数和...
本文将围绕“Nginx + keepalived + MongoDB + haproxy + Sphinx”这一技术栈,详细介绍如何实现一个稳定的分布式集群部署方案。 #### 二、关键技术解析 ##### 1. Nginx **定义**:Nginx是一款高性能的HTTP和反向...
分布式爬虫是一种能够跨越多个机器或节点进行大规模网页抓取的技术方案。它能够显著提高爬虫的抓取速度、处理能力和稳定性,特别是在面对大型网站或者需要高频次抓取数据的应用场景下。 #### 二、分布式爬虫的主要...
前台系统基于分布式架构拆分成多个子系统,如门户、搜索、订单和单点登录,每个子系统采用SOA(Service-Oriented Architecture)架构,独立服务化。后台管理系统则负责商品和服务的后台运营。 4. **挑战与解决方案...
技术架构包括前端技术选型、数据存储技术选型、消息处理框架、分布式计算框架、实时流式计算框架、分布式存储框架、分布式资源管理框架、数据计算框架、分布式搜索和分析引擎、分布式数据采集等几个方面。...
大数据平台技术框架选型是构建高效、稳定且适应企业需求的数据基础设施的关键步骤。在这个过程中,我们需要考虑各种技术组件,以确保能够处理不同类型的海量数据,同时提供高效的数据处理、分析和检索能力。以下是对...
这个网络支持高效的搜索推荐和智能问答,例如,能够快速找到满足特定条件的房源,如开发商、绿化率、交通设施和教育配套等。这种场景偏重于事实关系的存储和查询,强调数据的实时性和准确性。 贝壳关系图谱则是基于...