苏宁Elastic平台化实践中踩过哪些坑,又是如何解决的?

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 在南京 Elastic Meetup 南京交流会专场中,苏宁大数据平台搜索平台组的韩宝君为我们带来如何在大量的数据中发现数据的价值。从大数据平台的架构出发,详细解读了平台的概况和服务化平台的模块等方面的知识。最后,具体举出了在实践中出现的一些问题及对应的处理方案。

摘要:在南京 Elastic Meetup 南京交流会专场中,苏宁大数据平台搜索平台组的韩宝君为我们带来如何在大量的数据中发现数据的价值。从大数据平台的架构出发,详细解读了平台的概况和服务化平台的模块等方面的知识。最后,具体举出了在实践中出现的一些问题及对应的处理方案。
数十款阿里云产品限时折扣中,赶快点击这里,领劵开始云上实践吧!
直播视频回顾
[PPT下载请点击]https://yq.aliyun.com/download/2885)
以下为精彩视频内容整理:

苏宁大数据平台总体架构

大数据平台职责是提供苏宁集团各个业务所需要的大数据存储和计算能力,保证平台的稳定、高效运行,高平台易用性。本文将从ES平台总体介绍、ES平台化之路、实战经验这三个方面来为大家详细解读。大数据平台分为服务层、计算层、存储层三个部分。服务层包括大数据管理平台、数据云、数据开发平台、机器学习、准实时计算、OLAP、实时计算等。ES位于计算层。

Elasticsearch平台概况

集群规模包括18个集群、195个节点、接入100+个业务、4500+个索引数据量64+TB;平台功能包括独占服务和共享服务、资源利用率和业务隔离的权衡;计量计费,强调成本概念;页面化服务增加了使用便利性,减少错误操作,节约时间。

为什么做ES平台?

在一年前四月份时的苏宁,ES没有被普遍使用,版本不统一,计算平台需兼容多版本ES业务自己管理,无专业团队维护,稳定性、性能无法保障,人力和物力方面存在资源浪费现象。所以为了解决这种混乱的状况,我们的目标是做一个专业的ES平台。
ES平台的发展主要经历两个阶段,人肉阶段与自动化阶段。人肉阶段包括人肉部署集群、人肉对接业务、人肉运维集群。自动化阶段包括自动化部署集群、申请服务页面化、计量计费功能、可用性、性能监控、安全增强、数据探查。人肉阶段的对接文档包括业务信息、项目信息、应用场景和数据量级(可知每天新增多少数据占多大存储)。下图讲述了数据的索引方式。

image001

服务化平台

服务化平台包括以下几个模块:
 监控管理:ES集群的各项监控指标展示。
 集群管理:支持多集群,可以查看具体集群信息和节点列表。
 项目管理:使用ES服务的项目列表,分配给各自系统的秘钥。
 资源管理:机器列表,该机器归属于哪些集群及部署哪些软件包。
 软件包管理:支持选择的ES版本相关软件包。
 索引管理:该系统下的索引列表,索引的详细信息。
 工单管理:用户可以提交相应的工单,管理员审批。
 计量管理:系统、集群、索引的请求量和存储量及详情。
 查询管理:可以像kibana一样查询ES。
其中最重要的是集群管理中的管理员可以添加黑名单和白名单。对于用户申请加入集群可以选择用户视图,然后等待管理员审批。在工单部分管理员可以看到新增字段、创建索引、创建集群等,管理员可以对其进行审批。然后进入到索引管理阶段,以申请索引为例,管理员可以根据申请情况进行下一步的监控处理。监控包括集群巡检、集群监控、节点监控、索引监控和线程池监控。由于集群数目众多,人工处理麻烦,所以我们会定期扫描处理。检查运行状况。
同时,还需要对用户进行计量管理。如下图所示可以对索引量进行管理。对于查询管理,用户只有查看权限、不能修改、删除。

image003

实战经验

我们在实践过程中遇到过许多问题,对此,我们是如何来解决呢?

问题一

一个简单的macth_all查询报如下错:
Caused by: org.elasticsearch.hadoop.rest.EsHadoopInvalidRequest: An HTTP lineis larger than 4096 bytes. (该错误表示http请求超过了ES的http请求长度限制)对于这个问题我们的解决方案是,修改elasticsearch-hadoop源码

  1. https://github.com/hanbj/elasticsearch-hadoop.git (hanbj_v5.4.2)
  2. Commits:An HTTP line is larger than 4096 bytes
    如需要进一步了解,详情见PR: https://github.com/elastic/elasticsearch-hadoop/pull/1154

问题二

线程池模块在处理header时有一点小问题。对于这个问题我们的解决方案是,修改elasticsearch源码。
如需要进一步了解,详情见PR: https://github.com/elastic/elasticsearch/pull/26068

