当前位置: 首页 > news >正文

Elasticsearch 的分布式架构原理:通俗易懂版

Elasticsearch 的分布式架构原理:通俗易懂版

Lucene 和 Elasticsearch 的前世今生

Lucene 是一个功能强大的搜索库,提供了高效的全文检索能力。然而,直接基于 Lucene 开发非常复杂,即使是简单的功能也需要编写大量的 Java 代码,并且需要深入理解其底层原理。

Elasticsearch(简称 ES)构建在 Lucene 之上,隐藏了 Lucene 的复杂性,提供了简单易用的 RESTful API 和 Java API,同时支持多种语言的 API 访问,使得搜索引擎的开发变得更加容易。

Elasticsearch 是什么?

Elasticsearch 主要有以下特点:

  • 分布式文档存储引擎
  • 分布式搜索引擎和分析引擎
  • 分布式架构,支持 PB 级数据

ES 的核心概念

近实时(Near Realtime,NRT)

Elasticsearch 是一个近实时(NRT)的搜索引擎,意味着:

  1. 从写入数据到数据可以被搜索到,会有一个小延迟(通常 1 秒左右)。
  2. 通过 ES 进行搜索和分析可以在秒级时间内返回结果。

集群(Cluster)

一个 Elasticsearch 集群由多个节点组成,每个节点所属的集群由配置决定。对于中小型应用来说,刚开始一个集群通常只有一个节点。

节点(Node)

  • 节点是 ES 集群中的一个实例,每个节点都有一个唯一的名称。
  • 默认情况下,节点会自动加入名为 elasticsearch 的集群。
  • 只要启动多个 ES 实例,它们就会自动组成一个集群。

文档(Document)和字段(Field)

  • **文档(Document)**是 ES 中最小的数据单元,类似于数据库中的一行记录。
  • **字段(Field)**是文档中的数据字段,类似于数据库中的列。
  • ES 以 JSON 格式存储文档。

示例:

{"product_id": "1","product_name": "iPhone X","product_desc": "苹果手机","category_id": "2","category_name": "电子产品"
}

索引(Index)

  • 索引(Index)是一组具有相似结构的文档集合,类似于数据库中的 表(Table)
  • 例如,一个 product_index 可能存储所有商品的相关信息。

⚠ 过时概念:Type

在 Elasticsearch 7.x 及以上版本中,type 概念已被移除,所有索引只能有一个 type

以前,type 用于对一个索引内的数据进行分类,比如:

  • product_index 下可以有 electronicsclothing 两个 type,分别存储电子产品和服装产品的数据。
  • 但在 ES 7.x 及以上版本中,这种分类方式已不再支持,建议使用不同的索引来存储不同类别的数据。

分片(Shard)

  • 单台服务器无法存储海量数据,ES 通过 分片(Shard) 机制将索引拆分成多个部分,并分布在多台服务器上。
  • 优点:
    1. 扩展能力:可以存储更多数据。
    2. 提高查询性能:查询时多个分片可以并行执行,提高吞吐量。

注意:

  • 每个分片(Shard)本质上是一个独立的 Lucene 索引。
  • 在创建索引时,需要指定分片数量,后续不能更改。

副本(Replica)

  • 副本(Replica) 用于提高数据的可用性和查询性能。
  • 副本的作用:
    1. 高可用性:如果主分片(Primary Shard)所在节点宕机,副本(Replica Shard)可以接管,防止数据丢失。
    2. 负载均衡:多个副本可以分担查询压力,提高查询速度。

默认配置:

  • Primary Shard(主分片):默认 5 个,创建索引时确定,无法修改。
  • Replica Shard(副本分片):默认 1 个,可以随时调整。
  • 最小的高可用配置:需要至少 2 台服务器,确保每个副本分布在不同的节点上。

示意图:

索引 -> 分片(Shards)-> 主分片(Primary Shard)& 副本分片(Replica Shard)

ES vs 传统数据库对比

Elasticsearch关系型数据库
Index(索引)数据库(Database)
Document(文档)行(Row)
Field(字段)列(Column)

总结

