Reference

1. http://solutionhacker.com/elasticsearch-architecture-overview/

2. https://github.com/batscars/advanced-java/blob/master/docs/high-concurrency/es-write-query-search.md

Elasticsearch是如何组织数据的

- Elasticsearch索引是组织数据的一个逻辑单位(类似数据库),保存在索引上的数据是一堆Json格式的相关文档
- 一个Elasticsearch索引包括一个或者多个分片,分布在不同的节点上(7.x版本后默认只有一个分片),主分片的数量在索引创建之后就确定了无法修改
- 每个分片可以拥有一个或者多个副本,默认为1。ES会保证主分片和副本分片不在同一个节点上。
- 每个分片就是个Lucene索引用来保存数据,且本身就是一个搜索引擎
- 一个Lucene索引包含多个分段,每个分段本身就是一个倒排索引
- 对于每一个搜索请求,索引中的每个分段都会被搜索,每个分段都需要消耗cpu,文件句柄和内存。所以分段数量越多,搜索的性能越低。lucene会在后台将小的分段合并成大的分段,将合并后的分段写入磁盘,删除旧的小分段。
- ES包含三种常见的节点类型: master,data和client。master节点主要负责协调集群任务,比如在节点间分配分片,添加和删除索引。data节点负责通过分片保存数据,创建索引,数据搜索,聚合等操作。client节点主要作为负载均衡的角色,帮助做创建索引和搜索请求的路由。

Elasticsearch搜索过程

分为两个阶段:
- 查询阶段:搜索请求首先到达协调节点,并将查询转发到索引中每个分片的副本(主副本或副本副本)。 每个分片将在本地执行查询,并将最相关的结果的文档ID(默认为10)传递回协调节点,协调节点将依次合并并排序以找到最相关的全局结果的文档ID。
- 提取阶段:在协调节点对所有结果进行排序以生成文档的全局排序列表之后,它随后从所有分片中请求原始文档。 所有分片将会获取所有需要获取的字段,然后将其返回到协调节点。 最后,最终的搜索结果被发送回客户端。

Index Refresh

提交文档索引请求后,它将添加到Translog并写入内存缓冲区。 下一次刷新索引时(默认情况下每秒进行一次),刷新过程将根据内存缓冲区的内容创建一个新的内存段,以便现在可以搜索文档。 然后它将清空内存缓冲区。 随着时间的流逝,会创建一堆分段。 随后,分段会在后台随时间合并在一起,以确保有效利用资源(每个段都使用文件句柄,内存和CPU)。 索引刷新是一项昂贵的操作,这就是为什么要定期进行刷新(默认设置),而不是在每次索引操作之后进行刷新。 如果您打算索引很多文档,而又不需要立即获取新信息以进行搜索,则可以通过减少刷新频率直到索引完成,或者甚至通过禁用索引来优化索引性能而不是搜索性能。如下图所示

Index Flush

在上面的索引刷新过程中创建的内存中段不持久且不安全。 如果由于任何原因该节点关闭,它们将消失。 由于存在Translog,因此仍可以通过重播来恢复更改。 该日志每5秒或在每次成功索引,删除,更新或批量请求(以先到者为准)后,都会提交到磁盘。 但是,Translog有其自身的大小限制。 因此,每隔30分钟,或者每当事务日志达到最大大小(默认情况下为512MB)时,就会触发刷新。 在刷新期间,将刷新内存缓冲区中的所有文档(存储在新段中),所有内存段都将提交到磁盘,并清除Translog。

删除/更新数据

如果是删除操作,commit 的时候会生成一个 .del 文件,里面将某个 doc 标识为 deleted 状态,那么搜索的时候根据 .del 文件就知道这个 doc 是否被删除了。
如果是更新操作,就是将原来的 doc 标识为 deleted 状态,然后新写入一条数据。

