前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch源码分析五之模块简介

Elasticsearch源码分析五之模块简介

作者头像
山行AI
发布2020-03-11 13:24:01
1.1K0
发布2020-03-11 13:24:01
举报
文章被收录于专栏:山行AI山行AI

Elasticsearch中的模块

Cluster模块

Cluster模块是主节点执行集群管理的封装实现,管理集群状态,维护集群层面的配置信息。主要功能如下:

管理集群状态,将新生成的集群状态发布到集群所有节点。

调用allocation模块执行分片分配,决策哪些分片应该分配到哪个节点

在集群各节点中直接迁移分片,保持数据平衡。

具体代码位于org.elasticsearch.cluster.ClusterModule中,由Node的构造方法中初始化,在Node的start方法中启动。

allocation

封装了分片分配相关的功能和策略,包括主分片的分配和副分片的分配,本模块由主节点调用。创建新索引、集群完全重启都需要分片分 配的过程。

Discovery

org.elasticsearch.discovery.DiscoveryModule,发现模块负责发现集群中的节点,以及选举主节点。当节点加入或退出集群时,主节点会采取相应的行动。从某种角度来说,发现模块起到类似ZooKeeper的作用,选主并管理集群拓扑。

gateway

org.elasticsearch.gateway.GatewayModule,负责对收到Master广播下来的集群状态(cluster state)数据的持久化存储,并在集群完全重启时恢复它们。

IndicesModule

org.elasticsearch.indices.IndicesModule,索引模块管理全局级的索引设置,不包括索引级的(索引设置分为全局级和每个索引级)。它还封装了索引数据恢复功能。集群启动阶段需要的主分片恢复和副分片恢复就是在这个模块实现的。

Rest模块

org.elasticsearch.action.ActionModule,Rest模块允许通过JSON over HTTP的方式访问ES的API,RestP模块本质上是完全异步的,这意味着没有阻塞线程等待响应。使用异步通信进行 HTTP 的好处是解决了 C10k 问题(10k量级的并发连接)。

在部分场景下,可考虑使用HTTP keepalive以提升性能。注意:不要在客户端使用HTTP chunking。

NetworkModule

org.elasticsearch.common.network.NetworkModule,传输模块用于集群内节点之间的内部通信。从一个节点到另一个节点的每个请求都使用传输模块。

如同Rest模块,传输模块本质上也是完全异步的。

传输模块使用 TCP 通信,每个节点都与其他节点维持若干 TCP 长连接。内部节点间的所有通信都是本模块承载的。

Engine

Engine模块封装了对Lucene的操作及translog的调用,它是对一个分片读写操作的最终提供者。

ES使用Guice框架进行模块化管理。Guice是Google开发的轻量级依赖注入框架(IoC)。

软件设计中经常说要依赖于抽象而不是具象,IoC 就是这种理念的 实现方式,并且在内部实现了对象的创建和管理。 IOC容器初始化过程位于Node节点的初始化中,代码为:

```

modules.add(b -> { b.bind(Node.class).toInstance(this); b.bind(NodeService.class).toInstance(nodeService); b.bind(NamedXContentRegistry.class).toInstance(xContentRegistry); b.bind(PluginsService.class).toInstance(pluginsService); b.bind(Client.class).toInstance(client); b.bind(NodeClient.class).toInstance(client); b.bind(Environment.class).toInstance(this.environment); b.bind(ThreadPool.class).toInstance(threadPool); b.bind(NodeEnvironment.class).toInstance(nodeEnvironment);

```

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开发架构二三事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档