搜索引擎新架构:与SQL不得不说的故事

阿里巴巴搜索引擎HA3架构

1.HA3架构分为在线和离线两部分
• 在线是一个传统的2层服务架构,分别叫做QRS和search。QRS负责接受用户请求,做一些简单处理之后把请求发给下面的search节点,search节点负责加载索引并完成检索,最终由QRS汇集各个search节点的结果并返回给用户。
• 离线部分分为两个环节,一个环节是数据的预处理,其核心的工作是把业务和算法维度的数据加工成对索引友好的大宽表,另一个环节是索引的构建,它的主要挑战是既要支持大规模的索引更新,也要保障索引是实时性。
2.HA3的特点主要有三个:
• 第一个是高性能的服务架构;
• 第二个是丰富的索引能力;
• 第三个是金字塔形的算法工作框架
这些特点是HA3在阿里巴巴集团内风靡非常有利的武器,但随着这几年业务的发展,这一架构逐渐成了我们再往前进一步的拦路虎。
image.png

搜索引擎HA3核心挑战

具体体现在2个方面,一个是深度学习的渗透,另一个是数据维度的膨胀。
1. 深度学习,
它的使用范围,从早期的精排,逐步扩散到了粗排、检索,比如向量索引的召回。深度学习的引入本身也会带来2个问题:一个是深度模型的本身的网络结构通常比较复杂,对执行流程和模型大小都有非常高的要求,传统的pipeline工作模式是非常难以有效支持的;另外一个问题是模型和特征数据的实时更新也对索引的能力提出了很大的挑战,在线上百亿级别的更新是一个常态。

2. 数据维度的膨胀,以电商领域为例,原来考虑的维度主要是买家、卖家这两个维度,现在得考虑位置、配送、门店、履约等等,同样是配送,有3公里5公里送的,有同城的,还有跨城的,像这样的例子还有很多。而搜索引擎离线的工作流程会把各个维度的数据join成一张大宽表,这会导致数据更新的规模成笛卡尔积的形式展开,在新场景下,无论是更新的量级还是时效性上都很难满足
image.png

搜索传统解决方案

就是根据业务数据维度的特点,把引擎分拆成过多个不同的实例,然后在业务层通过查询不同的引擎实例来得到结果。比如说饿了么的搜索引擎就有门店、商品等维度的数据,为了解决门店状态的实时变化对索引的冲击,可以部署两个搜索引擎实例,一个用来搜索合适的门店,另外一个用来搜索合适的商品,由业务方先查门店引擎再查商品引擎来完成。但这个方案有一个明显的缺点,那就是符合用户意图的门店非常多的时候,门店的数据需要从门店引擎序列化到业务方再发送给商品引擎,这里序列化的开销非常大,往往需要对返回的门店数目做一定截断,而截断的门店中很可能有更匹配用户意图的,这样对业务效果也会有比较大的影响。特别热门的商区,不管是对用户还是卖家,都是非常大的损失。
image.png

HA3 SQL新的解决方案

以数据库SQL的执行方式来重塑搜索,核心要点有3条。
**1.将原来大宽表的模式扩展
成支持多表,每个表的索引加载、更新、切换做到相互独立,把原来需要离线join的操作变成在线查询时join。 ** 
2.彻底抛弃原有的pipeline的工作模式,以DAG图化的方式来执行,并将搜索的功能抽象成一个个独立的算子,与深度学习的执行引擎进行统一。
3.以SQL的方式来表达图化的查询流程,这样不光用户使用起来简单,也可以复用SQL生态的一些基础功能。举个例子,电商个性化搜索技术里面,把商品、个性化推荐、深度模型等信息分别放到不同的表中,配合上灵活的索引格式,比如倒排索引、正排索引、KV索引等等,加上执行引擎本身可以支持并行、异步、编译优化等技术,不管是内存还是CPU都能得到有效利用,很轻松地就能解决业务上的各种问题。

image.png

搜索引擎HA3新的架构

