《Havenask分布式索引构建服务--Build Service》

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
推荐全链路深度定制开发平台,高级版 1个月
OpenSearch LLM智能问答版免费试用套餐,存储1GB首月+计算资源100CU
简介: Havenask是阿里巴巴智能引擎事业部自研的开源高性能搜索引擎,深度支持了包括淘宝、天猫、菜鸟、高德、饿了么在内几乎整个阿里的搜索业务。本文针对性介绍了Havenask分布式索引构建服务——Build Service,主打稳定、快速、易管理,是在线系统提升竞争力的一大利器。

Havenask介绍

Havenask 是阿里巴巴广泛使用的自研大规模分布式检索系统,是过去十多年阿里在电商领域积累下来的核心竞争力产品,广泛应用在搜推广和大数据检索等典型场景。在2022年云栖大会-云计算加速开源创新论坛上完成开源首发,同时作为阿里云开放搜索OpenSearch底层搜索引擎,OpenSearch 自2014年商业化,目前已有千余家外部客户。

下图展示了Havenask 中一个完整的搜索服务:在线系统、索引系统、管控系统、扩展插件,且包括了查询流、数据流、控制流。其中,索引系统负责索引数据生成的过程,还包含有文档处理与本文的主角索引构建服务 Build Service。索引构建分为三个步骤,对数据进行前置处理(例如分词、向量计算等)、产出索引、合并索引文件的处理。
5CA3070E-C162-47C8-8F57-935495AD12D5.png

Havenask 支持千亿级别数据实时检索、百万 QPS 查询,百万 TPS 高时效性写入保障,毫秒级查询延迟和数据更新,并具有良好的分布式架构、极致的性能优化,能够实现比现有技术方案更低的成本,普惠更多的开发者和企业。
开源地址:http://github.com/alibaba/havenask

Build Service简介

Build Service是一个分布式索引构建服务,用于Havenask中的全量表的索引构建。它可以对接本地存储、HDFS等多种数据源,快速的将原始数据构建成全量索引,并以流式工作模式进行增量索引构建。Build Service是Havenask读写分离架构的重要组成部分,独立的索引构建服务使Havenask具有下面优势:

在线系统更加稳定:将索引构建从在线系统分离,避免了索引构建对在线系统的影响,使在线系统更加稳定。

索引构建更快:特有的全量流程,使全量数据导入更快;独立的资源控制,进一步提升索引构建速度。

多版本索引管理:多版本独立的构建流程管理,使索引重建更方便,更安全。

Build Service架构

19E71EC3-9741-4E1D-9ECE-5424D9539C96.png

Build Service架构图

上图是Build Service的架构,在Build Service中主要有下面几个角色:
BS Admin:BS Admin负责整个集群的任务调度和资源管理。BS Admin提供丰富的接口进行索引构建任务的启停,资源的调整等,BS Admin接收到这些请求之后会进行任务的调度,并配合调度系统,调度任务的执行,并维护任务的状态。

Processor:Processor从数据源中拉取数据进行处理,Processor可以支持多种数据源,比如HDFS、OSS等分布式文件系统,也可以对接Swift消息中间件处理实时数据。在Processor中主要是对数据进行分词、简单的数据转换等处理,开发者可以通过定制数据源reader插件和数据处理DocumentProcessor插件来扩展支持不同的数据源和数据处理逻辑。

Builder:Builder负责索引的构建,它将经过Processor处理的数据按照Schema的配置构建成倒排、正排、摘要索引。Builder与Processor的数据交互是通过Swift消息中间件来实现的,即Processor将处理之后的数据写到Swift,Build从Swift中读取这些数据进行索引构建。

Merger:Merger负责索引的定期整理,定期索引整理使索引文件更加紧凑,可以降低在线集群索引加载的内存开销,提升检索性能。索引整理时会清理已经删除的数据,将小的索引文件合并成大的索引文件,也可以按照配置在整理时根据某个字段进行离线排序,这样可以进一步提升检索性能。

在一个Build Service服务中可以有一个或者多个BS Admin,它们通过ZK进行leader选举,只有leader才会管理整个Build Service服务,其他Admin作为fllower,使服务更加稳定。一个Build Service服务可以同时管理多个表或者同一个表的不同版本的索引构建任务,每个任务都是相互隔离的,互不影响。每个索引构建任务都有各自的Processor、Builder、Merger节点进行数据的处理,索引的构建。每个索引构建任务可以独立进行资源控制,比如调整Processor节点的个数,Builder和Meger的并发度,以及这些节点的CPU和内存等。

对于Processor、Builer和Meger节点,它们只有分片(Shard)的概念,没有备份的概念。比如对于Processor,每个分片处理不同的数据,一个分片只会启动一个节点,如果某些原因启动了多个节点,多个节点之间通过ZK进行leader选举,只有leader节点才会存活并工作,非leader节点的进程会自动退出。Builder和Merger的情况与Processor类似,唯一不同的是分片数是在创建表时就确定的,它们只能基于分片数据调节并发度,因此Builder和Meger节点真实启动的个数是分片数乘以并发度。

索引构建流程

A75961D1-C85A-489D-A329-3843197219FF.png

索引构建流程示意图

Build Service的索引构建分为两个阶段:全量索引构建和增量索引构建。每个索引构建任务都会先进行全量索引构建,全量结束之后会自动切换到增量索引构建阶段,增量索引构建任务会一直执行,直至这次索引构建任务停止。全量索引构建任务会首先从分布式文件系统读取原始数据构建成索引(如果没有配置,这步会跳过),全量文件处理完成之后,会继续从Swift中读取数据继续构建全量索引。这样等全量流程结束之后,全量索引中的数据已经通过消费Swift追到距离当前比较靠近的时间了,索引切上线之后不会出现较长时间的时效性延迟。

无论是全量索引构建还是增量索引构建,它们的索引构建流程是类似的。首先Processor节点会从数据源中(包括Swift)读取原始数据,然后对数据进行分词或者其他处理,处理之后的数据会转发到Swift的中。Builder和Merger的任务是交替执行的,首先Builder从Swift中读取处理之后的数据,构建成索引,索引产出在分布式文件系统中。对于全量索引构建,全量数据被全部构建为索引之后Builder就会结束;对于增量索引构建,Builder接受BS Admin的调度,将数据处理到某个时间点就会退出。Builder结束之后,Meger节点就会执行,Meger会对构建的索引按照一定的策略进行整理,整理好的索引也会写回分布式文件系统。

需要注意的是,增量索引构建时,Processor处理之后的数据不仅仅供Builder消费,在线的Searcher节点也会直接消费,将其构建成实时索引。

Build Service定制能力

为了满足不同业务的需求,Build Service在构建索引时支持下面三种定制能力:分析器的定制、数据源插件的定制、数据处理插件的定制。开发者可以直接修改代码将定制逻辑与Havenask一起编译成一个Binary生效,也可以建立单独的目录将其编译成动态库,通过插件的方式生效。

分析器定制:分析器主要用于对文档进行分词,开发者可以通过定制分析器定制自己的分词逻辑,分析器不仅会在构建索引时生效,在查询时也会生效。

数据源插件定制:Havenask主要支持HDFS、OSS、MaxCompute、Swift等数据源,如果要支持更多的数据源比如kafka,可以定制Processor的Reader插件。

数据处理定制:数据在Processor中是由一个DocumentProcessor链进行处理的,用户可以定制自己的DocumentProcessor处理类来扩展数据处理逻辑。

Build Service与Indexlib(核心索引库)的关系

Indexlib是Havenask的核心索引库,提供正排、倒排、摘要等索引的实现,并在此基础上抽象出了各种表模型,比如normal表、kv等、kkv表等。但是Indexlib无法独立提供索引构建服务,必须通过Build Service才能进行索引构建。可以说,Indexlib提供了各种索引的定义,并提供了索引构建的接口,Build Service定义了流式索引构建的框架,两者相结合才使Havenask具有了强大的索引构建能力。

总结

Build Service是一个流式的索引构建服务,能够轻松完成海量数据的索引构建,对在线系统没有任何影响,极大提高了整个集群的稳定性。独立的索引构建任务管理,可以方便、安全的对同一张表进行多次索引构建,特别适用于智能搜索场景下需要定期索引重建的场景。当然,Build Service的引入也使得整个系统的架构更加复杂,数据生效链路变长,资源开销变大,大家在使用时请根据业务情况认真选择。

Havenask 开源官网:https://havenask.net/

Havenask 开源项目地址:https://github.com/alibaba/havenask

阿里云 OpenSearch 官网:https://www.aliyun.com/product/opensearch

欢迎钉钉扫码加入 Havenask 开源官方技术交流群:
1715594790746.png1715594790746.png

相关实践学习
基于OpenSearch搭建高质量商品搜索服务
本场景主要介绍开放搜索(OpenSearch)打造独有的电商行业垂直解决方案,模板内置电商查询分析、排序表达式及行业算法能力,沉浸式体验更高性能和效果的智能搜索服务,助力企业在线业务智能增长。
目录
相关文章
|
3月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
113 3
|
5月前
|
存储 监控 负载均衡
检索服务elasticsearch分布式结构
【8月更文挑战第22天】
56 3
|
18天前
|
消息中间件 存储 安全
分布式系统架构3:服务容错
分布式系统因其复杂性,故障几乎是必然的。那么如何让系统在不可避免的故障中依然保持稳定?本文详细介绍了分布式架构中7种核心的服务容错策略,包括故障转移、快速失败、安全失败等,以及它们在实际业务场景中的应用。无论是支付场景的快速失败,还是日志采集的安全失败,每种策略都有自己的适用领域和优缺点。此外,文章还为技术面试提供了解题思路,助你在关键时刻脱颖而出。掌握这些策略,不仅能提升系统健壮性,还能让你的技术栈更上一层楼!快来深入学习,走向架构师之路吧!
54 11
|
2月前
|
存储 运维 负载均衡
构建高可用性GraphRAG系统:分布式部署与容错机制
【10月更文挑战第28天】作为一名数据科学家和系统架构师,我在构建和维护大规模分布式系统方面有着丰富的经验。最近,我负责了一个基于GraphRAG(Graph Retrieval-Augmented Generation)模型的项目,该模型用于构建一个高可用性的问答系统。在这个过程中,我深刻体会到分布式部署和容错机制的重要性。本文将详细介绍如何在生产环境中构建一个高可用性的GraphRAG系统,包括分布式部署方案、负载均衡、故障检测与恢复机制等方面的内容。
125 4
构建高可用性GraphRAG系统:分布式部署与容错机制
|
3月前
|
运维 供应链 安全
SD-WAN分布式组网:构建高效、灵活的企业网络架构
本文介绍了SD-WAN(软件定义广域网)在企业分布式组网中的应用,强调其智能化流量管理、简化的网络部署、弹性扩展能力和增强的安全性等核心优势,以及在跨国企业、多云环境、零售连锁和制造业中的典型应用场景。通过合理设计网络架构、选择合适的网络连接类型、优化应用流量优先级和定期评估网络性能等最佳实践,SD-WAN助力企业实现高效、稳定的业务连接,加速数字化转型。
SD-WAN分布式组网:构建高效、灵活的企业网络架构
|
2月前
|
监控 算法 网络协议
|
6月前
|
负载均衡 Java 双11
使用Java构建高可用的分布式系统
使用Java构建高可用的分布式系统
|
2月前
|
存储 监控 大数据
构建高可用性ClickHouse集群:从单节点到分布式
【10月更文挑战第26天】随着业务的不断增长,单一的数据存储解决方案可能无法满足日益增加的数据处理需求。在大数据时代,数据库的性能、可扩展性和稳定性成为企业关注的重点。ClickHouse 是一个用于联机分析处理(OLAP)的列式数据库管理系统(DBMS),以其卓越的查询性能和高吞吐量而闻名。本文将从我的个人角度出发,分享如何将单节点 ClickHouse 扩展为高可用性的分布式集群,以提升系统的稳定性和可靠性。
168 0
|
4月前
|
数据采集 分布式计算 MaxCompute
MaxCompute 分布式计算框架 MaxFrame 服务正式商业化公告
MaxCompute 分布式计算框架 MaxFrame 服务于北京时间2024年09月27日正式商业化!
112 3
|
5月前
|
SQL 分布式计算 MaxCompute
一种基于ODPS SQL的全局字典索引分布式计算思路
本文提供一种能充分利用分布式计算资源来计算全局字典索引的方法,以解决在大数据量下使用上诉方式导致所有数据被分发到单个reducer进行单机排序带来的性能瓶颈。