SolrCloud分布式企业搜索引擎架构原理解析

2024-02-05 22:50

本文主要是介绍SolrCloud分布式企业搜索引擎架构原理解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

在企业系统架构中,使用到了分布式文档搜索引擎Solr,这儿作一个简单的知识整理。

 

SolrCloud分布式企业搜索引擎架构原理解析

1、关于SolrCloud

Lucene 是一个Java语言编写的利用倒排原理实现的文本检索类库;而Solr则是以Lucene为核心来实现的企业级文本检索应用服务。Solr 部署方式有单机方式、多机Master-Slaver方式、Cloud方式。

SolrCloud 则是 Solr4.x 版本以后加入的基于 Solr 和 Zookeeper 的分布式搜索解决方案。SolrCloud 是 Solr 基于 Zookeeper 作为集群的配置信息中心的一种部署方式。Solr 可以以多种方式部署,例如:单机方式,多机Master-Slaver方式。

关于Zookeeper的原理及其优点,请参考【 Eureka 与 zookeeper 的区别、原理及各自优缺点 】

 

2、SolrCloud 特点

1)、集中式的配置

所有配置信息使用 Zookeeper 进行集中管理。启动时可以指定把 Solr 的相关配置文件上传 Zookeeper,跨主机共享。这些 Zookeeper 中的配置不会再拿到本地缓存,Solr 直接读取 Zk 中的配置信息。配置文件的变动,所有机器都可以感知到。另外,Solr 的一些任务也是通过 Zk 作为媒介发布的。目的是为了容错。接收到任务,但在执行任务时崩溃的机器,在重启后,或者集群选出候选者时,可以再次执行这个未完成的任务。

2)、自动容错(高可用)

SolrCloud 对索引进行分片,并对每个分片创建多个 Replication。每个 Replication 都可以对外提供服务。一个 Replication 挂掉不会影响整体的索引服务。更强大的是,它还能自动的在其它机器上帮你把失败机器上的索引 Replication 重建并投入使用。

3)、实时性

近实时搜索立即推送式的 replication(也支持慢推送,可配置)。可以在秒内检索到新加入索引。

4)、负载均很LB

查询时自动负载均衡SolrCloud索引的多个Replication可以分布在多台机器上,均衡查询压力。如果查询压力大,可以通过扩展机器,增加Replication来减缓。

5)、自动分发

自动分发的索引和索引分片发送文档到任何节点,它都会转发到正确节点。

6)、日志跟踪

事务日志事务日志确保更新无丢失,即使文档没有索引到磁盘。

7)、RESTful API

强大的RESTful API通常你能想到的管理功能,都可以通过此API方式调用。这样写一些维护和管理脚本就方便多了。

8)、可视化操作

优秀的管理界面主要信息一目了然;可以清晰的以图形化方式看到SolrCloud的部署分布;当然还有不可或缺的Debug功能。

 

2、Solr集群体系架构

物理结构层组成:

1)、Solr

三个 Solr 实例,每个实例包括两个Core,组成一个SolrCloud(随着业务流量的提升,灵活扩展Solr实列)。

2)、Core

每个 Core 是 Solr 实例中一个独立的运行单位,提供文档索引和搜索服务。

3)、Zookeeper

Zookeeper 在整个SolrCloud 集群中扮演了分布式锁的角色,对SolrCloud是必须的。由Zookeeper来确定 Leader 选举。Solr 可以以内嵌的 Zookeeper 运行,但是建议用独立的,并且最好有3个以上的主机。
 

逻辑结构层组成:
1)、Collection

Collection 在 SolrCloud 集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一个或多个Shard(逻辑分片),它们使用相同的Config。如果Shard数超过一个,它就是分布式索引,SolrCloud让你通过Collection名称引用它,而不需要关心分布式检索时需要使用的和Shard相关参数。

比如:针对商品信息搜索服务可以创建一个Collection:

 Collection = Shard-01 + Shard-02 + ... + Shard-N
2)、Shard

Collection 的逻辑分片。每个 Shard 被拆分成一个或者多个 replication,通过指定的某种选举机制来确定哪个是Leader。一个 Shard 需要由一个 Core 或多个 Core 组成。而 Collection 则一般由多个 Core 组成。

3)、Master/Slave

Master:是 Master-Slave 结构中的主结点

Slave:是Master-slave结构中的从结点

在同一个 Shard 下 Master 和 Slave 存储的数据是一致的,其目的为实现服务的高可用(何为高可用,就是在一个 Shard下,当 Master 节点挂掉后,某个 Slave 通过指定的选举机制,顶上来成为 Master,使服务正常运行,而不会出现服务访问中断的现象)。

 

 

 

 

参考文档(老版本):【Solr4.10参考指南】<-这个版本已经在官方找不到了

参考文档(新版本):【Solr8.1参考指南】


 好了,关于 SolrCloud分布式企业搜索引擎架构原理解析 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。 
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。


作       者:华    仔
联系作者:who.seek.me@java98k.vip
来        源:CSDN (Chinese Software Developer Network)
原        文:https://blog.csdn.net/Hello_World_QWP/article/details/98726379
版权声明:本文为博主原创文章,请在转载时务必注明博文出处!

这篇关于SolrCloud分布式企业搜索引擎架构原理解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/682410

相关文章

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

Redis实现分布式锁全解析之从原理到实践过程

《Redis实现分布式锁全解析之从原理到实践过程》:本文主要介绍Redis实现分布式锁全解析之从原理到实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景介绍二、解决方案(一)使用 SETNX 命令(二)设置锁的过期时间(三)解决锁的误删问题(四)Re

Gradle下如何搭建SpringCloud分布式环境

《Gradle下如何搭建SpringCloud分布式环境》:本文主要介绍Gradle下如何搭建SpringCloud分布式环境问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Gradle下搭建SpringCloud分布式环境1.idea配置好gradle2.创建一个空的gr

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http