主要分为三层:
• 最底下一层是searchRuntime的Framework,其核心职责主要有索引管理和服务调度,其中索引部分主要是加载的策略和查询接口,如计算存储分离的支持、实时索引构建的支持等等;服务调度主要处理的是进程的failover和服务的更新,即通常意义的面向终态的二层调度,主要的特点是以统一的方式做进程的重启、程序的更新、灰度的发布等等。
• 中间这一层是DAG引擎层,其核心内容有两个,一个是执行引擎本身,另一个就是算子。这里的执行引擎主要有三部分的能力,包括单机内图的执行,分布式的通信和深度学习,通过算子间的互联,我们能够很方便的把搜索的查询流程和深度学习进行对接,实现深度学习在搜索的各个阶段的渗透,如向量检索、粗排和精排。算子部分的抽象是这轮架构抽象最重要的一环,把原来面向过程式的开发变成了独立功能的开发,一方面要求算子本身的功能要尽可能内聚,另一方面算子级别的管理也更有利于功能的复用和发布。
• 最上面一层是SQL查询层,核心的工作有两部分,一个是SQL解析,另外一个是查询优化。由于DAG的流程可以任意定制,如何让用户更方便地构建图、更方便的进行算子间的协作会是很关键的问题,简单、通用是个必须考虑的,这也是我们首选SQL的原因;另外一个原因是业界SQL的执行器,通常包含逻辑优化和物理优化两个环节,这个对一个复杂的DAG的执行提供了非常好的抽象,我们也利用了这个机制来进行了很多细致的优化,包括图的变换、算子合并、编译优化等等。

image.png

实践案例

1. 饿了么
外卖搜索场景的例子,假设用户在搜索框里面输入了一个关键词"牛肉面",搜索引擎后台的流程大体如下:通过用户的位置信息找到现在还在营业的、并且能卖牛肉面的门店,每个门店给出最匹配的商品,最后返回最符合用户需求的门店与商品。在这里,门店营业情况如何、配送能力是否足够、对应的商品有没有卖完,这些数据都需要实时更新的,而在大规模的数据里面快速找到匹配的信息,也涉及到丰富的索引技术,比如空间索引、倒排索引、向量索引等等,最后门店和商品的排序也要依赖深度模型的参与,用户的偏好、优惠信息、距离都是很重要的因素。原有的搜索流程是基于elasticsearch通过分别查询门店和商品维度的表来实现的,但会有查询结果截断和深度学习接入困难的问题,而在HA3上这些问题都非常容易解决,迁移到新架构后,不光业务的长尾问题消失了,而且性能还提升1倍,给后续算法的迭代留下了非常大的空间,这里性能的提升主要来自于索引结构和查询优化上的一些工作。
2.淘宝本地生活的服务
其核心的诉求也是希望在淘宝的搜索里面引入本地服务的概念,如天猫超市和盒马的小时达的业务,通过将门店和商品维度的数据单独分拆,不光更新能力提升了两个数量级,还复用了饿了么搜索的很多功能。
3.钉钉的钉盘搜索
业务上需要在传统的搜索上支持钉盘文件的权限控制,由于文件和权限这两个维度数据的规模都非常大,而且更新比较频繁,通过HA3SQL在线的实时本地join,非常低延迟的解决了这个问题。
4.内部监控系统
原来是基于开源技术druid构建的,但业务规模上来逐步不能满足需求了,经常出现异常需要手动处理的情况,我们在HA3的基础上扩展了时序数据索引,借助SQL并行执行的能力,latency有了明显下降,稳定性也得到了质的提升。

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

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

相关文章

面试90%都会翻车的高可用+高并发+负载均衡架构设计 !

很多人面试的时候被问到一个让人特别手足无措的问题:你的系统如何支撑高并发?对于一个公司而言,“为什么要高可用”关于负载均衡架构设计你了解多少?大多数同学被问到这个问题压根儿没什么思路去回答,不知道从什么地方…

数据湖 VS 数据仓库之争?阿里提出大数据架构新概念:湖仓一体

