58同城 Elasticsearch 应用及平台建设实践
优采云 发布时间: 2022-06-19 01:1958同城 Elasticsearch 应用及平台建设实践
导读:Elasticsearch是一个分布式的搜索和分析引擎,可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch基于Lucene开发,现在是使用最广的开源搜索引擎之一。Elasticsearch可以应用于在/离线日志流水、用户标签画像、数据库二级缓存、安全风控行为数据、图数据库索引、监控数据、Wiki文档检索等应用场景。58同城有自己的主搜,而一些内部创新搜索业务和*敏*感*词*的数据实时OLAP ( On-Line Analytical Processing,联机分析处理 ) 则是使用Elasticsearch。
本次分享的主题为58同城Elasticsearch应用及平台建设实践。主要内容包括:
01集群优化治理1. 背景
早期Elasticsearch分布在58内的各个业务部门自主维护,但是随着Elasticsearch自身的功能加强,各业务团队使用Elasticsearch的数量越来越多、使用的业务场景越来越重要,于是由数据库部门对整个公司的Elasticsearch使用进行了收敛管理,在这个过程中数据库部门同学遇到了很多问题和挑战,具体如下:业务使用场景复杂多样;Elasticsearch版本不统一;应用与Elasticsearch数据服务混合部署;缺乏有效监控;服务器硬件型号多样;索引接入无管控,找不到负责人;接入规范不统一,接入沟通成本高;无平台管理,手动excel维护集群信息。
除了上面这些问题,接管Elasticsearch后,还面临着*敏*感*词*能方面的挑战:索引变红 ( 集群健康状态 )、索引写不进去、查询超时、内存OOM、Master不响应等。
在做分享之前,DataFun的小伙伴给反馈了很多问题,这些问题很大一部分是与Elasticsearch集群的规划相关,这有很多和我们之前遇到的问题也是一样的。下面针对两个处理比较多的问题来分享。
2. 典型问题之一:Elasticsearch集群的磁盘被打爆
造成磁盘被打爆有以下几种原因:
这些问题比较基础,其实也反映出早期在使用Elasticsearch时没有很好的规划。针对上面的各种问题,总结了如下几点实践经验:
3. 典型问题之二:Elasticsearch集群写入变慢
Elasticsearch集群写入变慢需要考虑以下几个问题:
针对上面这几个问题我们的实践经验是:
4. 开发规范
针对这些影响业务稳定性的问题,我们内部制定了相应的规范约束:
日志类应用:非日志类应用:
这类多是数据检索类的服务。
5. Elasticsearch服务架构
在整合所有Elasticsearch之后,我们统一了Elasticsearch的服务架构:
该架构有以下几个特点:
02典型应用实践1. ELKB简介
在介绍我们典型的应用实践之前,我们先再介绍ELKB。
ELKB是一套日志管理方案,它是Elasticsearch、Logstash、Kibana、Beats服务的简称。Elasticsearch用于存储数据,并提供搜索和分析;Logstash用于数据收集及转换管道,可扩展的插件;Kibana用于对存储在Elasticsearch中的数据进行可视化展示;Beats用于多类型数据采集器。
ELKB的架构分为三层:数据提取层、数据的存储层、数据展示层。ELKB将数据的提取、存储、展示做成套件,这是它比较优势的地方。
2. 应用实践之一:58实时日志平台早期阶段:
58内部有好多套技术方案实践,该架构是5年前系统运维部同学维护的一套日志收集平台,有两条业务线在使用。这个版本当时比较低,它通过Logstash抓取日志,但是Logstash这块非常消耗资源,经常出现一些稳定性的问题。
现在阶段:
目前我们在公司主流的日志平台主要是这种:
工作流程:
改进阶段:
接着也就演变到了下面这种新的日志平台:
3. 应用实践之二:MySQL实时慢日志
早期业内大家做MySQL的慢日志系统大都是获取上一整天的慢日志,进行统一分析,然后生成上一天的慢日志报表。这种方式有一定的滞后性,如果业务调整SQL或者新发布了一个功能想看实时的性能状况,这种需求是满足不了的。开发人员需要看到数据库实时的慢日志,以方便更快的进行性能诊断。我们使用ELKB技术栈来实现:
目前给开发人员提供的用户端,通过页面可以实时看到自己的MySQL,从收集到MySQL到展示,目前可以做到5秒以内展示。
4. 总结
上面介绍的是58同城内部两个主要的应用实践,目前数据库团队已经收敛了整个公司30+套各种业务的Elasticsearch集群、300多个节点,服务器接近200台,我们的管理维护还有不少的工作要做。
03平台化建设
从去年开始,我们启动了Elasticsearch平台化建设,一是面向用户端提高开发接入Elasticsearch的效率,另外就是面向DBA管理端,可以对Elasticsearch集群进行高效运维及索引治理等。
58云DB平台Elasticsearch功能架构图如下:
1. 用户端
针对用户端,我们把Elasticsearch开放给开发人员、数据运营、数据分析师等,使他们能够对Elasticsearch的数据进行基本的查询,包括数据统计、分析报表、 查看Elasticsearch的状态等。
2. 管理端
在管理端,我们实现了一键部署Elasticsearch集群。由于Elasticsearch是分布式的,部署的线路是比较长的,它需要多节点、不同的角色,包括监控、Logstash、Filebeat等相关的管理都是支持的。
3. 索引治理
索引治理后续会做一些索引的生命周期管理,现在的管理我们最多的还是依赖脚本,后面索引的工作,我们希望都放到平台上来,都要有相关的操作记录。
对于服务端目前使用的是 Zabbix+ Grafana的方式。我们开发了一套程序。将所有集群的监控指标打入到其中一套Elasticsearch集群中去,然后Grafana基于Elasticsearch做了图表的展示,再通过Zabbix进行一些系统的报警。
用户端,可以通过Kibana可以看到索引index的速度、延迟等信息。
04后续规划1. 版本升级
Elasticsearch 7.X,在Elasticsearch 7.X版本在性能优化上做了很多东西,包括:查询的相关性、对内存的管控方面。但是它同样存在一个问题,Elasticsearch版本不向下兼容,比如6.x版本升级到7.x版本,它的变化会比较大。
2. 集群智能诊断
集群功能越来越多,目前集群出了问题还是依赖运维人员手动发现。我们希望通过规则或者自动分析等手段,实现故障的自动化处理。
3. 私有云探索
接到Elasticsearch业务需求,我们首先要分析它的业务模型:是搜索的还是日志流水的?不同的用途对硬件的消耗差别是很大的,而服务器并不是高度的契合业务配置。在这个方面是有非常多的资源浪费,我们希望通过云模式,能够减少资源浪费,提高资源的利用率。
05问答环节
1. Elasticsearch数据如何与hadoop大数据平台数据仓库同步?
答:Hadoop或hive数据可以通过官方的相关组件,也可以通过自己写程序进行同步。
2. Elasticsearch日志应用中,怎么定义日志格式,有些后台日志情况复杂,比如except崩溃的,怎么处理这种后台日志问题?
答:关于日志格式可以看下Filebeat,Filebeat在收集日志的时候有多行合并功能,从Kafka到Logstash可以定义自己的过滤规则,这样可以很容易的把问题解决掉。
3. MySQL数据如何导入到Elasticsearch,并保持实时同步?
这是一个比价大的主题,从MySQL到Elasticsearch这里考虑的规则还是比较多的。如:单表导入到单索引、多表导入到一个Elasticsearch索引、单表导入多个索引,这些都是不一样的。业内做MySQL到Elasticsearch的同步的方案比较多,主流的有如下几种:
4. Elasticsearch如何实现高效的二级索引?
答:类似于MySQL的回表查询模式,先将所有待查询的数据同步到Elasticsearch中,同步时带上相关的记录id,在Elasticsearch完成查询后,再用这些id去相关的MySQL或HBASE进行查询返回完整数据。
今天的分享就到这里了,谢谢大家!嘉宾介绍:
于伯伟
58同城 |高级架构师
58同城数据库部门负责人,负责为公司各业务提供高可靠、高性能的一站式数据库服务,主要数据库类型包括MySQL、Redis、MongoDB、TiDB和Elasticsearch等,助力与赋能业务发展,提高效率。
在文末分享、点赞、在看,给个三连击呗~~
比赛推荐:
瓜分46万奖金池,首届 Apache Spark AI 智能诊断大赛强势开启。Spark “数字人体” AI挑战赛——脊柱疾病智能诊断大赛,目标是通过核磁共振成像来检测和分类脊柱的退行性改变,形成一批创新性强、复用率高的算法案例,并积极推动相关技术的临床应用。更有全程专家指导,*敏*感*词*带你进决赛。点击图片了解详情:
社群推荐:
欢迎加入DataFunTalk大数据交流群,跟同行零距离交流。如想进群,请识别下面的二维码,根据提示自主入群。