博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ElasticSearch源代码解析之Client端
阅读量:5767 次
发布时间:2019-06-18

本文共 1096 字,大约阅读时间需要 3 分钟。

如前面在架构思路中的反向思考一样,先通过Client端来看ElasticSearch的设计。

再啰嗦一句:我认为从Client或者说从API用户角度出发来看一个系统最合适的入手点,API的设计是一个非常困难的东西,要平衡易用性,一致性(非数据意义上的一致性),完整性。

简单的代码结构理一下,直接在_client_rest-high-level项目里找到org.elasticsearch.client.RestHighLevelClient这个类,它也是ElasticSearch以后主推的Client,其它的Client,如org.elasticsearch.client.transport.TransportClient会在后续版本7中不建议使用,并在版本8中移除。

org.elasticsearch.client.IndicesClient基于RestHighLevelClient提供了更简单的功能封装,主要包括delete,createIndex等操作,细分析这些方法,发现关键在于Request这个参数,用来清楚地定义Client期望Server所完成的工作,其中有意思的是一些Request继承自org.elasticsearch.action.support.master.MasterNodeRequest,这也说明请求至少可以分为两大类,一类是明确需要MasterNode来完成的,比如delete和create这种操作,还有一类应该是不需要MasterNode来完成的。

这也验证了我前面的分析,就是由MasterNode来负责主要完成数据一致性问题的管理,而由DataNode进行查询等请求。

Request/Response应该是ElasticSearch中不算复杂,但内容特别庞杂的东西,它需要覆盖基本上所有的业务以及管理功能。
顺便吐槽一下,ElasticSearch中的Action,Request,Response太多了,而且很多名字类似,看得极其郁闷。

从client端的定义来看,基本就是通过一个Action来定义行为,Request和Response分别作为Client对Server的输入和输出。这种其实是非常典型的Command设计,即Server端核心轻量化,通过插件化的方式支持扩展,Command对应的扩展会注册很多Handler,然后每个Handler会负责处理相应的Command。非常简单有效的设计,唯一值得吐槽的就是ElasticSearch把Server项目搞得太大,找起来太复杂。

下面带着这个思路再去看Server端代码。

转载地址:http://dtbux.baihongyu.com/

你可能感兴趣的文章
C# 如何避免异常”集合已修改;可能无法执行枚举操作。“
查看>>
A Knight's Journey (DFS)
查看>>
Notepad++ xml/json格式化
查看>>
检查SSD磁盘是否开启了TRIM指令
查看>>
详解KMP算法 另一种思路
查看>>
hdu 2059 DP
查看>>
jquery如何判断checkbox(复选框)是否被选中 全选 反选
查看>>
oracle toda和pl/sql匪夷所思的差异
查看>>
在fedora14中合并pdf文件
查看>>
伙伴系统-Buddy System
查看>>
c#基础知识 属性和索引
查看>>
12.6作业
查看>>
CodeChef Mahesh and his lost array
查看>>
集合 (set)
查看>>
iOS开发-UIWebView加载本地和网络数据
查看>>
hdu 1042 N!
查看>>
Spring的@Value获取不到值的问题
查看>>
匿名函数
查看>>
JS基础学习笔记一 -- 从Hello Word输出开始
查看>>
修改Ubuntu的aptget源为阿里源的方法
查看>>