作者 |关涛、李睿博、孙莉莉、张良模、贾扬清(from 阿里云智能计算平台) 黄波、金玉梅、于茜、刘子正(from 新浪微博机器学习研发部) 编者按 随着近几年数据湖概念的兴起,业界对于数据仓库和数据湖的对比甚至争论就…

ruoyi-vue 跳转页面

文章目录1. 通过router-link2. $router.push1. 通过router-link <el-table-column label"条款类型" align"center"show-overflow-tooltip><template slot-scope"scope"><router-link :to"/monitor/child " class"…

小心!你家的 IoT 设备可能已成为僵尸网络“肉鸡”

图源 | 视觉中国受访者 | 吴铁军 记者 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;2020年&#xff0c;全球遭受了新冠疫情的袭击&#xff0c;人们的生产生活受到了极大的影响。在网络世界中&#xff0c;僵尸网络作为多年来的主要威胁形式之一&#xff0c;并…

服务发现技术选型那点事儿

简介&#xff1a; 相对于 2016 年&#xff0c;现在我们最少有十多种的方式能实现服务发现&#xff0c;这的确是个好时机来进行回顾和展望&#xff0c;最终帮助我们进行技术选型与确定演进方向。 作者 | 张羽辰(同昭) 引子——什么是服务发现 近日来&#xff0c;和很多来自传统…

ruoyi-vue 管理有跳转页面正常,普通用户跳转页面404

背景&#xff1a;新增子菜单&#xff0c;通过主菜单跳转进入&#xff0c;不需要显示子菜单&#xff0c;用admin配置跳转路径正常&#xff0c;普通用跳转404 分析&#xff1a;admin跳转页面正常是因为对超级管理员有特殊处理&#xff0c;跳转权限校验。其他用户都需要校验 解决…

SpringCloud 应用在 Kubernetes 上的最佳实践 —— 高可用(弹性伸缩)

作者 | 三未 前言 弹性伸缩是一种为了满足业务需求、保证服务质量、平衡服务成本的重要应用管理策略。弹性伸缩让应用的部署规模能够根据实时的业务量产生动态调整&#xff0c;在业务高峰期扩大部署规模&#xff0c;保证服务不被业务冲垮&#xff1b;在业务低谷期缩减部署规模…

PyFlink + 区块链?揭秘行业领头企业 BTC.com 如何实现实时计算

大家好&#xff0c;我们是 BTC.com 团队。2020 年&#xff0c;我们有幸接触到了 Flink 和 PyFlink 生态&#xff0c;从团队自身需求出发&#xff0c;完善了团队内实时计算的任务和需求&#xff0c;搭建了流批一体的计算环境。 在实现实时计算的过程中&#xff0c;我们在实践中…

当数据中台遇见云原生,智领云看到企业数据转型新方向

编辑 | 宋慧 出品 | CSDN云计算 头图 | 智领云2021年合作伙伴沙龙现场图 2021年5月14日&#xff0c;智领云2021年合作伙伴沙龙在北京维景国际大酒店隆重召开。本次沙龙以“数据驱动 智领未来”为主题&#xff0c;来自全国各地的合作伙伴、企业用户以及媒体代表等100多位嘉宾出…

随时随地查看业务数据,DataV移动端新功能上新

简介&#xff1a; 随时随地监控业务数据&#xff0c;及时对焦管理策略&#xff0c;让数据推动业务。 在有手机就能活的今天&#xff0c;还只在电脑面前看报表吗&#xff1f; BOSS们每天处理无数的消息和邮件&#xff0c;还要四处奔波开会&#xff0c;没有办法时时刻刻在电脑前…

MaxCompute full outer join改写left anti join实践

简介&#xff1a; ods层数据同步时经常会遇到增全量合并的模型&#xff0c;即T-1天增量表 T-2全量表 T-1全量表。可以通过full outer join脚本来完成合并&#xff0c;但是数据量很大时非常消耗资源。本文将为您介绍在做增量数据的增加、更新时如何通过full outer join改写lef…