问题三

创建一个Hive外部表指向ES中的某个索引,通过Hive HQL直接操作ES。当运行下面的HQL时,发现找不到数据。select from table_name where city_code in (‘010’, ‘791’);但是下面两条Hql都可以找到数据:select from table_name where city_code in (‘010’);select * from table_name where city_code in ('791'); 对于这个问题我们的解决方案是,修改elasticsearch-hadoop源码,

  1. https://github.com/hanbj/elasticsearch-hadoop.git (hanbj_v5.4.2)
  2. Commits:check cluster name and add SparkSession conf
    如需要进一步了解,详情见PR: https://github.com/elastic/elasticsearch-hadoop/pull/1135

问题四

Master选举修改,当集群规模越来越大,在高并发、高基数查询和高写入量并存场景下,节点负载高有时可能导致该节点脱离集群或者触发重新选举master,这两种情况下可能都会导致分片漂移,造成资源的浪费。对于这个问题我们的解决方案是,部分节点单机多实例部署、适量增大ping的超时时间、master、data、ingest节点分离(至少设置3个实例为master节点实现多可靠)、修改master选举算法(master节点成为master的优先级最高,其次是ingest节点做担保)如需要进一步了解,详情见:

  1. https://github.com/hanbj/elasticsearch.git (hanbj_v5.4.2)
  2. Commits:elect master ,include ingest node

问题五

目前有近20个ES集群,部分集群http端口一样。REST方式访问ES集群时,只要IP和端口配置正确,就可以进行访问对于这个问题我们的解决方案是:
修改elasticsearch-hadoop源码

  1. https://github.com/hanbj/elasticsearch-hadoop.git(hanbj_v5.4.2)
  2. Commits:check cluster name and add SparkSession conf,params append cluster.name 修改elasticsearch源码
  3. https://github.com/hanbj/elasticsearch.git (hanbj_v5.4.2)
  4. Commits:RestClient add check cluster name,
    RestClient add check cluster name (netty3)

具体访问集群方式改变成:见下图。

image005

问题六

黑白名单控制的问题。集群安全稳定至关重要,为了控制集群以外的机器对集群进行无效查询和攻击,所以应该支持动态允许/防止一些机器访问集群。对于这个问题我们的解决方案是,修改elasticsearch源码(支持IPv4、IPv6和通配符)

  1. https://github.com/hanbj/elasticsearch.git (hanbj_v5.4.2)
  2. Commits:black and white list
  3. 参数:都可动态修改
     http.filter.enabled

 transport.filter.enabled
 http.filter.allow
 http.filter.deny
 transport.filter.allow
 transport.filter.deny

问题七

在共享集群的模式下,频繁或大并发的导出操作,会给集群造成比较大的压力,导致该集群下其他业务的正常查询延迟。对于这个问题我们的解决方案是,修改elasticsearch源码,添加相应的控制参数,可以控制导出的并发量和数据量。

  1. https://github.com/hanbj/elasticsearch.git (hanbj_v5.4.2)
  2. Commits:limit scroll
  3. 参数:都可动态修改
     scroll.enabled

 scroll.interval
 scroll.concurrent.indices
 scroll.limit

问题八

目前的elasticsearch-hadoop版本不支持删除索引和数据,但业务有这方面的需求。对于这个问题我们的解决方案是,修改elasticsearch-hadoop源码,增加删除索引和根据query删除数据的逻辑。

  1. https://github.com/hanbj/elasticsearch-hadoop.git (hanbj_v5.4.2)
  2. Commits: delete index and delete by query

问题九

delete_by_query和update_by_query API 和其他API 格式不统一,容易对业务造成困扰。对于这个问题我们的解决方案是,修改elasticsearch源码

  1. https://github.com/hanbj/elasticsearch.git (hanbj_v5.4.2)
  2. Commits:delete by query,update by query

问题十

Transport模块有一个专用的跟踪记录器,当被激活时,记录传入和进出请求。可以使用一组通配符模式来控制哪些操作将被跟踪。默认情况下,每个请求将被跟踪,除了故障检测和ping。但是日志中并没有打印请求源,不方便进行追踪。我在ES的基础上增加了请求源IP、内部请求转发、请求发送、响应接收的详细日志。对于这个问题我们的解决方案是,修改elasticsearch源码,增加了请求源IP、内部请求转发、请求发送、响应接收的详细日志。

  1. https://github.com/hanbj/elasticsearch.git (hanbj_v5.4.2)
  2. Commits:请求追踪

问题十一

