揭秘阿里自研搜索引擎 Havenask 在线检索服务

news2024/9/24 1:18:56

作者:谷深

Havenask 是阿里巴巴智能引擎事业部自研的开源高性能搜索引擎,深度支持了包括淘宝、天猫、菜鸟、高德、饿了么在内几乎整个阿里的搜索业务。本文针对性介绍了 Havenask 的在线服务,它具备高可用、高时效、低成本的优势,帮助企业和开发者量身定做适合业务发展的智能搜索服务。

一、Havenask 介绍

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

下图展示了 Havenask 中一个完整的搜索服务:在线系统、索引系统、管控系统、扩展插件,且包括了查询流、数据流、控制流。其中在线检索服务,包含了 QRS 和 Searcher,Qrs 负责接收用户查询、查询分发、收集整合结果。Searcher 是搜索查询的执行者,负责倒排索引召回、统计、条件过滤、文档打分、排序、摘要生成等。

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

开源地址:http://github.com/alibaba/havenask

1.1 Havenask 在线检索服务简介

Havenask 是一款高效、可扩展的分布式 SQL 搜索引擎。该引擎具有以下核心特性:

  • 支持多种不同类型的索引,能够满足不同业务场景的检索需求

  • 稳定低延时,确保检索的速度和准确性

  • 高度可定制,用户可以根据实际需求进行个性化配置和扩展

通过以上特性的集成和优化,Havenask 在海量数据处理方面表现出色,它为阿里集团旗下大量业务场景,如淘宝、天猫等,提供了快速准确的检索能力。

1.2 Havenask 在线检索服务架构

如下图所示,Havenask 在线检索服务主要由以下几部分构成:

  1. Suez Admin:Suez Admin 是 Havenask 集群的管理中枢,主要负责集群资源的调度以及目标管理;

  2. Suez Worker:  Suez Worker 是由 Suez Admin 基于运维人员的集群描述分配和管理的引擎在线工作节点;

  3. Navi :Navi 是通用的分布式图执行框架,在 Havenask SQL 引擎运行的过程中根据用户查询对应的 SQL 计算图调度对应 SQL 算子和资源;

  4. Havenask SQL:通过 Navi 框架上定义和注册的 Havenask SQL 算子与资源集合实现的 SQL 检索引擎。主要运行在 Suez Worker 上,Havenask 集群中的工作节点又可以进一步分为以下两类:

  • QRS 是一类多副本(Replica)的查询工作节点。主要负责处理用户查询请求、解析和校验 Query、生成和执行 SQL 计划;

  • Searcher/Database 是一类多副本(Replica)、多数据分列(Partition) 的数据工作节点。主要基于 QRS 的远程调用执行 SQL 分布式计划的一部分,负责查询索引、召回文档。Searcher 还会基于 Suez Worker 的索引管理能力加载 BuildService 构建的全量索引、批次索引,订阅 Swift 消息构建实时索引。

二、搜索基础服务框架:Suez

Suez 是一个支持多表、多业务的通用搜索在线服务框架,支持快速分发和加载索引和配置数据、搜推广场景下常见类型的索引(倒排,kv 等)、自由定制和更新业务逻辑、机房内/机房间大规模部署。大大减轻了引擎的运维压力。

2.1 Suez Admin

  • suez admin 在整个框架中是一个中枢,它负责对于搜索集群目标进行调度。它拿到业务视角的业务描述后,对这个大的最终目标进行分解,然后根据各部分的信息去和 hippo(一层资源调度器)、suez worker 等组件进行交互,最终让整个服务达到用户的期望状态。在这个过程里和日后漫长的运行中,还要不断收集 worker 的状态,自动化应对诸如进程挂掉、机器故障、网络异常等各种各样的问题,保证稳定的对外服务能力

Carbon 二层调度