Elasticsearch分布式架构的更多相关文章

  1. 【分布式搜索引擎】Elasticsearch分布式架构原理

    一.相关概念介绍 1)集群(cluster) 一个集群(cluster)由一个或多个节点组成. 这些节点具有相同的cluster.name,它们协同工作,分享数据和负载.当加入新的节点或者删除一个节点 ...

  2. Elasticsearch基础分布式架构

    写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 参考内容: <Ela ...

  3. Elasticsearch系列---分布式架构机制讲解

    概要 本篇主要介绍Elasticsearch的数据索引时的分片机制,集群发现机制,primary shard与replica shard是如何分工合作的,如何对集群扩容,以及集群的容错机制. 分片机制 ...

  4. Elasticsearch由浅入深(二)ES基础分布式架构、横向扩容、容错机制

    Elasticsearch的基础分布式架构 Elasticsearch对复杂分布式机制的透明隐藏特性 Elasticsearch是一套分布式系统,分布式是为了应对大数据量. Elasticsearch ...

  5. 分布式搜索引擎Elasticsearch的架构分析

    一.写在前面 ES(Elasticsearch下文统一称为ES)越来越多的企业在业务场景是使用ES存储自己的非结构化数据,例如电商业务实现商品站内搜索,数据指标分析,日志分析等,ES作为传统关系型数据 ...

  6. Elasticsearch学习笔记(四)ElasticSearch分布式机制

    一.Elasticsearch对复杂分布式机制透明的隐藏特性 1.分片机制: (1)index包含多个shard,每个shard都是一个最小工作单元,承载部分数据,lucene实例,完整的建立索引和处 ...

  7. Elasticsearch分布式机制和document分析

    1. Elasticsearch对复杂分布式机制的透明隐藏特性 1.1)分片机制 1.2)集群发现机制 1.3)shard负载均衡 1.4)shard副本,请求路由,集群扩容,shard重分配 2.  ...

  8. 搭建ELK日志分析平台(上)—— ELK介绍及搭建 Elasticsearch 分布式集群

    笔记内容:搭建ELK日志分析平台(上)-- ELK介绍及搭建 Elasticsearch 分布式集群笔记日期:2018-03-02 27.1 ELK介绍 27.2 ELK安装准备工作 27.3 安装e ...

  9. Zookeeper在分布式架构中的应用

    Zookeeper 是一个高性能.高可靠的分布式协调系统,是 Google Chubby 的一个开源实现.Zookeeper 能够为分布式应用提供一致性服务,提供的功能包括:配置维护.域名服务.分布式 ...

随机推荐

  1. virtualenv 指定 python 解释器的版本

    使用如下命令为 ubuntu 系统安装 virtualenv sudo apt-get install python-virtualenv 当我们使用 virtualenv 命令创建虚拟环境时,默认使 ...

  2. MingGW Posix VS Win32 - 明瓜娃的毒因

    MinGW-posix和win32纠缠的瓜娃子 官方首席佛偈(SourceForge)的官网下载页 法克油啊,让我一个小白情何以堪. 盘TA wiki posix wiki中文-UNIX API标准 ...

  3. Mac安装Mysql-python遇到的坑,被这俩报错反复摩擦:'my_config.h' file not found 和 IndexError: string index out of range

    最后Stackoverflow上面的大神解决了问题: Link brew install mysql brew unlink mysql brew install mysql-connector-c ...

  4. 入侵检测基本准则(Basic principles of intrusion detection)【v1.0】

    所谓“入侵检测”,顾名思义,就是对入侵行为的发觉.他通过对计算机网络或计算机系统中若干关键点收集信息并对其进行分析,从中发现网络或系统中是否有违反安全策略的行为和被攻击的迹象.” 但实际上,所谓的“违 ...

  5. ## springboot 下策略模式的简单使用

    1.灵魂三问 接手前人(已跑路)项目快乐否? 前人项目不写注释懵逼否? 一个方法中一堆if/else,且业务判断条件用简单数字(或英文字母),不带注释,想打人否?     所以,对于上述三个问题,我写 ...

  6. space transport protocols

    VSAT系统对TCP的改进 https://www.vsat-systems.com/broadband-satellite-internet/index.html TCP/IP over satel ...

  7. drf序列化高级、自定义只读只写、序列化覆盖字段、二次封装Response、数据库查询优化(断关联)、十大接口、视图家族

    目录 自定义只读 自定义只写 序列化覆盖字段 二次封装Response 数据库关系分析 断外键关联关系 ORM操作外键关系 ORM四种关联关系 基表 系列化类其他配置(了解) 十大接口 BaseSer ...

  8. SpringBoot基础篇-SpringBoot快速入门

    SpringBoot基础 学习目标: 能够理解Spring的优缺点 能够理解SpringBoot的特点 能够理解SpringBoot的核心功能 能够搭建SpringBoot的环境 能够完成applic ...

  9. Day3前端学习之路——CSS基本知识

    课程目标 初步了解什么是CSS,掌握基本的CSS概念,语法,针对选择器特殊性的计算处理,以及学习如何设置一些简单的样式 任务一:回答问题 1.什么是CSS,CSS是如何工作的? CSS 指层叠样式表 ...

  10. Load_file 常用路径

    load_file 常用路径 WINDOWS下: c:/boot.ini //查看系统版本 c:/windows/php.ini //php配置信息 c:/windows/my.ini //MYSQL ...