ElasticSearch 介绍

整体介绍

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模块也会聊一聊,其他的模块会在介绍前面的模块时顺带点一下,不会花大片的篇幅讲解。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码代码的陈同学

Mysql thread 与 OS thread

本文作为 Mysql插入2.6亿条垃圾数据后会发生什么? 、手工重现Mysql插入的”2.6亿”垃圾数据 的续篇,初始目的是想看看kill掉执行中的事务对应的o...

56960
来自专栏陈满iOS

iOS下载报错:App Transport Security has blocked a cleartext HTTP

以上方法虽然解决了HTTP不能正常使用的问题,但是苹果提供的安全保障也被关闭了,对于不支持HTTPS协议的网站,可以考虑白名单:

43540
来自专栏小二的折腾日记

面试总结-链接

https://blog.csdn.net/CCUTwangning/article/details/70153589 天下无难试之Redis面试题刁难大全 h...

8010
来自专栏淡定的博客

php之laravel学习常见错误1(连载中)

下面是我们整理的php的laravel学习的常见的错误以及解决的办法,我还会持续更新,请关注

25030
来自专栏云计算教程系列

如何在Ubuntu 16.04上的三节点集群上部署CockroachDB

CockroachDB是一个开源的分布式SQL数据库,提供一致性、可伸缩性和生存性。

19920
来自专栏散尽浮华

centos6下redis cluster集群部署过程

一般来说,redis主从和mysql主从目的差不多,但redis主从配置很简单,主要在从节点配置文件指定主节点ip和端口,比如:slaveof 192.168....

591100
来自专栏张善友的专栏

Mongo Database 性能优化

SQL Server有工具进行数据库的优化,Mongo Database Profiler.不仅有,而且功能更强大。 MongoDB 自带 Profiler,可...

381100
来自专栏丑胖侠

Zookeeper开源客户端Curator之基本功能讲解

简介 Curator是Netflix公司开源的一套Zookeeper客户端框架。了解过Zookeeper原生API都会清楚其复杂度。Curator帮助我们在其基...

37850
来自专栏云时之间

Python学习系列:使用pyqt5搭建简单图书管理系统(2)

在上一篇文章里我们简单的说了一下图书管理系统的设计思路,这一篇文章我们将设计一下此系统的数据库.

24530
来自专栏机器学习算法与Python学习

一文了解十大 Linux 命令行工具!

作为一名程序员,Linux命令行是每天必用的工具。我整理了一些能够提高日常生产力的小工具。一些工具可以作为系统自带命令的替代品,另一些则提供操作系统没有的功能。...

23710

扫码关注云+社区

领取腾讯云代金券