ElasticSearch 架构和原理

文章目录

    • 部署架构
    • 存储架构
    • 写入过程
      • 请求链路
      • 创建文档
        • segment文件
      • 删除文档
      • 更新文档
    • 读取过程
      • 查询文档
      • 搜索文档
    • 参考

部署架构

  • ElasticSearch 架构和原理_第1张图片
  • master节点
    • 管理元数据,负责索引创建、删除、数据rebalance等。
    • 通常奇数个master节点。
  • 数据节点
    • 存储数据和倒排索引,负载数据的索引和检索,负载较高。
  • 协调节点
    • 处理客户端请求,转发至相关的数据节点,并聚合结果返回客户端。

存储架构

  • ElasticSearch 架构和原理_第2张图片
  • 索引。index。
    • 文档的集合,由多个分片组成。
  • 分片。shard。
    • 一个索引的数据保存在多个分片中。
    • 索引的分片数在创建索引的时候确定,无法更改,数据节点扩容时分片再平衡。
    • 一个主分片可以有n个副本分片,不在同一个数据节点,冗余备份、分担读请求。
  • 分段。segment。
    • 实际存储文档的文件,一个分片多个分段。
  • 文档。docoment。
    • 索引和搜索的原子单位。包含多个域。
  • 域。field。
  • 最小搜索单元。term。
  • 倒排索引。
    • 列举所有文档中出现的terms以及它们出现的文档ID和出现频率。
    • 搜索时同样会对关键词进行同样的分词分析,然后查表得到结果。

写入过程

  • 分片路由规则:默认文档ID hash,也可以指定字段。

请求链路

  • 协调节点转发至主分片数据节点。
  • 主分片写入。
  • 并行复制到副本分片数据节点。

创建文档

  • 文档写入内存buffer+内存translog文件
    ElasticSearch 架构和原理_第3张图片
  • 默认1s一次refresh内存buffer,写入文件系统缓存,构成新的segment,此时文档可以搜索到
    ElasticSearch 架构和原理_第4张图片
  • 默认5s一次,刷translog文件到磁盘。写到磁盘之前可能写入丢失。
    • 为了不丢数据,可配置为每次写translog之后刷到磁盘,但是会降低吞吐。
  • 默认30min一次,fsync文件系统缓存的segment到磁盘,清除translog。
    ElasticSearch 架构和原理_第5张图片

segment文件

  • 每1s一个segment文件,数量较多。
  • 单独的归并线程merge segment,默认最大segement 5G。

删除文档

追加式存储无法直接删除。

  • 一个segment维护一个del文件,删除文档时在del文件里标记
  • 返回查询结果时过滤。
  • segment merge时标记删除的文档才被删除。

更新文档

  • 查找原文档得到原文档版本号。
  • 修改后的文档,用原版本号+1走创建新文档流程。
  • del文件里标记删除旧版本文档

读取过程

查询文档

  • 协调节点根据文档ID路由至数据节点(分片可能主分片也可能副本分片)。
  • 数据节点返回协调节点文档。
  • 协调节点返回客户端结果。

搜索文档

  • 协调节点广播查询条件至相关的数据节点(分片可能主分片也可能副本分片)。
  • 数据节点返回给协调节点结果集文档ID(轻量)。
  • 协调节点汇总结果文档ID。
  • 协调节点根据文档ID查询文档,返回客户端结果

参考

  • ElasticSearch底层原理浅析
  • Elasticsearch架构原理

你可能感兴趣的:(数据库)