【ES源码探索-0003】- Distributed Area Internals 文档翻译
译文 - 分布式架构指南
分布式区域内部
分布式区域包含索引和协调系统。
索引路径从用户REST
命令通过分片路由延伸到每个独立分片 translog
和 存储引擎. 重建索引实际上是从源索引读取并写入到目标索引(可能在不同的节点上). 协调方面包含集群协调,分片分配,集群弹性伸缩统计,任务管理和跨集群复制,明显协调系统包含网络,服务发现插件系统,快照/恢复逻辑和分片恢复。
一份通用的Elasticsearch组件指南可以查阅这里
网络
线程池
(我们有很多线程池,是什么以及为什么)
动作监听器
(待办事项:为一系列 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
.RestHandler
是 BaseRestHandler
的基类,大多数 Rest*Action
实例都对BaseRestHandler
其进行了扩展以实现特定的 REST 操作。
BaseRestHandler#handleRequest
调用 BaseRestHandler#prepareRequest
, 其Rest*Action
继承的子类实现特定的操作。 RestController#dispatchRequest
通过 RestHandler#handleRequest
将 RestChannel
传递给 Rest*Action
:Rest*Action#prepareRequest
实现返回一个 RestChannelConsumer
,定义如何在通道上执行操作和回复(通常以完成 ActionListener 包装器的形式)。Rest*Action#prepareRequest
实现负责解析传入的请求,并验证请求的结构是否有效。BaseRestHandler#handleRequest
随后将检查所有请求参数是否已被使用:意外的请求参数会导致错误。
REST操作是如何与Transport操作连接
Rest层使用AbstractClient
的实现.BaseRestHandler#prepareRequest
使用 NodeClient
客户端:此客户端知道如何连接到指定的 TransportAction。