目录
1、Elasticsearch整体架构图
首先,建议大家在了解架构之前,下载源码看一看工程结构,能更好的有助于理解整体架构图。
1.1 源码地址
github: https://github.com/elastic/elasticsearch
gitee: https://gitee.com/mirrors/elasticsearch
1.2 架构分层
我们先从应用层、协议层、发现/脚本层、数据处理层、核心架构层以及数据存储层这6层来梳理ES整体架构。分层如下:
如果有一些朋友对其中涉及的名词不清楚,可以先看这篇文章:Elasticsearch的相关名称解释 。
2、各层级模块解释
2.1 应用层
2.1.1 RestFul API
在ElasticSearch中,提供了功能丰富的RestFul API操作,包括CURD操作和创建索引,删除索引等。样例格式如下:
2.1.2 Java API
2.2 协议层
2.2.1 Thrift
2.2.2 Memcached
2.2.3 Http
2.2.4 TCP
ElasticSearch由Transport负责通信,而Transport是基于TCP通信采用Netty实现。基于Netty的通信编码中需要为客户端创建Bootstrap、服务端创建ServerBootstrap。
// Netty4Transport.jaav
@Override
protected void doStart() {
boolean success = false;
try {
sharedGroup = sharedGroupFactory.getTransportGroup();
clientBootstrap = createClientBootstrap(sharedGroup); //Bootstrap
if (NetworkService.NETWORK_SERVER.get(settings)) {
for (ProfileSettings profileSettings : profileSettingsSet) {
createServerBootstrap(profileSettings, sharedGroup);
bindServer(profileSettings); //ServerBootstrap
}
}
success = true;
} finally {
if (success == false) {
doStop();
}
}
}
2.2.5 JMX
2.3 发现/脚本层
2.3.1 Discovery
ZenDiscovery属于ES的特殊发现机制,也是ES的内置发现机制,它提供了两种发现方式:单播和多播。主要作用是发现集群中的节点以及选举Master节点。
2.3.2 Scripting
2.4 数据处理层
2.4.1 Index Module
索引模块是按索引创建的模块,控制index相关的所有方面。
2.4.2 Search Module
查询模块主要用于搜索并返回查询结果。常见的查询语句如下: