【一文解读】阿里自研开源核心搜索引擎 Havenask简介及发展历史

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
OpenSearch LLM智能问答版免费试用套餐,存储1GB首月+计算资源100CU
智能开放搜索 OpenSearch向量检索版,4核32GB 1个月
简介: 本次分享内容为Havenask的简介及发展历史,由下面五个部分组成(Havenask整体介绍、名词解释、架构、代码结构、编译与部署),希望可以帮助大家更好了解和使用Havenask。

一、Havenask整体介绍

1、Havenask简介

Havenask是阿里巴巴自主研发的一款大规模分布式实时检索引擎,目前集团内的几乎所有的核心业务的搜索业务都是基于Havenask构建的。如为大众所熟知的淘宝和天猫商品搜索、菜鸟的订单物流搜索、优酷的视频搜索、高德的地理位置搜索,等等。而大家之所以选择Havenask,是因为与其他引擎相比,它在工程引擎性能、时效性、高可用上都有优异表现。如Havenask可支持万亿级别数据的实时检索,可以支持双十一百万QPS、TPS的交易洪峰,还能进行多机房的部署,具有较高的可用性等等。

image.png


2、Havenask应用场景

Havenask主要适用于检索场景和智能搜索场景,特别是海量数据检索、高性能检索等场景,智能搜索场景主要包括向量检索场景、商品智能搜索场景等。在性能上对比其他开源的搜索引擎进行测试,在70亿订单场景下,无论是按订单主键查询,或是按用户搜索词或标签的过滤查询,又或是按用户指定时间(如半年或是两年等历史订单)的查询,Havenask的QPS都会有百分之十几甚至十倍以上的提升,耗时可降至1/5,甚至1/10。

image.png

二、Havenask名词解释

Havenas相对复杂,掌握其专有的名词有助于大家更好地了解Havenask。

在线的系统是指提供在线检索服务的几个系统。离线系统是指能够提供索引构建的分布式系统。Swift是一些高性能的消息中间件。此外,如全量、增量、实时、索引分词、Term等。

图片 1.png


三、Havenask架构

Havenask架构有两种形式。

1、读写统一

即数据的写入和查询均由同一个节点完成,但又与其他系统不完全相同,其WAL是通过内置的消息中间件Swift实现的,这样就能避免随replica越多,数据写入变慢的问题。这种架构较为简单,其时效性性会更高,基本上可以实现read your write。


2、读写分离

即将索引构建流程独立形成一个分布式的索引构建的服务,这样在线系统会更加稳定。读写分离模式具备以下四个特点:


  • 首先,其索引构建不会影响在线服务,反而会更加稳定,特别是对于一些索引构建消耗较大的场景,如向量检索场景。向量索引构建会消耗大量的计算资源。如果在读写统一架构下,它会影响在线服务的稳定性。


  • 同时,读写分离可以支持全量数据的导入,可节省固定的时间,而读写统一模式数据的导入基本上都是通过API推入来完成的,当导入的数据量较大时,就需要花费很多的时间进行数据的推送,但在读写分离的模式下,其数据导入可通过调整离线资源直接从分布式存储系统中将全量的数据快速构建成索引,可以大大节省数据导入的时间。


  • 另外,它对每个表索引构建都是按照独立的流程进行管理的,因此,其尤其适合需要定期做索引重建的算法场景。如模型或行为数据的更新,我们都会对数据重新进行一次全面的预测,换言之,要重新做一次索引的构建。这种独立的索引构建可以分任务进行管理,可以进行快速回滚,这种版本之间的快速切换可以保证日常索引构建变更的稳定性。


  • 独立的索引构建流程,其资源可以单独进行控制,这样就可以通过单独的调整离线资源,以支持更高的数据写入。


四、Havenask代码结构

Havenask的代码结构相对清晰,其所有的核心代码都在aios目录下,与aios目录同级的是一些编译脚本、辅助工具及第三方的依赖。在aios目录下,我们主要关心四个主要的模块,即执行引擎sql、核心索引库indexlib、分布式构建服务build service及Swift消息中间件。前面的模块都是Havenask依赖的基础组件。


五、编译与部署

Havenask的编译与部署都是通过镜像的方式实现的。阿里云提供了两个镜像源供用户下载所需镜像,一个是Docker hub,另外一个是阿里云镜像。如果用户在国内,可以通过阿里云镜像下载,速度更快。编译Havenask之前,可以通过git克隆或代码包下载的方式,将代码下载到本地。目前,Havenask容器在Windows和Mac上还有一些适配问题。


1、镜像

  • 镜像:

Docker hub:

havenask/ha3_dev:1.0.0

havenask/ha3_runtime:1.0.0


  • 阿里云镜像:

registry.cn-hangzhou.aliyuncs.com/havenask/ha3 dev:1.0.0

registry.cn-hangzhou.aliyuncs.com/havenask/ha3_runtime:1.0.0

2、编译

  • 下载代码:

cd~

git clone git@github.com:alibaba/havenask.git


  • 创建容器:

cd ~/havenask/docker/havenask

docker pull registry.cn-hangzhou.aliyuncs.com/havenask/ha3_dev:latest

./create_container.sh  registry.cn-hangzhou.aliyuncs.com/havenask/ha3_dev:latest


  • 进入容器:

.//sshme


  • 编译代码:

cd ~/havenask

./build.sh


  • 单独编译某个目标:

bazelbuild //aios/sql:ha_sql--config=havenask


创建容器之后,进入容器,直接执行编译的脚本,可以编译出整个项目,也可以通过bazel的命令编译某个具体的目标。在执行bazel命令时,要指定Havenask配置选项。以下是一段代码演示:将代码下载到本地机器上后,首先进入docker Havenask目录下,执行create_container指令创建编译容器,通过ssh命令进入容器,再进入原代码所在目录。如果需要整体编译,可直接执行build.sh命令,如果需要编译某个具体的目标,可以通过bazel命令直接编译。


3、部署

  • 创建容器:

cd ~/havenask/docker/havenask

docker pull registry.cn-hangzhou.aliyuncs.com/havenask/ha3_runtime:latest

./create_container.sh  registry.cn-hangzhou.aliyuncs.com/havenask/ha3_runtime:latest


  • 进入容器:

.//sshme


  • 启动服务:

/ha3_install/hape start havenask


  • 创建表:

/ha3_install/hape create table -t in0 -s /ha3_install/hape_conf/example/cases/normal/in0_schema.json -p 1


  • 操作数据:

/ha3_install/sql_query.py --query "insert into in0 (createtime,hits,id,title,subject)values(1,2,4,'测试', '测试’)”

/ha3_install/sql_query.py --query "select * from in0"


目前,无论是单机版或是分布式版,Havenask的部署都是通过hape脚完成的。在部署之前,需要先创建可以运行hape脚本的容器,阿里云推荐用户使用Havenask中的create_container脚本,当然,也可以直接通过docker命令创建容器。容器创建完成之后,通过SSH脚本命令进入容器,然后通过hape命令启动集群,创建表,最后通过数据操作的封装脚本插入数据和检索数据。


六、结尾

具体Havenask简介及发展历史讲解视频可以通过链接查看,欢迎各位开发者使用。

视频链接:https://developer.aliyun.com/live/253624?spm=a2c6h.13262185.profile.13.3713ee42mZuRGt


关注我们:

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

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

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

钉钉扫码加入 Havenask 开源官方技术交流群:

1715594790746.png


目录
相关文章
|
6月前
|
SQL 运维 搜索推荐
《揭秘,阿里开源自研搜索引擎Havenask的在线检索服务》
Havenask是阿里巴巴智能引擎事业部自研的开源高性能搜索引擎,深度支持了包括淘宝、天猫、菜鸟、高德、饿了么在内几乎整个阿里的搜索业务。本文针对性介绍了Havenask的在线检索服务,它具备高可用、高时效、低成本的优势,帮助企业和开发者量身定做适合业务发展的智能搜索服务。
83600 138
|
6月前
|
存储 消息中间件 搜索推荐
【前沿技术】 阿里开源搜索引擎Havenask的消息系统
Havenask是阿里巴巴智能引擎事业部自研的开源高性能搜索引擎,深度支持了包括淘宝、天猫、菜鸟、高德、饿了么在内几乎整个阿里的搜索业务。本文针对性介绍了Havenask的消息系统--Swift,它是一个设计用于处理大规模的数据流和实时消息传递的高性能、可靠的消息系统。
60225 3
|
3月前
|
机器学习/深度学习 编译器 PyTorch
自研分布式训练框架EPL问题之吸引社区参与共建如何解决
自研分布式训练框架EPL问题之吸引社区参与共建如何解决
|
6月前
|
SQL 开发者 索引
【深入浅出】阿里自研开源搜索引擎Havenask变更表结构
本文介绍了Havenask的表结构变更,包括表结构简介、全量构建流程和变更表结构三个部分。表结构由schema配置,字段类型包括INT、FLOAT、STRING等,索引有倒排、正排和摘要索引。全量表变更会触发全量构建,完成后自动切换,但直写表不支持直接变更。变更过程涉及使用hape命令更新schema并触发全量build。最后还有全量构建的流程图和具体操作步骤。
61934 2
|
6月前
|
SQL 调度 Swift
【深入浅出】阿里自研开源搜索引擎Havenask日志查询
本次分享内容为Havenask的日志查询,文章包含了具体查询步骤和举例、实操演示,希望可以帮助大家更好的使用Havenask。
55362 0
|
6月前
|
SQL JSON 资源调度
【深入浅出】阿里自研开源搜索引擎Havenask集群扩备份
本次分享内容为Havenask的集群扩备份,共2个部分组成(集群备份简介、 集群备份实践),希望可以帮助大家更好了解和使用Havenask。
66280 0
|
6月前
|
存储 消息中间件 分布式计算
重磅开源!阿里巴巴分布式核心原理,成功登顶GitHub周榜!
分布式系统架构是当今互联网企业的重要基础设施,它能够支撑海量用户并发访问和亿级数据量的超大规模业务系统。阿里巴巴作为互联网巨头,在分布式架构方面有着丰富的经验与成果(文末有免费领取方式!)
|
存储 Kubernetes 架构师
干货!阿里「大型分布式技术手册」现已开源
其实当你真正去使用这些不同的架构方法去解决问题,然后在实践中观察它们的优劣,这确实会是一种很好的成长方式,但这是一个漫长的过程,而且没有哪个大厂会花时间让你自己去探索,所以这些经验又要从哪儿来呢? 答案是:前人的经验。既然别人已经总结了一套通过实践得来的经验,那我们为什么不去用呢?将别人的知识学会再变为自己的,才叫厉害。
|
自然语言处理 运维 监控
阿里云中间件发展历程和开源现状 | 学习笔记
快速学习阿里云中间件发展历程和开源现状
阿里云中间件发展历程和开源现状 | 学习笔记
|
存储 人工智能 缓存
2022云栖精选—云原生驱动数据抽象 与缓存加速开源技术发展
顾 荣 南京大学 计算机科学与技术系 计算机软件新技术国家重点实验室(南京大学
473 0
2022云栖精选—云原生驱动数据抽象 与缓存加速开源技术发展