最近要搭建(包装)一个搜索的数据平台,主要技术栈是Java+spring全家,ES 5/6以及ELK全家桶等等。目前想到两个方案:
一、通过Java high level/low level client直连,长期维护连接池以应对峰谷调用,同时维护包括自定义的消息中间件consumer,beats/logstash等等
优点:
1、开发上线比较方便(有现成系统和模块可以直接移植)
2、比较容易开发/包装一些可控的接口提供服务,可以享受Java client里面各种“语法糖”
缺点:
1、兼容性问题,ES5的jar包引入之后要再兼容ES6的就会很麻烦,同时不同版本的client又不兼容彼此的ES集群
2、“语法糖”的局限性,client会包装一些包括查询、聚合…的接口,但是与此同时会牺牲掉很多自由发挥的可能,远不如手写DSL便利
二、维护一个操作转发平台,通过http的方式和各ES集群进行交互
优点:
1、灵活性较高,可以添加、调用很多“骚操作”
2、兼容性好,几乎不受ES集群版本限制
3、可以实现更多贴近业务的定制化功能,类似eBay的按时间、doc数…等各维度拆分索引的平台,假设在集群之上的流处理、检索预处理、结果重包装等功能
缺点:
1、学习成本较高,在“素人”使用的时候需要学习ES的查询、操作语法(毕竟sql插件和ES6的sql功能…emmmm…),更多的复杂操作还是需要手写DSL命令
2、系统延迟性高,毕竟不如直接client通过ws(貌似?)直连的效率高,还需要自己维护监控功能组件
各位大兄dei有没啥想法一起讨论下?
一、通过Java high level/low level client直连,长期维护连接池以应对峰谷调用,同时维护包括自定义的消息中间件consumer,beats/logstash等等
优点:
1、开发上线比较方便(有现成系统和模块可以直接移植)
2、比较容易开发/包装一些可控的接口提供服务,可以享受Java client里面各种“语法糖”
缺点:
1、兼容性问题,ES5的jar包引入之后要再兼容ES6的就会很麻烦,同时不同版本的client又不兼容彼此的ES集群
2、“语法糖”的局限性,client会包装一些包括查询、聚合…的接口,但是与此同时会牺牲掉很多自由发挥的可能,远不如手写DSL便利
二、维护一个操作转发平台,通过http的方式和各ES集群进行交互
优点:
1、灵活性较高,可以添加、调用很多“骚操作”
2、兼容性好,几乎不受ES集群版本限制
3、可以实现更多贴近业务的定制化功能,类似eBay的按时间、doc数…等各维度拆分索引的平台,假设在集群之上的流处理、检索预处理、结果重包装等功能
缺点:
1、学习成本较高,在“素人”使用的时候需要学习ES的查询、操作语法(毕竟sql插件和ES6的sql功能…emmmm…),更多的复杂操作还是需要手写DSL命令
2、系统延迟性高,毕竟不如直接client通过ws(貌似?)直连的效率高,还需要自己维护监控功能组件
各位大兄dei有没啥想法一起讨论下?
5 个回复
hufuman
赞同来自: rochy
一部分是创建索引部分,自定义了一套xml规范,根据这个规范,可以很简单的从数据库读取数据在ES创建索引,只需要提供mapping,索引名,和sql即可
一部分是搜索部分,只对常用的功能做了抽象和封装,因为大部分场景都只是term,match等简单场景,和脚本等排序
一部分是个小网站,可以提供索引信息的简单查看,sql方式查询es数据,cat的数据,reindex等索引维护功能,同时屏蔽了用户对生产ES的访问权限
目前部门已经有好几个组接入了这套东西,使用简单出错低上手快,有的组已经使用了一段时间了,但是ES的语法都不太了解,甚至有人ES到底是什么都不知道
medcl - 今晚打老虎。
赞同来自:
rochy - rochy_he
赞同来自:
默认情况下,对于 ES5.X 和 ES6.X 的兼容还是可以的,实在不放心可以自己测试几个应用场景。
famoss
赞同来自:
通过rest客户端无缝兼容各种es版本,可以方便做一些权限验证等骚操作。 个人感觉 优势大于劣势。
laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net
赞同来自: