文档章节

分布式搜索引擎的架构是怎么设计的?

Star永恒
 Star永恒
发布于 01/20 11:25
字数 1401
阅读 500
收藏 2

业内目前来说事实上的一个标准,就是分布式搜索引擎一般大家都用elasticsearch

(1) 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的情况,你可以认为index是一个类别的表,具体的每个type代表了具体的一个mysql中的表

每个type有一个mapping,如果你认为一个type是一个具体的一个表,index代表了多个type的同属于的一个类型,mapping就是这个type的表结构定义,你在mysql中创建一个表,肯定是要定义表结构的,里面有哪些字段,每个字段是什么类型。。。

 

Mapping就代表了这个type的表结构的定义,定义了这个type中每个字段名称,字段是什么类型的,然后还有这个字段的各种配置

实际上你往index里的一个type里面写的一条数据,叫做一个document,一条document就代表了mysql中某个表里的一行给,每个document有多个field,每个field就代表了这个document中的一个字段的值

接着你搞一个索引,这个索引可以拆分成多个shard,每个shard存储部分数据。

接着就是这个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的身份转移到其他机器上的replica shard。急着你要是修复了那个宕机机器,重启了之后,master节点会控制将缺失的replica shard分配过去,同步后续修改的数据之类的,让集群恢复正常。

其实上述就是elasticsearch作为一个分布式搜索引擎最基本的一个架构设计。

© 著作权归作者所有

上一篇: springmvc
下一篇: jvm内存布局
Star永恒
粉丝 10
博文 182
码字总数 249104
作品 0
大兴
后端工程师
私信 提问
加载中

评论(0)

ElasticSearch是如何实现分布式的?

面试题 es 的分布式架构原理能说一下么(es 是如何实现分布式的啊)? 面试官心理分析 在搜索这块,lucene 是最流行的搜索库。几年前业内一般都问,你了解 lucene 吗?你知道倒排索引的原理吗...

李红欧巴
2019/03/25
45
0
电商搜索引擎的架构设计和性能优化

「 OneAPM 技术公开课」由应用性能管理第一品牌 OneAPM 发起,内容面向 IT 开发和运维人员。云集技术牛人、知名架构师、实践专家共同探讨技术热点。本文系「OneAPM 技术公开课」第一期演讲嘉...

OneAPM蓝海讯通
2015/10/30
308
0
说一下Dubbo 的工作原理?注册中心挂了可以继续通信吗?

面试题 说一下的 dubbo 的工作原理?注册中心挂了可以继续通信吗?说说一次 rpc 请求的流程? 面试官心理分析 MQ、ES、Redis、Dubbo,上来先问你一些思考性的问题、原理,比如 kafka 高可用架...

李红欧巴
2019/04/20
192
1
SegmentFault D-Day 2015 北京站

SegmentFault D-Day 介绍 2014 年 SegmentFault D-Day,5 个月,9 场技术沙龙,覆盖北京、杭州、南京上千的开发者,我们受到了越来越多的开发者的参与和肯定。这些肯定也让我们不敢减弱技术传...

文洁洁洁
2015/03/09
358
1
《Java 进阶之路》 下

真正想提升自己,我感觉最主要的是先把 JVM、并发、网络这三块知识点学会、学通,这三块是基础,后面所有的框架、中间件等相关的都是基于这三块知识点之上的。学完这三块知识点,可以快速的掌...

jijs
2017/11/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

2019 年 Google 编程之夏活动报告

本文首发于: Jenkins 中文社区 原文链接 作者:Martin d'Anjou,Jeff Pearce,Oleg Nenashev,Marky Jackson 译者:s1mple_zj 2019 年 Google 编程之夏活动报告 主要介绍了 GSoC 2019 活动的...

Jenkins中文社区
6分钟前
15
0
Spring Batch 在默认情况下的任务执行

在默认情况,如果你对 Spring Batch 不进行配置的话。 Spring Batch 将会对所有存在的作业(Job)进行执行。 考察项目:https://github.com/cwiki-us-spring/cwiki-us-spring-batch-examples...

honeymoose
今天
47
0
OSChina 周三乱弹 —— 提高不了工作效率和脸有关系

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 1 《夏令时记录(piano.ver)》- ゆめこ 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
86
2
List的一波操作

public static void main(String[] args) { List<Entity> list = new ArrayList<>(); list.add(new Entity(1)); list.add(new Entity(2)); list.add(new Entity(3)); ......

那个猩猩很亮
今天
75
0
Spring基础

主要用于service层; 轻量级java开发框架; 各层 web层:struts,spring-MVC service层:spring dao层:hibernate,mybatis , jdbcTemplate --> spring-data Spring核心:控制反转IOC 切面编...

七宝1
今天
30
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部