突破Java面试(14)-分布式搜索引擎的架构

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 在搜索这块,曾经lucene 是最流行的搜索库. 几年前业内一般都问,你了解 lucene 吗?你知道倒排索引的原理吗? 但现在不问了,因为现在项目基本都是采用基于 lucene 的分布式搜索引擎—— ElasticSearch. 现在分布式搜索基本已经成为互联网系统的标配,其中尤为流行的就是 ES,前几年一般用 solr。

以下用ES表Elastic Search

0 Github

1 面试题

说说ES的分布式架构原理

2 考点分析

在搜索这块,曾经lucene 是最流行的搜索库.
几年前业内一般都问,你了解 lucene 吗?你知道倒排索引的原理吗?
但现在不问了,因为现在项目基本都是采用基于 lucene 的分布式搜索引擎—— ElasticSearch.

现在分布式搜索基本已经成为互联网系统的标配,其中尤为流行的就是 ES,前几年一般用 solr。但是最近基本大部分企业和项目都开始转向 ES.

所以互联网面试,肯定会跟你聊聊分布式搜索引擎,就一定会聊到ES!

如果面试官问你第一个问题,确实一般都会问你 es 的分布式架构设计能介绍一下么?就看看你对分布式搜索引擎架构的一个基本理解。

3 详解

ES的设计理念就是分布式搜索引擎,底层其实还是基于 lucene 的.
核心思想就是在多台机器上启动多ES进程实例,组成ES集群.

3.1 基本单位

ES 中存储数据的基本单位索引.
比如说你现在要在 ES 中存储一些订单数据,应该在 ES 中创建一个索引 order_idx,所有的订单数据就会写到该索引中.
一个索引概念上差不多就相当于MySQL 中的一张表.

index -> type -> mapping -> document -> field。

3.2 实例

为便于理解,我在这里做个类比.切记,仅仅是类比!绝不等同!

index 相当于 MySQL 里的一张表;
而 type 没法跟 MySQL 里去类比;
一个 index 里可以有多个 type,每个 type 的字段都是差不多的,也有略微差别.

假设有一个订单 index,专门存放订单数据.
就好比说你在 MySQL 中建表

  • 有些订单是实物商品的订单,比如一件衣服、一双鞋子
  • 有些订单是虚拟商品的订单,比如游戏点卡,话费充值

这两种订单大部分字段是一样的,但是少部分字段还是有略微差别.

类似地,ES就会在订单 index,建两个 type

  • 一个是实物商品订单 type
  • 一个是虚拟商品订单 type

这两个 type 大部分字段是一样的,少部分字段是不一样的。

很多情况下,一个 index 里可能就一个 type,但是确实如果说是一个 index 里有多个 type 的情况

mapping types 这个概念在 ElasticSearch 7.X 已被完全移除,详细说明参考官方文档

你可以认为 index 是一个类别的表,具体的每个 type 代表了 MySQL 中的一个表.
每个 type 有一个 mapping,如果假设一个 type 是具体的一个表,index 就代表多个 type 同属于的一个类型,而 mapping 就是这个 type 的表结构定义.
你在 MySQL 中创建一个表,肯定是要定义表结构的,里面有哪些字段,每个字段是什么类型.
实际上你往 index 里的一个 type 里面写的一条数据,叫做一条 document;
一条 document 就类似 MySQL 中某个表里的一行;
每个 document 有多个 field;
每个 field 就代表该 document 中的一个字段的值.

3.3 结构原理

你建立一个索引,该索引又可拆分成多个 shard,每个 shard 存储部分数据.
拆分成多个 shard 是有好处的

  • 支持横向扩展
    比如你数据量 3T,3 个 shard,每个 shard 就 1T 的数据,若现在数据量增到 4T,怎么扩展?

so easy!新建一个有 4 个 shard 的索引,将数据导入

  • 提高性能
    数据分布在多个 shard,即多台服务器上,所有的操作,都会在多台机器上并行分布式执行,提高了系统的吞吐量和性能.

接着就是这个 shard 的数据实际是有多个备份,即每个 shard 都有一个 primary shard负责写入数据,还有几个 replica shard.
primary shard 写入数据后,会将数据同步到其他几个 replica shard 中.


通过 replica 方案,每个 shard 数据都有多个备份.
即使某个节点宕机,其他节点上还有数据,满足高可用性.

3.4 主从特性

