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编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)