Elasticsearch 通过 分片(Sharding)+副本(Replication) 机制,实现了 分布式存储高可用性,同时提供了 近实时搜索 的能力,使得它成为大数据搜索和分析的主流选择。

在现代互联网公司,Elasticsearch 主要用于 日志分析、全文搜索、业务分析、推荐系统 等场景。如果你在面试中遇到 ES 相关问题,理解这些基本概念,可以帮助你更好地应对面试挑战。

相关文章:

Elasticsearch 的分布式架构原理:通俗易懂版

Elasticsearch 的分布式架构原理:通俗易懂版 Lucene 和 Elasticsearch 的前世今生 Lucene 是一个功能强大的搜索库,提供了高效的全文检索能力。然而,直接基于 Lucene 开发非常复杂,即使是简单的功能也需要编写大量的 Java 代码&…...

【DeepSeek】【GPT-Academic】:DeepSeek集成到GPT-Academic(官方+第三方)

目录 1 官方deepseek 1.1 拉取学术GPT项目 1.2 安装依赖 1.3 修改配置文件中的DEEPSEEK_API_KEY 2 第三方API 2.1 修改DEEPSEEK_API_KEY 2.2 修改CUSTOM_API_KEY_PATTERM 2.3 地址重定向 2.4 修改模型参数 2.5 成功调用 2.6 尝试添加一个deepseek-r1参数 3 使用千帆…...

2.部署kafka:9092

官方文档:http://kafka.apache.org/documentation.html (虽然kafka中集成了zookeeper,但还是建议使用独立的zk集群) Kafka3台集群搭建环境: 操作系统: centos7 防火墙:全关 3台zookeeper集群内的机器,1台logstash 软件版本: …...

学习路之PHP --TP6异步执行功能 (无需安装任何框架)

学习路之PHP --异步执行功能 (无需安装任何框架) 简介一、工具类二、调用三、异步任务的操作四、效果: 简介 执行异步任务是一种很常见的需求,如批量发邮箱,短信等等执行耗时任务时,需要程序异步执行&…...

Uniapp 小程序复制、粘贴功能实现

在开发 Uniapp 小程序的过程中,复制和粘贴功能是非常实用且常见的交互需求。今天,我就来和大家详细分享如何在 Uniapp 中实现这两个功能。 复制功能:uni.setClipboardData方法 goResult() {uni.setClipboardData({data: this.copyContent, /…...

seacmsv9注入管理员账号密码+orderby+limit

一、seacmsv9 SQL注入漏洞 查看源码 <?php session_start(); require_once("include/common.php"); //前置跳转start $cs$_SERVER["REQUEST_URI"]; if($GLOBALS[cfg_mskin]3 AND $GLOBALS[isMobile]1){header("location:$cfg_mhost$cs");}…...

多通道数据采集和信号生成的模块化仪器如何重构飞机电子可靠性测试体系?

飞机的核心电子系统包括发电与配电系统&#xff0c;飞机内部所有设备和系统之间的内部数据通信系统&#xff0c;以及用于外部通信的射频设备。其他所有航空电子元件都依赖这些关键总线进行电力传输或数据通信。在本文中&#xff0c;我们将了解模块化仪器&#xff08;无论是PCIe…...

天润融通分析DeepSeek如何一键完成从PR接入,到真正的业务接入

DeepSeek出圈之后&#xff0c;市场上很快掀起了一波DeepSeek接入潮。 在客户服务领域&#xff0c;许多企业见识到DeepSeek的超强能力后&#xff0c;也迅速接入DeepSeek并获得了不错的效果。 比如在客户接待服务场景&#xff0c;有企业将DeepSeek应用到智能问答助手&#xff0…...

免费PDF工具

Smallpdf.com - A Free Solution to all your PDF Problems Smallpdf - the platform that makes it super easy to convert and edit all your PDF files. Solving all your PDF problems in one place - and yes, free. https://smallpdf.com/#rappSmallpdf.com-解决您所有PD…...

PyTorch 源码学习:GPU 内存管理之它山之石——TensorFlow BFC 算法

TensorFlow 和 PyTorch 都是常用的深度学习框架&#xff0c;各自有一套独特但又相似的 GPU 内存管理机制&#xff08;BFC 算法&#xff09;。它山之石可以攻玉。了解 TensorFlow 的 BFC 算法有助于学习 PyTorch 管理 GPU 内存的精妙之处。本文重点关注 TensorFlow BFC 算法的核…...

【学写LibreCAD】1 LibreCAD主程序

一、源码 头文件&#xff1a; #ifndef MAIN_H #define MAIN_H#include<QStringList>#define STR(x) #x #define XSTR(x) STR(x)/*** brief handleArgs* param argc cli argument counter from main()* param argv cli arguments from main()* param argClean a list…...

Android Studio超级详细讲解下载、安装配置教程(建议收藏)

博主介绍&#xff1a;✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神&#xff0c;答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战&#xff0c;深受全网粉丝喜爱与支持✌有…...

CDN与群联云防护的技术差异在哪?

CDN&#xff08;内容分发网络&#xff09;与群联云防护是两种常用于提升网站性能和安全的解决方案&#xff0c;但两者的核心目标和技术实现存在显著差异。本文将从防御机制、技术架构、适用场景和代码实现等方面详细对比两者的区别&#xff0c;并提供可直接运行的代码示例。 一…...

故障诊断 | Matlab实现基于DBO-BP-Bagging多特征分类预测/故障诊断

故障诊断 | Matlab实现基于DBO-BP-Bagging多特征分类预测/故障诊断 目录 故障诊断 | Matlab实现基于DBO-BP-Bagging多特征分类预测/故障诊断分类效果基本介绍模型描述DBO-BP-Bagging蜣螂算法优化多特征分类预测一、引言1.1、研究背景和意义1.2、研究现状1.3、研究目的与方法 二…...

Linux-SaltStack配置

文章目录 SaltStack配置 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Linux专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年02月24日20点51分 SaltStack配置 SaltStack 中既支持SSH协议也支持我们的一个客户端 #获取公钥&#xff08;…...

内网渗透测试-Vulnerable Docker靶场

靶场来源&#xff1a; Vulnerable Docker: 1 ~ VulnHub 描述&#xff1a;Down By The Docker 有没有想过在容器中玩 docker 错误配置、权限提升等&#xff1f; 下载此 VM&#xff0c;拿出您的渗透测试帽并开始使用 我们有 2 种模式&#xff1a; - HARD&#xff1a;这需要您将 d…...

云计算如何解决延迟问题?

在云计算中&#xff0c;延迟&#xff08;latency&#xff09;指的是从请求发出到收到响应之间的时间间隔。延迟过高可能会严重影响用户体验&#xff0c;特别是在需要实时响应的应用中&#xff0c;如在线游戏、视频流、金融交易等。云计算服务如何解决延迟问题&#xff0c;通常依…...

飞书webhook监控业务系统端口

钉钉告警没有额度了&#xff0c;替代方案使用企业微信或者是飞书&#xff0c;以下脚本是飞书为例 监控ping也就是活动主机 #!/bin/bash # IP Ping 监控脚本 date$(date "%Y-%m-%d %H:%M:%S") # 根据实际情况修改飞书 Webhook 地址 webhook"https://open.feish…...

电脑键盘知识

1、键盘四大功能区 1. 功能区 2. 主要信息输入区 3. 编辑区 4. 数字键盘区 笔记本电脑键盘的功能区&#xff0c;使用前需先按Fn键 1.1、功能区 ESC&#xff1a;退出 F1&#xff1a;显示帮助信息 F2&#xff1a;重命名 F4&#xff1a;重复上一步操作 F5&#xff1a;刷新网页 …...

Oracle23版本 创建用户 报 00959和65096错误解决办法

00959错误解决办法&#xff0c;用户名必须已 c##或者C##开头 65096错误解决办法&#xff0c;创建用户名时去掉DEFAULT TABLESPACE smallrainTablespace这个属性 附上oracle 23版本创建表空间和用户语句&#xff1b; sqlplus sys as sysdba CREATE TABLESPACE smallrainOrac…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...