【ES源码探索-0003】- Distributed Area Internals 文档翻译

译文 - 分布式架构指南

分布式区域内部

分布式区域包含索引和协调系统。

索引路径从用户REST命令通过分片路由延伸到每个独立分片 translog 和 存储引擎. 重建索引实际上是从源索引读取并写入到目标索引(可能在不同的节点上). 协调方面包含集群协调,分片分配,集群弹性伸缩统计,任务管理和跨集群复制,明显协调系统包含网络,服务发现插件系统,快照/恢复逻辑和分片恢复。

一份通用的Elasticsearch组件指南可以查阅这里

网络

线程池

(我们有很多线程池,是什么以及为什么)

动作监听器

查阅Java文档ActionListener

(待办事项:为一系列 Listener 类添加有用的入门参考和解释。参考 Netty 部分。)

REST 层

REST和传输层通过ActionModule绑定在一起.在 ActionModule#initRestHandlers 使用 RestController 注册所有 REST 操作,并将传入请求与特定 REST 操作进行匹配.RestController#registerHandler 使用 Rest*Action#routes() 实现将 HTTP 请求与特定的 Rest*Action 进行匹配。通常,REST操作遵循类命名约定Rest*Action,这使得它们更容易被找到,但并不总是可以找到。#routes()的定义也有助于查找 REST 操作。RestController#dispatchRequest 最终会在RestHandler的实现上调用#handleRequest.RestHandlerBaseRestHandler的基类,大多数 Rest*Action 实例都对BaseRestHandler其进行了扩展以实现特定的 REST 操作。

BaseRestHandler#handleRequest 调用 BaseRestHandler#prepareRequest, 其Rest*Action继承的子类实现特定的操作。 RestController#dispatchRequest 通过 RestHandler#handleRequestRestChannel 传递给 Rest*ActionRest*Action#prepareRequest 实现返回一个 RestChannelConsumer,定义如何在通道上执行操作和回复(通常以完成 ActionListener 包装器的形式)。Rest*Action#prepareRequest 实现负责解析传入的请求,并验证请求的结构是否有效。BaseRestHandler#handleRequest 随后将检查所有请求参数是否已被使用:意外的请求参数会导致错误。

REST操作是如何与Transport操作连接

Rest层使用AbstractClient的实现.BaseRestHandler#prepareRequest 使用 NodeClient 客户端:此客户端知道如何连接到指定的 TransportAction。


【ES源码探索-0003】- Distributed Area Internals 文档翻译
https://www.lewismind.site/2024/09/25/0003-es/
作者
lewis
发布于
2024年9月25日
许可协议