ES 集群的多个节点,会自动选举一个节点为 master 节点;
master 节点负责一些管理工作,比如维护索引元数据、切换 primary shard replica shard 身份等;
若 master 节点宕机,则会重新选举一个节点为 master.

若非 master 节点宕机了,则 master 节点会使宕机节点上的 primary shard 的身份转移到其他可用节点上的 replica shard.
接着你要是修复了那个宕机节点,重启后,master 节点会控制将缺失的 replica shard 分配回去,并且同步后续修改的数据之类的,让集群恢复正常.

更简单点,若某非 master 节点宕机了,那么该节点上的 primary shard 不也就没了嘛.
那好,master 会让 primary shard 对应的 replica shard(在其他节点上)切换为 primary shard.待宕机的节点修复了,修复后的节点也不再是 primary shard了,而是 replica shard.

以上就是 ElasticSearch 作为分布式搜索引擎最基本的架构设计.

参考

《Java工程师面试突击第1季-中华石杉老师》

更多干货资源请关注JavaEdge公众号

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
Transformer架构:重塑现代AI的核心引擎
Transformer架构:重塑现代AI的核心引擎
597 98
|
9月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
4月前
|
人工智能 自然语言处理 安全
AI助教系统:基于大模型与智能体架构的新一代教育技术引擎
AI助教系统融合大语言模型、教育知识图谱、多模态交互与智能体架构,实现精准学情诊断、个性化辅导与主动教学。支持图文语音输入,本地化部署保障隐私,重构“教、学、评、辅”全链路,推动因材施教落地,助力教育数字化转型。(238字)
817 23
|
4月前
|
存储 人工智能 搜索推荐
拔俗AI助教系统:基于大模型与智能体架构的新一代教育技术引擎
AI助教融合大语言模型、教育知识图谱、多模态感知与智能体技术,重构“教、学、评、辅”全链路。通过微调LLM、精准诊断错因、多模态交互与自主任务规划,实现个性化教学。轻量化部署与隐私保护设计保障落地安全,未来将向情感感知与教育深度协同演进。(238字)
475 0
|
4月前
|
机器学习/深度学习 人工智能 搜索推荐
拔俗AI学伴智能体系统:基于大模型与智能体架构的下一代个性化学习引擎
AI学伴智能体系统融合大模型、多模态理解与自主决策,打造具备思考能力的个性化学习伙伴。通过动态推理、长期记忆、任务规划与教学逻辑优化,实现千人千面的自适应教育,助力因材施教落地,推动教育公平与效率双提升。(238字)
631 0
|
5月前
|
存储 人工智能 关系型数据库
阿里云AnalyticDB for PostgreSQL 入选VLDB 2025:统一架构破局HTAP,Beam+Laser引擎赋能Data+AI融合新范式
在数据驱动与人工智能深度融合的时代,企业对数据仓库的需求早已超越“查得快”这一基础能力。面对传统数仓挑战,阿里云瑶池数据库AnalyticDB for PostgreSQL(简称ADB-PG)创新性地构建了统一架构下的Shared-Nothing与Shared-Storage双模融合体系,并自主研发Beam混合存储引擎与Laser向量化执行引擎,全面解决HTAP场景下性能、弹性、成本与实时性的矛盾。 近日,相关研究成果发表于在英国伦敦召开的数据库领域顶级会议 VLDB 2025,标志着中国自研云数仓技术再次登上国际舞台。
550 0
|
运维 监控 负载均衡
动态服务管理平台:驱动微服务架构的高效引擎
动态服务管理平台:驱动微服务架构的高效引擎
286 17
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
8月前
|
监控 搜索推荐 应用服务中间件
301重定向:网站迁移、SEO优化与架构重塑的核心引擎
301重定向是数字世界中确保网站迁移无缝过渡的关键策略。它通过HTTP状态码告知浏览器和搜索引擎资源的永久迁移,帮助维持权重传递与用户体验。本文深入解析301重定向的工作机制、SEO影响及实施策略,涵盖域名迁移、HTTPS升级、URL标准化等场景,并提供服务器配置示例(如.htaccess和Nginx规则)。同时,强调避免重定向链、循环等问题,推荐使用专业工具监控效果。掌握这些技巧,可确保网站在架构调整或迁移时保持流量稳定与搜索引擎信任,成为网站管理不可或缺的战略工具。
324 8
|
10月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构