数据中台 VS 传统大数据平台,这 8 点区别要了解

作者 | 彭锋 宋文欣 孙浩峰来源 | 大数据DT头图 | 下载于视觉中国传统大数据平台和数据仓库是数据中台的数据来源&#xff0c;建设数据中台是为了更好地服务于业务部门。下图展示了信息化系统、数据仓库、传统大数据平台、数据中台之间的关系&#xff0c;其中的箭头表示数据的主…

腾讯云~Kafka 监控 Kafka Eagle 图形化版本

文章目录1. 安装包下载2. 开启kafka JMX3. 安装JDK&#xff0c;配置JAVA_HOME4. 上传安装包、解压5. 配置Kafka-eagle环境变量6. 配置Kafka_eagle7. 配置ke.sh8. 启动Kafka_eagle9. 防火墙10. 访问Kafka eagle1. 安装包下载 官网地址&#xff1a;EFAK 本文使用3.0.1版本 2. …

维大杀器来了,未来云上服务器或将实现无人值守

云原生时代下&#xff0c;企业的IT运维面临架构复杂化、业务需求多样化和运维数据海量化等挑战&#xff0c;如何能够实现精准告警、异常智能诊断、根因定位、异常预测和异常自动修复&#xff0c;已成为企业数字化转型的急迫需求。 9月26日&#xff0c;阿里巴巴高级技术专家滕圣…

一家化纤工厂的数字化转型之路

在数字经济的浪潮中&#xff0c;零售业被公认为是数字化程度最高的行业&#xff0c;而与此形成鲜明对比的中国传统制造业&#xff0c;大部分还处于观望状态。当前&#xff0c;国内外形势正在发生深刻复杂的变化&#xff0c;越来越多的制造企业希望通过业务数字化与智能化&#…

java安全编码指南之:异常处理

异常简介 先上个图&#xff0c;看一下常见的几个异常类型。 所有的异常都来自于Throwable。Throwable有两个子类&#xff0c;Error和Exception。 Error通常表示的是严重错误&#xff0c;这些错误是不建议被catch的。 注意这里有一个例外&#xff0c;比如ThreadDeath也是继承自…

变局之际,聊聊物联网的过去、现在和未来

来源 | 鲜枣课堂头图 | 下载于视觉中国大家好&#xff0c;我是小枣君。前两天&#xff0c;我去上海参观了 IOTE物联网展。通过在现场的见闻&#xff0c;以及和专家们的交流探讨&#xff0c;我深刻感受到&#xff0c;物联网行业已经来到了一个重要的十字路口&#xff0c;将会发生…

130 秒揭秘 EDAS 3.0 如何平滑应对突发流量高峰,为您的业务保驾护航

云原生时代下&#xff0c;企业的IT运维面临架构复杂化、业务需求多样化和运维数据海量化等挑战&#xff0c;如何能够实现精准告警、异常智能诊断、根因定位、异常预测和异常自动修复&#xff0c;已成为企业数字化转型的急迫需求。 9月26日&#xff0c;阿里巴巴高级技术专家滕圣…

不重新打包,只修改 jar 包中的某个文件、某个类

用到的工具&#xff1a;WinRAR 特别注意&#xff1a;不能使用 7z&#xff0c;等其他打包工具&#xff08;或者如果测试其他打包工具可以用&#xff0c;可以补充留言&#xff09; 问题&#xff0c;一个已经打好的 jar 包&#xff0c;我只修改了其中一个类&#xff0c;如何替换。…

Spark On MaxCompute如何访问Phonix数据

简介&#xff1a; 如何使用Spark On MaxCompute连接Phonix&#xff0c;将Hbase的数据写入到MaxCompute的对应表中&#xff0c;目前没有对应的案例&#xff0c;为了满足用户的需求。本文主要讲解使用Spark连接Phonix访问Hbase的数据再写入到MaxCompute方案实践。该方案的验证是使…