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

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集