Gateway模块用于存储ES集群的MetaData。MetaData每一次改变(比如增加、删除索引等),都要通过Gateway模块进行持久化。当集群第一次启动的时候,这些信息就会从Gateway模块中读出并应用。状态文件存的都是二进制,不具备可读性。对于这个问题我们的解决方案是,修改elasticsearch源码,实现查看所有、全局、单个索引的状态文件内容。

  1. https://github.com/hanbj/elasticsearch.git (hanbj_v5.4.2)
  2. Commits:cat metadata
    如有关于技术方面的问题可以关注官方微信公众号或讲师个人微信进行交流。

image007

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
前端开发 Java 测试技术
靠这份SpringBoot实战手册搭建企业级商城项目,斩获京东offer!
为什么会越来越流行SpringBoot? Spring Boot已经成为企业招聘需求的重要部分了。这也使得Spring Boot成为Java开发人员必备的技术栈。无论应届毕业生还是有经验的Java开发人员,Spring Boot技术栈及相关项目经验都已经成为他们简历中的必要元素
75 0
|
6月前
|
缓存 NoSQL 中间件
重磅来袭!腾讯T7手写高并发实战手册,称霸GitHub热榜
Netty为何这么火 Netty是互联网中间件领域使用最广泛、最核心的网络通信框架之一。几乎所有互联网中间件或者大数据领域均离不开Netty,掌握Netty是作为一名初中级工程师迈向高级工程师重要的技能之一。 Netty之所以受青睐,是因为Netty提供异步的、事件驱动的网络应用程序框架和工具。作为一个异步框架,Netty的所有IO操作都是异步非阻塞的,通过FutureListener机制,用户可以方便地主动获取或者通过通知机制获得IO操作结果。 为什么写Netty? 目前来说,主要的互联网公司,例如阿里、腾讯、美团、新浪、淘宝等,在高级工程师的面试过程中,就经常会问一些高
|
消息中间件 架构师 算法
好家伙!全网开源对标P5~P7程序员技术成长路线,阿里这次是真卷
今年的程序员可以说是最焦虑的一个群体了,面试找工作投简历没人理,有面试机会也面试不过,面试进去还干不长...于是,程序员们纷纷直呼:互联网寒冬又双叒叕来了,环境不好努力也没用躺平算了。
274 1
好家伙!全网开源对标P5~P7程序员技术成长路线,阿里这次是真卷
|
前端开发 Java 程序员
阿里新年献礼:Java性能调优(独孤版),带你打造淘宝秒杀架构
高并发下如何设计秒杀系统?这是个高频面试题。虽然简简单单一句话,看似简单其实不然,这里面水很深,秒杀的整体架构可以概括为“稳、准、快”几个关键字,它所涉及的知识包含了从前端到后端。
|
SQL Arthas 运维
取经阿里十年技术大佬,得到Java线上问题排查攻略!
再牛逼的程序员都写不出完美无缺的代码,作为后端开发工程师,一不小心就会遇到线上故障。如果线上故障处理不及时,就可能导致各种严重的后果。恰好最近部门出现了一次挺严重但幸运的是影响面不大的线上故障,最后在阿里工作十年的leader分享了线上问题的排查思路。结合这次分享,写下了这篇Java线上问题排查攻略。
|
监控
《“啄”壮成长,移动app线上日志分析利器》电子版地址
“啄”壮成长,移动app线上日志分析利器
76 0
《“啄”壮成长,移动app线上日志分析利器》电子版地址
|
SQL 存储 运维
免费下载!冰河力作——《MySQL 技术大全:开发、优化与运维实战》重磅登场!
MySQL 具有小巧、灵活和免费等特性,这使得它越来越多地被用于企业的实际开发中。 特别是 MySQL 数据库的开源特性,更使它得到了广泛应用。
免费下载!冰河力作——《MySQL 技术大全:开发、优化与运维实战》重磅登场!
|
大数据 Apache 双11
女朋友问阿里双十一实时大屏如何实现,我惊呆一会,马上手把手教她背后的大数据技术(二)
女朋友问阿里双十一实时大屏如何实现,我惊呆一会,马上手把手教她背后的大数据技术(二)
371 0
女朋友问阿里双十一实时大屏如何实现,我惊呆一会,马上手把手教她背后的大数据技术(二)
|
人工智能 搜索推荐 大数据
女朋友问阿里双十一实时大屏如何实现,我惊呆一会,马上手把手教她背后的大数据技术(一)
女朋友问阿里双十一实时大屏如何实现,我惊呆一会,马上手把手教她背后的大数据技术(一)
228 0
女朋友问阿里双十一实时大屏如何实现,我惊呆一会,马上手把手教她背后的大数据技术(一)
|
SQL 分布式计算 运维
作为国内规模最大的 ClickHouse 用户,字节跳动踩过哪些坑?
ClickHouse 由于其性能方面的突出优势,正在分析型数据库领域掀起一波新的技术浪潮。
417 0
作为国内规模最大的 ClickHouse 用户,字节跳动踩过哪些坑?