Elasticsearch系列---Elasticsearch的基本概念及工做原理

基本概念

Elasticsearch有几个核心的概念,花几分钟时间了解一下,有助于后面章节的学习。node

NRT

Near Realtime,近实时,有两个层面的含义,一是从写入一条数据到这条数据能够被搜索,有一段很是小的延迟(大约1秒左右),二是基于Elasticsearch的搜索和分析操做,耗时能够达到秒级。数据库

Cluster

集群,对外提供索引和搜索的服务,包含一个或多个节点,每一个节点属于哪一个集群是经过集群名称来决定的(默认名称是elasticsearch),集群名称搞错了后果很严重。命名建议是研发、测试环境、准生产、生产环境用不一样的名称增长区分度,例如研发使用es-dev,测试使用es-test,准生产使用es-stg,生产环境使用es-pro这样的名字来区分。若是是中小型应用,集群能够只有一个节点。服务器

Elasticsearch集群结构

Node

单独一个Elasticsearch服务器实例称为一个node,node是集群的一部分,每一个node有独立的名称,默认是启动时获取一个UUID做为名称,也能够自行配置,node名称特别重要,Elasticsearch集群是经过node名称进行管理和通讯的,一个node只能加入一个Elasticsearch集群当中,集群提供完整的数据存储,索引和搜索的功能,它下面的每一个node分摊上述功能(每条数据都会索引到node上)。markdown

shard

分片,是单个Lucene索引,因为单台机器的存储容量是有限的(如1TB),而Elasticsearch索引的数据可能特别大(PB级别,而且30GB/天的写入量),单台机器没法存储所有数据,就须要将索引中的数据切分为多个shard,分布在多台服务器上存储。利用shard能够很好地进行横向扩展,存储更多数据,让搜索和分析等操做分布到多台服务器上去执行,提高集群总体的吞吐量和性能。shard在使用时比较简单,只须要在建立索引时指定shard的数量便可,剩下的都交给Elasticsearch来完成,只是建立索引时一旦指定shard数量,后期就不能再更改了。数据结构

replica

索引副本,彻底拷贝shard的内容,shard与replica的关系能够是一对多,同一个shard能够有一个或多个replica,而且同一个shard下的replica数据彻底同样,replica做为shard的数据拷贝,承担如下三个任务:架构

  1. shard故障或宕机时,其中一个replica能够升级成shard。
  2. replica保证数据不丢失(冗余机制),保证高可用。
  3. replica能够分担搜索请求,提高整个集群的吞吐量和性能。

shard的全称叫primary shard,replica全称叫replica shard,primary shard数量在建立索引时指定,后期不能修改,replica shard后期能够修改。默认每一个索引的primary shard值为5,replica shard值为1,含义是5个primary shard,5个replica shard,共10个shard。所以Elasticsearch最小的高可用配置是2台服务器。并发

Index

索引,具备相同结构的文档集合,相似于关系型数据库的数据库实例(6.0.0版本type废弃后,索引的概念降低到等同于数据库表的级别)。一个集群里能够定义多个索引,如客户信息索引、商品分类索引、商品索引、订单索引、评论索引等等,分别定义本身的数据结构。索引命名要求所有使用小写,创建索引、搜索、更新、删除操做都须要用到索引名称。elasticsearch

type

类型,本来是在索引(Index)内进行的逻辑细分,但后来发现企业研发为了加强可阅读性和可维护性,制订的规范约束,同一个索引下不多还会再使用type进行逻辑拆分(如同一个索引下既有订单数据,又有评论数据),于是在6.0.0版本以后,此定义废弃。分布式

Document

文档,Elasticsearch最小的数据存储单元,JSON数据格式,相似于关系型数据库的表记录(一行数据),结构定义多样化,同一个索引下的document,结构尽量相同。高并发

工做原理

简单地了解一下Elasticsearch的工做原理。

启动过程

当Elasticsearch的node启动时,默认使用广播寻找集群中的其余node,并与之创建链接,若是集群已经存在,其中一个节点角色特殊一些,叫coordinate node(协调者,也叫master节点),负责管理集群node的状态,有新的node加入时,会更新集群拓扑信息。若是当前集群不存在,那么启动的node就本身成为coordinate node。node加入集群过程

应用程序与集群通讯过程

虽然Elasticsearch设置了Coordinate Node用来管理集群,但这种设置对客户端(应用程序)来讲是透明的,客户端能够请求任何一个它已知的node,若是该node是集群当前的Coordinate,那么它会将请求转发到相应的Node上进行处理,若是该node不是Coordinate,那么该node会先将请求转交给Coordinate Node,再由Coordinate进行转发,搓着各node返回的数据所有交由Coordinate Node进行汇总,最后返回给客户端。应用程序与Elasticsearch集群通讯过程

集群内node有效性检测

正常工做时,Coordinate Node会按期与拓扑结构中的Node进行通讯,检测实例是否正常工做,若是在指定的时间周期内,Node无响应,那么集群会认为该Node已经宕机。集群会从新进行均衡:

  1. 从新分配宕机的Node,其余Node中有该Node的replica shard,选出一个replica shard,升级成为primary shard。
  2. 从新安置新的shard。
  3. 拓扑更新,分发给该Node的请求从新映射到目前正常的Node上。

小结

本篇章简单的向你们介绍了一下Elasticsearch的基本概念和工做原理,让你们有个比较浅显的认识,后续会结合实际的例子,来了解一下Elasticsearch基本的用法。

专一Java高并发、分布式架构,更多技术干货分享与心得,请关注公众号:Java架构社区Java架构社区