面试题:ES是如何实现分布式的?分布式的架构原理是什么?

在搜索这块,Lucene是最流行的搜索库。几年前面试官一般都问,你了解Lucene吗?你知道倒排索引的原理吗?但是现在再问就out了,因为现在很多项目都是直接用基于Lucene的分布式搜索引擎-------ElasticSearch,简称ES。

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

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

    java index->type->mapping->document->field

    index相当于MySQL里的一张表,而type没法跟MySQL里去对比,一个index里可以有多个type,每个type的字段都是差不多的,但是有些略微的差别。
    很多情况下,一个index里可能就一个type,但是确实如果说是一个index里有多个type的情况(注意:mapping types 这个概念在ES 7.X已被完全移除),你可以认为index是一个类别的表,具体的每个type代表了mysql中的一个表。每个type有一个mapping,如果你认为一个type是具体的一个表,index就代表多个type同属于的一个类型,而mapping 就是这个type的表结构定义,你在MySQL中创建一个表,肯定是要定义表结构的,里面有哪些字段,每个字段什么类型,实际上你往index里的一个type里面写的一条数据,叫做一条document,一条document代表了mysql中某个表里的一行,每个document有多个field,每个field代表了这个document中的一个字段值。

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

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

    通过replica 方案,每个shard的数据都有多个备份,如果某个机器宕机了,还有别的数据副本在别的机器上,实现高可用性。

    ES集群多个节点,会自动选举一个节点为master节点,这个master节点其实就是干管理工作,比如维护索引元数据、负责切换primary shard和replica shard身份等。要是master节点宕机了,那么会重新选举一个节点为master节点。如果是非master节点宕机,那么会由master节点,让那个宕机节点的primary shard的身份转移到其他机器上的replicashard。如果修复好了那个宕机机器重启之后,master节点会控制将缺失的replica shard分配过去,同步后续修改的数据之类,让集群恢复正常。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值