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

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 在南京 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首月免费试用,开始云上实践吧

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
SQL 存储 Java
JDBC Statement:执行 SQL 语句的重要接口
在Java应用程序中,与数据库进行交互是一项常见的任务。为了执行数据库操作,我们需要使用JDBC(Java Database Connectivity)来建立与数据库的连接并执行SQL语句。Statement接口是JDBC中的一个重要接口,它用于执行SQL语句并与数据库进行交互。本文将详细介绍Statement接口的使用,包括如何创建Statement对象、执行SQL语句、处理结果等内容。
472 0
|
5月前
|
弹性计算 运维 算法
阿里云 Elasticsearch Serverless 检索增强型 8.17 版来袭!
阿里云Elasticsearch Serverless 8.17版本,深度融合无服务器架构与分层扩展能力,面向信息检索、向量搜索、语义分析等通用场景,提供全托管服务,在最新特性扩展、自动扩缩性能、资源成本优化等维度均有显著提升。
255 15
|
5月前
|
人工智能 Java API
DeepSeek R1 集成难题完美解决:DeepSeek4j来帮你解决
DeepSeek R1 是一款强大的 AI 模型,但在 Java 生态中集成存在诸多挑战,如思维链丢失、参数限制和流式处理不完善等问题。DeepSeek4j 的出现解决了这些难题,它专为 Java 开发者设计,支持完整思维链保留、流畅的流式响应和简单优雅的 API。通过与 Spring Boot 的无缝集成,开发者只需几行代码即可快速接入 DeepSeek R1。此外,DeepSeek4j 提供调试页面、性能优化功能(如 GPU 加速和模型缓存),助力开发者高效利用 AI 技术,推动智能化应用落地。
|
6月前
|
弹性计算 运维 监控
基于进程热点分析与系统资源优化的智能运维实践
智能服务器管理平台提供直观的可视化界面,助力高效操作系统管理。核心功能包括运维监控、智能助手和扩展插件管理,支持系统健康监控、故障诊断等,确保集群稳定运行。首次使用需激活服务并安装管控组件。平台还提供进程热点追踪、性能观测与优化建议,帮助开发人员快速识别和解决性能瓶颈。定期分析和多维度监控可提前预警潜在问题,保障系统长期稳定运行。
232 17
|
存储 自然语言处理 NoSQL
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之列存(二)
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之列存(二)
fastadmin编辑方法
fastadmin编辑方法
187 0
|
C++ 索引
【C++ 泛型编程 高级篇】 C++ 14 模版元编程 遍历元组 编译期生成整数序列 std::index_sequence和std::make_index_sequence 使用指南(二)
【C++ 泛型编程 高级篇】 C++ 14 模版元编程 遍历元组 编译期生成整数序列 std::index_sequence和std::make_index_sequence 使用指南
300 0
|
人工智能 算法 数据挖掘
期望最大化(EM)算法:从理论到实战全解析
期望最大化(EM)算法:从理论到实战全解析
518 0
|
Java
springboot 接收post、get、重定向,并从url中获取参数
springboot 接收post、get、重定向,并从url中获取参数
1312 0
|
索引 Python
【Python | 入门】 五分钟速通语法
【Python | 入门】 五分钟速通语法
【Python | 入门】 五分钟速通语法

热门文章

最新文章