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

这篇具有很好参考价值的文章主要介绍了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)
        这样吧,为了做个更直白的介绍,我在这里做个类比。但是切记,不要划等号,类比只是为了便于理解。
        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 的分布式架构原理能说一下么(ES 是如何实现分布式的啊)?,搜索引擎,elasticsearch,分布式,架构

        你搞一个索引,这个索引可以拆分成多个 shard ,每个 shard 存储部分数据。拆分多个 shard
是有好处的,一是 支持横向扩展 ,比如你数据量是 3T 3 shard ,每个 shard 1T 的数据,若现在数据量增加到 4T ,怎么扩展,很简单,重新建一个有 4 shard 的索引,将数据导进 去;二是 提高性能 ,数据分布在多个 shard ,即多台服务器上,所有的操作,都会在多台机器上并行分布式执行,提高了吞吐量和性能。、
        接着就是这个 shard 的数据实际是有多个备份,就是说每个 shard 都有一个 primary shard
,负责写入数据,但是还有几个 replica shard primary shard 写入数据之后,会将数据同步到其他几个 replica shard 上去。

ES 的分布式架构原理能说一下么(ES 是如何实现分布式的啊)?,搜索引擎,elasticsearch,分布式,架构文章来源地址https://www.toymoban.com/news/detail-839959.html

        通过这个 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 作为分布式搜索引擎最基本的一个架构设计。
ps:一个点赞一份爱,点个关注不迷路!

到了这里,关于ES 的分布式架构原理能说一下么(ES 是如何实现分布式的啊)?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是Python爬虫分布式架构,可能遇到哪些问题,如何解决

    目录 什么是Python爬虫分布式架构 1. 调度中心(Scheduler): 2. 爬虫节点(Crawler Node): 3. 数据存储(Data Storage): 4. 反爬虫处理(Anti-Scraping): 5. 分布式通信和协调(Communication and Coordination): Python爬虫分布式架构代码示例 1. 调度中心(scheduler.py): 2. 爬虫节点(crawl

    2024年02月10日
    浏览(33)
  • 分布式技术原理与实战45讲--05 第05讲:共识问题:区块链如何确认记账权?

    本课时我们主要讲解“共识问题:区块链如何确认记账权?” 区块链可以说是最近几年最热的技术领域之一,区块链起源于中本聪的比特币,作为比特币的底层技术,本质上是一个去中心化的数据库,其特点是 去中心化、 公开透明,作为分布式账本技术,每个节点都可以参

    2024年02月03日
    浏览(32)
  • 【软件开发/设计】分布式架构中的组件(如Kafka、MongoDB和Nginx)如何进行容器化部署

    容器化部署是将应用程序及其依赖打包成一个容器镜像,然后在任何支持容器的环境中运行这个镜像的过程。在分布式架构中,像Nginx、MongoDB、Kafka这样的组件通过容器化可以更易于部署、扩展和管理。以下是这些组件容器化部署的一般步骤和原理: 容器化部署的一般步骤

    2024年02月04日
    浏览(37)
  • 【分布式】分布式存储架构

    说到分布式存储,我们先来看一下传统的存储是怎么个样子。 传统的存储也称为集中式存储, 从概念上可以看出来是具有集中性的,也就是整个存储是集中在一个系统中的,但集中式存储并不是一个单独的设备,是集中在一套系统当中的多个设备,比如下图中的 EMC 存储就需

    2024年02月10日
    浏览(37)
  • 分布式爬虫架构-对等分布式(2)

    前言 本文是该专栏的第45篇,后面会持续分享python爬虫干货知识,记得关注。 在面对海量数据的采集需求时,使用分布式爬虫是非常有必要的。继上一篇,详细介绍主从分布式爬虫架构,对主从分布式相关知识感兴趣的同学,可往前翻阅。而本文,笔者再单独来详细介绍分布

    2023年04月25日
    浏览(41)
  • 【ES】分布式集群

    本文主要参考尚硅谷的资料,少部分自己原创,有错误之处请指出。 node-1001配置如下: 坑1:如果之前启动过此 ES 服务,需要删除 data文件夹以及logs里面的所有日志,否则可能配置失效 坑2: discovery.seed_hosts以及cluster.initial_master_nodes不需要配置 ,否则访问此 ES 服务会报错找

    2024年02月09日
    浏览(27)
  • 分布式系统架构设计之分布式缓存技术选型

    随着互联网业务的快速发展,分布式系统已经成为了解决大规模并发请求、高可用性、可扩展性等问题的重要手段。在分布式系统中,缓存作为提高系统性能的关键技术,能够显著降低数据库负载、减少网络延迟、提高数据访问速度。当面对大量并发请求时,如果每次都直接

    2024年02月03日
    浏览(45)
  • 分布式软件架构——分布式事务TCC和SAGA

    TCC 是另一种常见的分布式事务机制,它是“ Try-Confirm-Cancel ”三个单词的缩写,是由数据库专家 Pat Helland 在 2007 年撰写的论文《Life beyond Distributed Transactions: An Apostate’s Opinion》中提出。 前面介绍的可靠消息队列虽然能保证最终的结果是相对可靠的,过程也足够简单(相对于

    2024年02月12日
    浏览(33)
  • 【分布式搜索引擎es】

    elasticsearch最擅长的是 搜索 和 数据分析 。 查询文档 常见的查询类型包括: 查询所有 :查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查询 :利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: match_query multi_match_query 精确查询 :根据精确

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包