1.整体架构图

如图所示,我们将Elasticsearch的架构自底向上分为五层,分别是核心层、数据处理层、发现与脚本层、协议层和应用层。

2.应用层

应用层指的是Elasticsearch的API支持模式。Elasticsearch的特色之一就是RESTFul风格的API,这种API接口风格也是当前十分流行的风格之一.

3.协议层

协议层是Elasticsearch中的数据交互协议。目前Elasticsearch支持Thrift、Memcached和HTTP三种协议,默认的是HTTP。

其中JMX指的是在Elasticsearch中对Java的管理框架,用来管理Elasticsearch应用。

4.发现与脚本层

发现与脚本层主要是Discovery(节点发现)模块、Script(脚本)模块和第三方插件模块。 Discovery模块是Elasticsearch自动发现节点的机制,Script模块支持脚本的执行。脚本的应用使得我们能很方便的对查询出来的数据进行加工处理,目前Elasticsearch支持JavaScript、Python等多种语言。第三方插件模块表示Elasticsearch支持安装很多第三方的插件,如elasticsearch-ik分词插件、elasticsearch-sql插件等。

5.自动发现机制

Elasticsearch支持多播模式和单播模式自动两种节点发现机制,不过多播模式已经不被大多数操作系统所支持,加之其安全性不高,所以一般我们会主动关闭多播模式。在Elasticsearch中,发现机制默认被配置为使用单播模式,以防止节点无意中加入集群。

在Elasticsearch内部,通过在集群中配置一个相同的集群名称(即cluster.name),就能将不同的节点连接到同一个集群。这是怎么实现的呢?Elasticsearch内嵌自动发现功能,主要提供了4种可供选择的发现机制。其中一种是默认实现,其他都是通过插件实现的,具体如下所示。

  • Azure discovery插件方式:多播模式。

  • EC2 discovery插件方式:多播模式。

  • Google Compute Engine(GCE)discovery插件方式:多播模式。

  • Zen Discovery,默认实现方式,支持多播模式和单播模式。

Zen Discovery是Elasticsearch内置的默认发现模块。发现模块用于发现集群中的节点及选举主节点(又称master节点)。Zen Discovery提供单播模式和基于文件的发现,并且可以扩展为通过插件支持其他形式的发现机制。

6.数据处理

数据处理层主要是指在Elasticsearch中对数据的加工处理方式,常见的主要有Index (索引)模块、Search(搜索)模块和Mapping(映射)模块。

7.核心层

核心层是指Lucene框架——Elasticsearch是基于Lucene框架实现的。