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

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

在南京 Elastic Meetup 南京交流会专场中,苏宁大数据平台搜索平台组的韩宝君为我们带来如何在大量的数据中发现数据的价值。从大数据平台的架构出发,详细解读了平台的概况和服务化平台的模块等方面的知识。最后,具体举出了在实践中出现的一些问题及对应的处理方案。
阿里云Elasticsearch 1核2G首月免费试用,开始云上实践吧
直播视频回顾
[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源码,实现查看所有、全局、单个索引的状态文件内容。

阿里云Elasticsearch 1核2G首月免费试用,开始云上实践吧

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
5月前
|
Cloud Native 开发者 Java
邀请函 | 云原生开源开发者沙龙「深圳站」
本次活动,我们将云栖大会上容器和微服务相关的精彩内容带到深圳,与您面对面交流,包括 Koordinator、Higress、eBPF 等开源项目,更有 Spring Boot 升级 Spring Cloud 最佳实践的分享。
3165 1
邀请函 | 云原生开源开发者沙龙「深圳站」
|
4月前
|
存储 人工智能 云计算
See you in 深圳丨阿里云存储技术实战营报名启动,3大议题速览
本次活动邀请阿里云存储、达摩院、日志服务的专家进行技术宣讲与案例分享,帮助企业了解最新云计算以及AI技术的具体落地,为企业高质量发展以及业务出海提供有益借鉴。
72473 2
See you in 深圳丨阿里云存储技术实战营报名启动,3大议题速览
|
5月前
|
运维 Cloud Native 中间件
北京站丨云原生技术实践营启动报名,精彩议题抢先看
北京站丨云原生技术实践营启动报名,精彩议题抢先看
|
7月前
|
消息中间件 Cloud Native 开发者
活动回顾丨云原生开源开发者沙龙深圳站(含 PPT)
活动回顾丨云原生开源开发者沙龙深圳站(含 PPT)
|
9月前
|
Cloud Native 开发者
上海站丨云原生开源开发者沙龙开放报名(周日场)
上海站丨云原生开源开发者沙龙开放报名(周日场)
上海站丨云原生开源开发者沙龙开放报名(周日场)
|
9月前
|
算法 大数据 调度
我在杭州等你!「隐语开源社区Meetup 」新年第一站
我在杭州等你!「隐语开源社区Meetup 」新年第一站
|
9月前
|
开发者
隐语开源社区Meetup·北京站,报名火热开启
隐语开源社区Meetup·北京站,报名火热开启
|
Cloud Native 中间件 Serverless
【观看直播有礼】第三届云原生实战峰会正式官宣启动
云原生技术和数字化转型是相互促进的,并且云原生技术可以加速和推动数字化转型。
【观看直播有礼】第三届云原生实战峰会正式官宣启动
|
运维 Cloud Native 架构师
抢先报名丨2021云上架构与运维峰会12月10日线上开启,五大精彩看点不容错过
本次峰会,希望通过分享云上架构与运维的最佳实践,促进业内DevOps与IaC理念的落地,帮助企业“用好云管好云”,释放云的技术红利。
抢先报名丨2021云上架构与运维峰会12月10日线上开启,五大精彩看点不容错过
|
SpringCloudAlibaba Java 开发者
阿里云开发者 DevUP 沙龙 -青岛站 -阿里巴巴微服务技术的应用与实践邀你参加啦
微服务开发中,SpringCloud作为Spring生态中的针对微服务的技术框架,越来越受到各个企业技术人员的追捧。但是,SpringCloud中一些组件,在实践使用中,存在一定的局限。SpringCloudAlibaba,横空出世,替换了SpringCloud中的一些组件,使微服务在实践中,能够更便捷的、更优雅的实现落地。
1381 0
阿里云开发者 DevUP 沙龙 -青岛站 -阿里巴巴微服务技术的应用与实践邀你参加啦