ElasticSearch 介绍

2018-05-23 17:19:31 浏览数 (1)

整体介绍

ElasticSearch,官网上对它的定义为:

Elasticsearch is a distributed, RESTful search and analytics engine capable of solving a growing number of use cases.

说它是一个分布式的,具有Restful编程风格的,可解决不断出现的用例的一个分析搜索引擎。搜索这点大家认识都很深刻,它的分析能力,其实也很强。目前我们这边做过命中量为1.2亿的聚合(简单的聚合统计)运算,时间只需要5s左右。很给力!

它具有以下四个特征:

  • 速度特别快 200亿的数据量,一个查询命中量有210w,只取1w,仅需93ms。
  • 可扩展性很好 理论上任何机器都可以,大到高性能服务器,小到普通台式电脑。还是建议统一的配置较好,如果集群中既有ssd,又有普通硬盘,普通硬盘的查询和导入会拉慢整体的性能。
  • 弹性很好 如果你的索引都是多备份,即使挂了台节点,系统依然可以正常运行。
  • 灵活性很好 支持结构化和非结构化的数据。All data types are welcome.

概念介绍

1、准实时(Near Realtime)

默认情况下,插入的数据1s后可查询,所示称其为准实时系统。

2、集群(Cluster)

由一个或多个节点组成,能保存数据,且所有节点提供索引和搜索功能。

3、节点(Node)

集群的单个server,可存储数据,并提供集群的索引和搜索功能。

  • Master 节点:管理集群,向其他节点同步集群状态。
  • Data 节点:存储数据的节点。
  • Client节点:为外部提供检索的节点。

ES集群架构

4、索引(Index)

所有具有相似特征的文档集合。类似于数据库的database。

5、类型(Type)

Type主要用来逻辑上分割索引。类似于数据库中的table。数据库中的table是物理分割的,但ES的type是逻辑分割的,不同type的相同field还是会放在一起。因此,ES6.0中已取消多type。

6、文档(Document)

可被索引的最小单位。类似于数据库中的一条记录。

7、分片(shard)

索引的大小可能超出单个节点的限制,将索引分为多块存储,每块即为一个分片。

8、副本( replicas )

分片的备份数。默认情况下每个索引有一个备份。

9、集群状态
  • Red:某些分片的主副分片都丢失,影响数据完整性。
  • Yellow:某些副本分片丢失,不影响数据的完整性。
  • Green:健康状态,没有分片丢失。

ES集群状态改变

模块介绍

网上找的相关内容感觉都不全,我按照源码的结构整理了一下,大致分为以下几个模块:

1、ScriptModule

加载用户自定义的脚本插件,提供脚本服务(ScriptService)。

脚本服务包括:

  • 加载脚本的配置信息,比如说缓存大小,脚本大小等等
  • 编译脚本
  • 生成脚本模板
  • 监听集群脚本变化信息。若有变化,跟随变化更改。
  • 脚本转化。将一个普通脚本通过添加参数转化为一个可执行的脚本。
2、AnalysisModule

分词相关的模块。

  • 加载词典
  • 加载插件和常用的charFilters
  • 加载插件和常用的tokenFilters
  • 加载插件和常用的tokenizers
  • 加载插件和常用的analyzers
3、SettingsModule

加载对应的系统配置。

  • 加载Index Setting
  • 加载Cluter Setting
  • 加载Node Setting
4、ClusterModule
  • 将请求中的正则表达式索引名字转化为集群中具体的索引名字
  • 创建shard分配器(ShardsAllocator)分配shard
  • 提供集群服务(clusterService) 集群服务(ClusterService)
    • 监听集群状态改变,并添加listener ClusterChangedEvent, Discovery.AckListener
    • 结合DiscoveryNodes和NodeConnectionsService做一系列的监听(集群状态同步监听、集群状态确认监听,节点离开加入等)
    • 通过ClusterServiceTaskBatcher执行集群任务
    • 通过OperationRouting找到对应shard
5、IndicesModule

配置每个节点上索引共享的类和服务。

  • 加载插件和内嵌的所有mapper类型,比如说Text,Keyword,Number等等
  • 加载插件和内嵌的所有metamapper类型,比如说Version,TTL,Source等等
6、SearchModule

加载插件和内嵌的查询组件,包括(打分、聚合、排序等等)

7、ActionModule
  • 注册RestHandler,也就是将Rest*Action接收的查询格式传入RestController中
  • 绑定RestAction和TransportAction的对应关系
8、GatewayModule

Gateway模块用于存储es集群的元数据信息。这部分信息主要包括所有的索引连同索引设置和显式的Mapping信息。集群元数据的每一次改变(比如增加删除索引等),这些信息都要通过Gateway模块进行持久化。当集群第一次启动的时候,这些信息就会从Gateway模块中读出并应用。

  • Recovery After Nodes/Time
  • Local Gateway从每个节点的本地存储中恢复集群状态和索引,不需要节点之间的共享存储
9、NetworkModule

注册和绑定所有网络相关的类。

  • 初始化常用的http、transport配置信息。
  • 注册内嵌的所有AllocationCommand。
  • 提供Transport和HttpTransport的注册方法。
10、RepositoriesModule

Repositories模块主要是做索引的快照和恢复。Snapshot/Restore

11、DiscoveryModule

Discovery模块主要用来做节点发现。

后续

后面的ES文章主要会在ClusterModule和SearchModule上面下功夫,ScriptModule、AnalysisModuleGatewayModule和RepositoriesModule模块也会聊一聊,其他的模块会在介绍前面的模块时顺带点一下,不会花大片的篇幅讲解。

es2

0 人点赞