点击上方蓝色“程序猿DD”,选择“设为星标”

回复“资源”获取独家整理的学习资料!

来源 | http://8rr.co/Gs9a

面试题

ES 的分布式架构原理能说一下么(ES 是如何实现分布式的啊)?

面试官心理分析

在搜索这块,lucene 是最流行的搜索库。几年前业内一般都问,你了解 lucene 吗?你知道倒排索引的原理吗?现在早已经 out 了,因为现在很多项目都是直接用基于 lucene 的分布式搜索引擎—— ElasticSearch,简称为 ES。

而现在分布式搜索基本已经成为大部分互联网行业的 Java 系统的标配,其中尤为流行的就是 ES,前几年 ES 没火的时候,大家一般用 solr。但是这两年基本大部分企业和项目都开始转向 ES 了。

所以互联网面试,肯定会跟你聊聊分布式搜索引擎,也就一定会聊聊 ES,如果你确实不知道,那你真的就 out 了。

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

面试题剖析

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

ES 中存储数据的基本单位是索引,比如说你现在要在 ES 中存储一些订单数据,你就应该在 ES 中创建一个索引 order_idx ,所有的订单数据就都写到这个索引里面去,一个索引差不多就是相当于是 mysql 里的一张表。

index -> type -> mapping -> document -> field。Copy to clipboardErrorCopied

这样吧,为了做个更直白的介绍,我在这里做个类比。但是切记,不要划等号,类比只是为了便于理解。

index 相当于 mysql 里的一张表。而 type 没法跟 mysql 里去对比,一个 index 里可以有多个 type,每个 type 的字段都是差不多的,但是有一些略微的差别。假设有一个 index,是订单 index,里面专门是放订单数据的。就好比说你在 mysql 中建表,有些订单是实物商品的订单,比如一件衣服、一双鞋子;有些订单是虚拟商品的订单,比如游戏点卡,话费充值。就两种订单大部分字段是一样的,但是少部分字段可能有略微的一些差别。

所以就会在订单 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 中的一个字段的值。

es-index-type-mapping-document-field

你搞一个索引,这个索引可以拆分成多个 shard ,每个 shard 存储部分数据。拆分多个 shard 是有好处的,一是支持横向扩展,比如你数据量是 3T,3 个 shard,每个 shard 就 1T 的数据,若现在数据量增加到 4T,怎么扩展,很简单,重新建一个有 4 个 shard 的索引,将数据导进去;二是提高性能,数据分布在多个 shard,即多台服务器上,所有的操作,都会在多台机器上并行分布式执行,提高了吞吐量和性能。

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

es-cluster

通过这个 replica 的方案,每个 shard 的数据都有多个备份,如果某个机器宕机了,没关系啊,还有别的数据副本在别的机器上呢。高可用了吧。

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 作为分布式搜索引擎最基本的一个架构设计。

往期推荐

IDEA不愧为神器,结合Groovy脚本,简直无敌!

只需4步,自己搞个 Spring Boot Starter !

离职成为自由开发者的第 100 天

ArrayList 为什么要实现 RandomAccess 接口?

为什么阿里规定需要在事务注解@Transactional中指定rollbackFor?

离职成为自由开发者的100天

我在星球与你分享经验、交流成长

???? ???? ???? ????

星球两大分享内容

