音频地址:
http://m.ximalaya.com/111156131/sound/89571047主持人:Elastic 技术布道师,曾勇(Medcl)。
嘉宾:
1、吴晓刚(Wood大叔),携程技术保障部系统研发总监, Elasticsearch 国内早期实践者,中文社区活跃用户。 曾在 eBay, Morgan Stanley, PPTV 等国内外公司从事系统软件研发、系统集成与技术支持工作。对于大规模 IT 系统的运维自动化、可视化、性能优化具有浓厚的兴趣。在技术方面一直抱有知其然知其所以然的态度。
2、胡航,携程旅行网高级技术经理,负责相关搜索实现、SOA服务的开发。曾供职于腾讯、盛大等公司,对新技术持有强烈的好奇心,目前关注于 Elasticsearch 的业务实现、JVM 性能优化等。
1、携程Elasticsearch使用历史
1.1 运维组Wood大叔:
2014年,ES0.9版本。
选型对比:MongoDB——数据量级大了以后,出现性能瓶颈。
调研后,选型:ELK(Elasticsearch、Logstash、Kibana)。
实现效果:实时看效果、查询、聚合。
1.2 胡航业务组:
业务场景:酒店价格。
选型依据:ES分布式、可调试性能好。
版本:ES2.3。
时间:2017年中,逐步转向ES,5.3版本。
效果:显著。专注于后端开发,业务交由业务团队自己去做。
2、携程Elasticsearch规模
2.1 运维组Wood大叔:
集群:94个。最小三个节点,最大:360+节点。
节点:700+。
每日增量:1600亿条。
峰值:300W/s。
总数据量:2.5万亿,PB数量级。
面对挑战:
1)实时写入。
2)业务流程相关,几个月-2年的历史数据。
2.2 胡航业务组:
业务场景:3集群,每集群6个节点。
单个索引:最大1000W-2000W。
关注:ES基础框架,帮业务部分实现写入、查询、DSL调优。
查询:3000-4000/s。
携程ES规模量全国数一数二,有很大挑战。
3、携程Elasticsearch淌过的坑
3.1 运维组Wood大叔:
3.1.1 痛点1:内存溢出。
原因:早期版本,对查询限制做的不充分;数据量上了规模,查询、聚合会非常耗内存。
升级版本后,ES做了很多处理,集群层面做了限制。越来越稳定。
3.1.2 痛点2:集群故障无法恢复。
3.1.3 痛点3:translog做不完。
3.1.4 痛点4:集群的平台化管理。
需要:研究底层工作机制,找到规避方法。
经验丰富后,运维效率提升。
3.2胡航业务组:
3.2.1 痛点1:ES基础不熟悉带来的问题;
3.2.2 痛点2:性能问题——最终排查是ES5.X keyword类型的原因。
4、架构
4.1运维组Wood大叔:
1、早期:ELK+redis(中间缓存)
挑战:
1)redis承受能力差。
2)redis单线程。
改善:
1)redis改为kafka(磁盘级别),数据畅通了。
2)Logstash内存消耗大。——改为:logstash forward,推荐官方Beats。
3)数据规模后,需要很多服务器,Logstash非常耗内存。
优化:用golang开发了一个gohangout (https://github.com/childe/gohangout ) ,
内存比java 版的hangout(https://github.com/childe/hangout) 内存大幅降低。
4.2 胡航搜索业务组:
1)单点集群压力瓶颈。
改为:业务数据导入ES,提供定制客户端。
2)搜索平台,接入更多业务需求。
不方便在kibana做定制开发,自己做了简单网站查询数据、监控,满足业务的贴切需求。
5、ES6.3最新特性(抢先看)
5.1 ES6.3 支持Sql接口
Wood大叔:
kibana看DSL,拷贝后修改。新用户不熟悉,会不方便。
BI部分也需要,类似sql的查询。
优点:更简单,发挥更大的作用。
携程BI部门——应用场景:搜索的关键词、 统计热词,目的地等信息。
Kibana满足不了需求,就要写代码。如果有了sql,会非常快的开发。
胡航搜索业务组:
写DSL,还是稍微复杂。借助 NLPChina ElasticsearchSql插件实现。
实际应用发现插件还是有问题,期待ES官方推出Sql查询。
5.2 增加kibana丰富表现力
5.3 更快的索引速度
refresh优化:提升吞吐。
6、ELK Stack最喜欢的特性
丰富的扩展能力,用户不必关心底层的实现。通过服务器增加节点,方便大数据量查询。
胡航:
ES可视化、可调试特性。
举例:
1)出现问题排查DSL是不是合适?Mapping是不是合适?
2)相信ES的社区,不必关心底层,更多的时间做业务(解放双手)。
3)ES中做好数据模型,实现业务需求。
7、ELK Stack最需要完善的
1)集群的保护待更进一步完善
数据丢失后的处理?
节点损毁后的处理?
目的:减轻运维的负担;
2)甄别坏查询,Slow log存在缺陷。
很难判定真正故障是哪个慢查询。
集群发下故障的时候,有API实时分析会更好(比单纯查slow log)。
1)ES坑还很多,比较耗费时间。
2)期待社区对常见问题整理。
3)期待官方总结完善的向导,类似:Cookbook。
初级上手的话可以参考借鉴(大家缺乏经验)
8、初学者的建议
1)初学者必读——《Elasticsearch: 权威指南》(英文、中文)
WOOD大叔至少看了3遍。
2)不断的实践。
3)带着问题,再去找文档,构建知识体系。
4)多参与社区,尝试理解和解决社区问题,不断学习,以提升自己。
互帮互助,共同成长!
5)中文社区的小建议:问题精华版收集——新手通读,学习前人经验。
9、如何看待Elasticsearch在国内的发展?
1)参与和贡献,国内做的不足;
2)中文分词插件等,如:分词质量要求高,专业语义搜索支持(提高搜索相关性等)、情感标注、NLP等。
3)在中文应用场景应用更加丰富。
4)社区问题比较分散,社区需要意见领袖,加强某领域讨论、深入交流等。
5)medcl:ElasticTips成立,大家都去参与,以图片形式分享。
6) 社区还会做更多的事情,大家多分享、互相交流。
10、小结
非常震惊,wood大叔看了3遍《Elasticsearch: 权威指南》,我们没有理由不努力。
共勉,加油!