以上这些需求本质上是大型分布式服务都会需要的调度逻辑,我们把这部分逻辑单独划分出来,沉淀出了一套独立的二层调度器 Carbon。在阿里内部 Carbon 是一个基于 K8S 的 controller,在当前开源版本目前 Carbon 被封装在 Suez Admin 上基于 SSH 进行调度,未来也将支持 K8S 调度。

Carbon 主要支持以下能力:

  1. 服务的启停、扩缩容

    rolling 升级

    资源、进程、业务等描述都可以在保证服务能力的情况下自动升级

    可以灵活控制升级比例,从而实现灰度升级

    多种拓扑结构下的升级(QRS 的按行切换、Searcher 的按列切换)

  2. 异常节点自动恢复

  3. 服务状态监管,对外披露服务状态

Suez Admin 集群管理

  • 老版本 Suez Admin 直接基于 Carbon 接口的集群管理使用起来较为不便,用户需要自己处理复杂的目标。但是对于一个日常运维人员而言,他大部分情况下是围绕表进行集群管理的,更关心如何方便地添加和变更一张表,以及调整表所在物理集群的一些参数。因此从 Havenask 1.0.0 开始,Havenask 支持默认基于最新的 Suez Admin Catalog 和 Cluster 接口管理集群。

  • Catalog 接口包含表相关的所有信息,Cluster 接口包含集群的在线进程信息。当用户启动一个集群的时候会默认调用 Cluster 接口启动一个最小的集群,然后用户就可以调用 Catalog 接口建表改表。Suez Admin 会根据表的分片数以及配置信息分配节点、下发目标给 Carbon,从而实现表部署到集群上并对外提供服务的目的。用户也可以更新配置模板来调整表和进程。Catalog 接口还包括对于全量表的索引构建的管理能力,能够自动下发批次增量索引到集群上。总体来说简化了集群管理的工作,降低了运维的负担。

2.2 Suez Worker

  • Suez Worker 提供了加载多表和业务信息的功能。进程需要加载的索引表以及需要加载的业务配置等等都统在一个 json 结构中描述,对外提供 Restful CRUD 接口。因此 Suez Worker 既可以独立存在,也可以通过 Suez Admin 调度。Suez Worker 也会接受 Catalog 上发来的 BuildService 索引构建结果与 Swift 上的实时消息,以保证自己的数据时效性不延迟。

  • Suez Worker 需要同时承担配置管理和索引管理的两种任务,它时刻会根据最新接受的目标来调整自己需要执行的自动化任务,可能存在的场景很多,包括但是不局限于以下:

    自动内存管理,全量、增量、实时根据内存情况加载,不会超限

    多种业务加载策略,既可以渐进导流,也可以激进地起新下老

    自动化的磁盘管理和老版本保留,既可以做到快速回滚恢复,又不会占满磁盘

  • 因此 Suez Worker 采用了状态机来维护一份决策表,当一个事件触发时如新批次下发、新全量下发、新配置下发等,会根据当前表的状态例如表的加载状态、是否缺磁盘内存等来决定下一步行为。

三、SQL 解析与优化:Iquan

Iquan 是基于 Calcite/Flink 开发的 SQL 解析与执行计划优化模块(基于 Java 语言编写), 目前已经支持了大部分 SQL 标准语法及 UDF/UDAF 扩展。当 Havenask 引擎启动的时候,QRS 节点会加载 iquan 模块,并基于加载的在线配置生成一份 Catalog 清单,用于描述当前集群可用的表和 UDF 信息。你可以通过访问 QRS 的/SqlClientInfoj 接口来获取这份信息。

当用户查询的 SQL 语句进入 Iquan 以后,会存在如下几个阶段:

  1. SQL 解析: SQL 语句解析阶段, 会把用户数据的 sql 语句转化为对应的 AST 树。这个过程会校验用户调用的一些 UDF 是否已经注册,使用的字段是否符合类型限制等;

  2. 逻辑优化阶段: 将 AST 树转变为对应的 DAG 图,Iquan 将在这个阶段对 DAG 图做一些逻辑上的变换, 比如:冗余节点合并(重复计算的地方只计算一次)、谓词下推(将判断条件下推到 Searcher,尽可能跳过无关数据)等等变换;

  3. 物理优化阶段: 将逻辑 DAG 图转成对应的物理 DAG 图。在这个阶段, Iquan 会根据 Havenask 的特点做一些特有的优化;

  4. 分布式执行图转换阶段:为了能让 physical DAG 可以运行在 Navi(Navi 介绍见下文)上, 在这个阶段会将对应的物理 DAG 图转为对应的分布式执行图。

四、SQL 分布式执行框架:Navi

在阿里内部多年的搜推广在线引擎迭代中,抽象出了一套通用的实时满足用户查询、低延迟的分布式执行 Navi。原生支持流式计算、分布式图,还提供了一整套用户请求处理、配置管理、计算资源管理、全链路可观测、流式算子开发、与 Tensorflow 结合的能力。设计初衷是希望解决引擎开发过程中的共性问题,提供一体的解决方案,业务只需要聚焦于自身的业务逻辑,下面介绍其中的一些核心特性。

计算资源管理

在分布式图执行的过程中,可能需要准备很多计算相关的资源,例如某个能够缓存某种结果的 cache 类,能够支持某种插件的注册和创建的插件管理器,某种指标汇报器,某种配置等等,可能互相有依赖,比如 cache 类可能要汇报指标。它们有几个共同特点:语义清晰,功能独立,往往多次使用,大多需要初始化,有时会有自己的配置,互相之间可能会有依赖,另外由于是一次创建多次使用,所以创建和使用不是对应的,两者是分离的,使用的地方往往不关心创建逻辑。

基于此,navi 中引入了 Resource 这一非常重要的概念:一次创建、多次使用的数据,Resource 可以依赖其他 Resource。Resource 按需推导创建,从用户的视角看,所有 Resource 都是为跑算子服务的,因此资源依赖的推导也都是围绕着算子的。

下图给出了一个围绕 SQL 算子准备资源的流程,两个 Scan 算子依赖 UDF 和 MetricReporter 两个 Resource,Sort 则依赖 MetricReporter 和 Cache,同时 UDF 也依赖 MetricReporter。执行时,navi 会先创建 MetricReporter,再创建 UDF,最后创建 Scan,Sort 逻辑与此类似,需要强调的是,Cache 和 MetricReporter 是并发创建的。

分布式数据流图

在 Navi 诞生以前,Havenask 引擎采用基于 Tensorflow 的 Suez Turing 框架实现自定义的引擎算子。但是 Tensorflow 算子是无状态的,并不完全适合搜索场景。比如用 tensorflow 的无状态算子实现一个 SQL 查询中的 HashJoin 时必须把 HashMap 存在另一个地方,而不能记在自己的成员上。因此 Navi 选择将业务逻辑抽象为流式图,图中的节点是算子,边是数据流。不同算子通过有向的数据流边来关联,构成子图。在分布式环境下,子图的某些边可以被其他子图引用作为整体输出。例如 Searcher 的子图被 QRS 引用。由于边上是流式数据,所以 navi 支持流水线式的并发,能够极大提升计算图执行效率。

五、Havenask SQL 引擎

Navi 只定义了通用的分布式图执行框架,但是并没有具体定义 Havenask SQL 行为。因此 Havenask SQL 引擎实际上就是基于 Navi 算子接口实现了 Havenask 的 SQL 算子集合以及相关的计算资源。它向 Navi 注册一个特殊的 RPC 资源来对外提供 SQL 读写服务。通过注册的 Iquan 资源解析用户 SQL 请求,生成执行计划,最后再由 Navi 框架执行对应 SQL 算子组成的计算图。

六、总结

Havenask 是一套包括集群调度与运维、分布式执行引擎、SQL 算子与资源集合的搜索服务,为用户提供高性能、低成本、易用的搜索服务。同时具有灵活的定制和开发能力,帮助客户和开发者量身定做适合自身业务的智能搜索服务,助力业务增长。

Havenask 开源官网:

https://havenask.net/

Havenask 开源项目地址:

https://github.com/alibaba/havenask

阿里云 OpenSearch 官网:

https://www.aliyun.com/product/opensearch

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1368147.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络学习笔记(四)

文章目录 1.介绍一下HTTPS的流程。2.介绍一下HTTP的失败码。3.说一说你知道的http状态码。4. 301和302有什么区别?5.302和304有什么区别?6. 请描述一次完整的HTTP请求的过程。7.什么是重定向?8. 重定向和请求转发有什么区别?9.介绍…

电子学会C/C++编程等级考试2023年12月(四级)真题解析

C/C++编程(1~8级)全部真题・点这里 第1题:移动路线 桌子上有一个m行n列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1),则右上角方格的坐标为(m,n)。 小明是个调皮的孩子,一天他捉来一只蚂蚁,不小心把蚂蚁…

如何让ArcGIS Pro启动显示空白页面

刚接触ArcGIS Pro的你是否会觉得在操作上有那么一些不习惯,从一开始软件启动就发现和ArcGIS差距很大:丰富的欢迎页面,加上默认加载的地图让你眼花缭乱,这里教你如何去掉这些繁杂的内容,还你一个干净的启动页面。 跳过…

2024年远控软件年度盘点:安全、稳定、功能之选

这目录 前言2024年热门远控软件ToDesk向日葵TeamViewerAnyDeskSplashtopAirDroidChrome Remote DesktopMicrosoft远程桌面RayLinkParallels Access 远程控制软件如何选择?1、功能性2、安全性3、易用性4、稳定性 未来展望与建议结语 前言 随着信息技术不断发展&…

setup 语法糖

只有vue3.2以上版本可以使用 优点: 更少的样板内容,更简洁的代码 能够使用纯 Typescript 声明props 和抛出事件 更好的运行时性能 更好的IDE类型推断性能 在sciprt标识上加上setup 顶层绑定都可以使用 不需要return ,可以直接使用 使用组件…

java多线程-实现多线程(一)

目录 1.1 进程 1.2 线程 1.3 多线程的实现方式 ​编辑 方式1(继承Thread类) 1.1 进程 是正在运行的程序是系统进行资源分配和调用的独立单位每一个进程都有它自己的内存空间和系统资源 1.2 线程 线程是进程中的单个顺序控制流,是一条执…

802.1X(HCIP)

目录 一、802.1X协议概述 1、802.1X协议概述 2、802.1X基本概念 认证模式 认证方式 端口控制方式 3、802.1X认证触发机制 客户端主动触发 设备端主动触发(用于支持不能主动发送EAPOL-Start报文的客户端) 4、EAP体系结构 5、EAP报文封装结构 6…

基于Django框架的旅游推荐系统构建-计算机毕业设计源码82884

摘 要 随着社会的快速发展和人们生活水平的不断提高,旅游已逐渐成为人们生活的重要组成部分,用户能够获取旅游信息的渠道也随信息技术的广泛应用而增加。大量未经过滤的信息在展示给用户的同时,也淹没了用户真正感兴趣的信息。为了方便用户快…

05、Kafka ------ 各个功能的作用解释(主题和分区 详解,用命令行和图形界面创建主题和查看主题)

目录 CMAK 各个功能的作用解释(主题)★ 主题★ 分区★ 创建主题:★ 列出和查看主题 CMAK 各个功能的作用解释(主题) ★ 主题 Kafka 主题虽然也叫 topic,但它和 Pub-Sub 消息模型中 topic 主题及 AMQP 的 t…

通义千问协助分析openHarmony内核编译故障记录

drivers/hdf/khdf/manager/../../../..//framework/utils/src/hdf_sbuf.c:271:6: 错误: ‘-mgeneral-regs-only’ is incompatible with floating-point argument 这个编译错误提示指出,在编译源文件 "hdf_sbuf.c"(位于 "driv…

【UE Niagara学习笔记】03 - 火焰喷射效果

目录 效果 步骤 一、创建粒子系统 二、制作火焰动画 三、改为GPU粒子 四、循环播放粒子动画 五、火焰喷射效果雏形 六、火焰颜色 效果 步骤 一、创建粒子系统 1. 新建一个Niagara系统,选择模板 命名为“NS_Flame_Thrower”(火焰喷射&#…

海康威视 spon IP网络对讲广播系统任意文件上传漏洞

产品介绍 海康威视IP网络对讲广播系统采用领先的IPAudio™技术,将音频信号以数据包形式在局域网和广域网上进行传送,是一套纯数字传输系统。 漏洞描述 spon IP网络对讲广播系统存在任意文件上传漏洞,攻击者可以通过构造特殊请求包上传恶意后门文件,从…

图解JVM (及一些垃圾回收\GC相关面试题 持续更新)

垃圾回收,顾名思义就是释放垃圾占用的空间,从而提升程序性能,防止内存泄露。当一个对象不再被需要时,该对象就需要被回收并释放空间。 Java 内存运行时数据区域包括程序计数器、虚拟机栈、本地方法栈、堆等区域。其中,…

PLC期末速成——顺序功能图转梯形图

一、根据顺序功能图写出梯形图程序 顺序功能图: 梯形图: 1、程序段1,系统运行标志M0.0的启-保-停控制电路。 2、程序段2,PLC上电与逆行,初始化脉冲M1.0激活初始化步M2.0。 3、程序段3,当M2.0初始化步为活…

Ubuntu 18.04.5 LTS 解决安装包复杂依赖相关问题解决的主要法则和VIM的安装实录

前言:目标和环境 环境: Ubuntu 18.04.5 LTSVMware 目标: 安装vim,解决包依赖的冲突: 本文,通过一个很好的实例,诠释了,LINUX系统下,安装一个应用遇到的依赖库问题如何…

three.js实现扩散波效果

three.js实现扩散波效果 图例 步骤 创建一个圆柱&#xff0c;不要顶与底面材质允许透明&#xff0c;双面显示动态修改缩放与透明度 代码 <template><div class"app"><div ref"canvesRef" class"canvas-wrap"></div>…

软件测试|SQL中的UNION和UNION ALL详解

简介 在SQL&#xff08;结构化查询语言&#xff09;中&#xff0c;UNION和UNION ALL是用于合并查询结果集的两个关键字。它们在数据库查询中非常常用&#xff0c;但它们之间有一些重要的区别。在本文中&#xff0c;我们将深入探讨UNION和UNION ALL的含义、用法以及它们之间的区…

应对 DevOps 中的技术债务:创新与稳定性的微妙平衡

技术性债务在DevOps到底意味着什么&#xff1f;从本质上讲&#xff0c;这是小的开发缺陷的积累&#xff0c;需要不断地返工。它可能由多种原因引起&#xff0c;例如快速交付新功能的压力&#xff0c;这可能会导致团队不得不牺牲代码的整洁和完善。但这些不完整的小代码&#xf…

湖南大学-数据库系统-2017期末考试解析

【写在前面】 这是2017年的卷子&#xff0c;复习备考的时候做了并与同学校对了答案。答案仅供参考。这张难度不大&#xff0c;比起前一年的并没有增加什么知识点。 一、 单选题&#xff08;每小题 2 分&#xff0c;共 20 分&#xff09; 1 、数据库的概念模型独立于&#xff…

这个门禁监控技术,好用好用极了!!

随着科技的迅猛发展&#xff0c;门禁监控技术在各行各业得到了广泛的应用。门禁监控系统不仅提高了安全性&#xff0c;还为管理人员提供了更为便捷和高效的管理手段。 客户案例 企业大厦安全管理 深圳某高层企业大厦面临着人员流动频繁、安全隐患较多的挑战。通过部署泛地缘科…