ES 的分布式架构原理能说一下么?相关推荐

  1. es 创建索引_从一道面试题来看ES的分布式架构原理

    概述 在搜索这块,lucene 是最流行的搜索库.几年前业内一般都问,你了解 lucene 吗?你知道倒排索引的原理吗?现在早已经 out 了,因为现在很多项目都是直接用基于 lucene 的分布式搜 ...

  2. elasticsearch的分布式架构原理

    对于全文检索,lucene是目前最流行的搜索库.以前我们都需要学习使用lucene,基于lucene做相关的开发,学习倒排索引的原理,而现在,我们可以直接使用现成的搜索框架了,因为现在很多这种搜索框架 ...

  3. Elasticsearch 分布式架构原理

    前言 前面介绍了很多ES使用过程中的具体实战知识点,本文主要是谈谈ES分布式架构原理. 一.Elasticsearch特点 elasticsearch是近实时的分布式搜索分析引擎,底层实现基于Luce ...

  4. 赠书5本包邮:数据思维实践、Cloud Native分布式架构原理与实践

    为了回馈我们默默关注的粉丝朋友们,数据和云(ID:OraNews)联合北京大学出版社为大家推出了此次活动,这次推荐两本书,<Cloud Native分布式架构原理与实践>.<数据思维 ...

  5. 连阿里P8都赞不绝口的“分布式架构原理设计笔记”到底有多牛

    在分布式系统中,一次业务处理可能需要多个应用来实现,比如用户发送一次下单请求,就涉及到订单系统创建订单,库存系统减库存,而对于一次下单,订单创建与减库存应该是要同时成功或者同时失效,但在分布式系统中, ...

  6. 分布式架构原理解析常见问题解决

    大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 分布式架构原理解析常见问题解决 1. 分 ...

  7. 【Java架构师入门到精通】分布式架构原理解析

    1. 分布式术语 1.1. 异常 服务器宕机 内存错误.服务器停电等都会导致服务器宕机,此时节点无法正常工作,称为不可用. 服务器宕机会导致节点失去所有内存信息,因此需要将内存信息保存到持久化介质上. ...

  8. 连你女朋友都能看懂的分布式架构原理!

    目录 从一个新闻门户网站案例引入 推算一下你需要分析多少条数据? 黄金搭档:分布式存储+分布式计算 这篇文章聊一个话题:什么是分布式计算系统? 一.从一个新闻门户网站案例引入 现在很多同学经常会看到一 ...

  9. es分布式架构和原理分析

    es的分布式架构 前言 这篇初识ElasticSearch文章中,说明了es的集群的核心概念,回顾一下. 关于节点: 一个运行中的 es实例称为一个节点,而集群是由一个或者多个拥有相同cluster. ...

最新文章

  1. 《OpenCV3编程入门》学习笔记9 直方图与匹配(三)直方图对比
  2. Think Python - Chapter 12 Tuples
  3. 腾讯发现Google Home首个无接触攻破漏洞
  4. 蓝桥杯 ADV-205 算法提高 拿糖果
  5. 现在为什么面对着人多,陌生人的时候会紧张?
  6. 从TimeSpan说起
  7. PLSQL登录报错ORA-12154
  8. python适用于哪些芯片_用pyusb在Python中开发CY7C68013,利用,PyUSB,进行,芯片,的,上位,机...
  9. J2ME结构与相关规范介绍
  10. C语言关键字必备练习题
  11. 你一定要狠狠的幸福,那个凶丫头(2)
  12. 大数据平台自动化运维,数据中心运维平台
  13. Android简历知识点模板
  14. 如何让你的本地上的项目不用部署到服务器也能让外网看到?使用ngrok内网穿透实现
  15. 用小程序组装App,小程序容器技术好比基建
  16. Hamilton Jacobi
  17. git恢复误删代码或文件
  18. 【自然语言处理】【文本生成】UniLM:用于自然语言理解和生成的统一语言模型预训练
  19. 安装 CentOS Ubuntu
  20. 决胜机房奥林匹克之LCA篇

热门文章

  1. linux 查看 定时任务 crontab 日志记录
  2. linux 设备事件管理服务 systemd-udevd.service 简介
  3. 水抗攻击 apt攻击手段
  4. python3 获取异常类型
  5. python3 操作redis
  6. 软件版本中 release stable alpha beta pre snapshot 区别
  7. linux c 指针 内存 泄漏几种情况
  8. linux shell 加、减、乘、除
  9. python3 request模块 https certificate verify failed 错误
  10. 利用tab_control控件在对话框中加入属性页的方法详细介绍