阿里妹导读:搜索引擎是阿里的10年+沉淀,具有很高的技术/业务/商业价值。1688很多场景都借助了搜索中台的能力,基于此,以1688主搜为例介绍搜索全链路知识点,希望对你有所借鉴,有所启发。

一、整体架构

搜索引擎分为数据源聚合(俗称dump)、全量/增量/实时索引构建及在线服务等部分,以Tisplus为入口经由Bahamut(Maat进行工作流调度)->Blink->Hdfs/Swift->BuildService->Ha3->SP->SW等阶段对客户提供高可用/高性能的搜索服务。其中数据源聚合在tisplus平台和Blink平台完成,Build service和Ha3在suez平台完成,SP和SW通过drogo进行部署。具体架构图如下:

二、Tisplus

1688目前有spu、cspu,company,buyoffer和feed等引擎及offer离线在tisplus运维,该平台主要ha3和sp的搭建和维护,大体架构如下:

在日常维护中偶尔会遇到数据源产出失败的问题,主要是由于数据源表权限过期及zk抖动等原因。性能方面,在集团内搜索中台团队的引入Blink Batch模型后,dump执行时间被缩短,具体指标如下(以buyoffer引擎为例):

在tisplus平台,离线dump的入口如下:

DAG数据源图示例:

下面主要说下离线dump数据源处理流程,包括Bahamut、Maat和数据输出。

2.1 Bahamut——数据源图处理

Bahamut是离线数据源处理的组件平台,将web端拼接的数据图通过jobManager翻译成可执行的sql语句。目前Bahamut包含的组件有四类,分别是:

  1. 数据输入:datasource(支持tddl和odps)
  2. KV输入:HbaseKV(Hbase数据表)
  3. 数据处理:Rename(数据字段重命名),DimTrans(使用1对多的数据聚合),Functions(简单字段处理),Selector(字段选择),UDTF(数据逻辑处理),Merge(数据源聚合),Join(left join)
  4. 数据输出:Ha3(Hdfs/swift)

对数据源的处理过程,描述如下:

by 敬明

而对于Bahamut->blink过程可以陈述如下:

其中,Bahamut将任务拆解后扔给JobManager进行逻辑节点到物理节点的转换,形成若干节点后再归并组合成一个完整的SQL语句,例如上图Kratos_SQL就是一个增量Join的完整SQL,配合资源文件一起通过BayesSDK提交任务。此外,平台增加了一个弱个性化配置的功能,可以通过个性化配置来实现控制某个具体任务的并发度、节点内存、cpu等等参数。

2.2 Maat——分布式流程调度系统

Maat是基于开源项目Airflow再次开发的分布式流程调度系统,具有可视化编辑及通用的节点类型,Drogo化部署,分集群管理及完善的监控&报警机制等优点。

关于Airflow及其他工作流系统,对比陈列如下:

eed引擎为例,maat调度页面如下:

当任务错误时,可以通过该页面进行“将指定步骤置fail”然后重跑全量任务,也可以通过查看某个步骤的log获悉任务失败原因。

2.3 Ha3 doc——数据输出

经过上述步骤后,最后将数据以xml的形式(isearch format)输出到HDFS/Pangu路径(全量)和Swift Topic(增量),引擎全量时通过HDFS路径获取全量doc文件进行build,增量时直接从swift topic中获取增量更新消息更新到引擎中。离线平台通过一个服务为Tisplus引擎模块提供表信息的查询等功能,以下是一个HA3表包含的信息:

{"1649992010": [{"data": "hdfs://xxx/search4test_st3_7u/full", // hdfs路径"swift_start_timestamp": "1531271322", //描述了今天增量的时间起点"swift_topic": "bahamut_ha3_topic_search4test_st3_7u_1","swift_zk": "zfs://xxx/swift/swift_hippo_et2","table_name": "search4test_st3_7u", // HA3 table name,目前与应用名称一样"version": "20190920090800” // 数据产出的时间}]
}

三、Suez

经过上述步骤后,数据以xml(isearchformat)的格式产出到Hdfs和swift,然后通过在suez_ops平台的离线表中选择数据类型为zk并配置相应的zk_server和zk_path即可。

然后由Build service完成全量/增量/实时索引的构建,然后分发到Ha3在线集群提供服务。

suez的离线表构建逻辑如下:

suez在线服务逻辑如下:

下面针对离线(buildservice)和在线(ha3)进行简述:

**3.1 Build Service——索引构建
**

Build Service(简称BS)是一套提供全量、增量、实时索引的构建系统
build_service总共有五类角色:

  • admin :负责控制整体build流程,切换全量增量状态,发起定期任务,相应用户的控制请求;
  • processor :负责数据处理,将用户的原始文档转化为轻量级可build的文档形态;
  • builder :负责构建索引;
  • merger :负责索引整理;
  • rtBuilder :负责在线索引的实时构建。

其中admin、processor、builder、merger是以二进制程序的方式运行在hippo上,rtBuilder是以lib的形式提供给在线部分使用。

一个完整的全量+增量过程会产生一个generationid,该generation会经历 process full-> builder full -> merger full ->process inc -> builder inc ->merger inc的过程,其中处于inc过程后,builder inc和merger inc会交替出现。1688在ha3升级之前经常会出现 build tooslow问题就是因为分配到了坏节点或builderinc/merger inc阶段卡住。

3.2 Ha3——在线搜索服务

Ha3是一套基于suez框架的全文检索引擎,提供丰富的在线查询子句,过滤子句,排序子句,聚合子句且支持用户自定义开发排序插件。服务架构如下:

1688主搜引擎由一组Qrs、searcher和summary组成:

  • Qrs的作用是:对输入的查询作解析与校验,通过后把查询转发给相应的;searcher,收集合并searcher返回的结果,最后对结果做一些加工并返回给用户。其中也可以通过写meger插件干预合并规则;
  • searcher:可以是文档的召回服务(searcher),也可以是文档的打分与排序服务(ranker)或者是文档的摘要服务(summary);
  • summary:1688主搜将searcher和summary分离,summary集群只提供取商品详情的服务。

qrs/searcher/summary等机器通过挂载到cm2提供服务,比如qrs有对外cm2,可以对SP等调用方提供服务,searcher和summary有对内cm2,可以接收从qrs来的请求并完成召回排序取详情等服务。

一次调用方的query服务,要经由qrs->query解析->seek->filter->rank(粗排)->agg(聚合)->rerank(精排)->extraRank(最终排)->merger->summary(取详情)的过程,具体描述如下:

其中,ReRank和ExtraRank由Hobbit插件及基于Hobbit的战马插件完成,业务方可以根据自身需求开发战马特征并指定各特征权重得到商品的最终分。

四、Drogo

drogo是基于二层调度服务Carbon的无数据服务的管控平台,1688的SP服务及QP代理服务均部署在该平台。

1688搜索链路主要服务平台部署情况简述如下:

原文链接
本文为云栖社区原创内容,未经允许不得转载。

10年+,阿里沉淀出怎样的搜索引擎?相关推荐

  1. lucene 增量 全量 更新索引_10年+,阿里沉淀出怎样的搜索引擎?

    阿里妹导读:搜索引擎是阿里的10年+沉淀,具有很高的技术/业务/商业价值.1688很多场景都借助了搜索中台的能力,基于此,以1688主搜为例介绍搜索全链路知识点,希望对你有所借鉴,有所启发. 一.整体 ...

  2. 10 万阿里人都爱用的网红工具,语雀如何“用保护钱包的技术在保护文档安全​”?...

    受访者 | 袁锋(花名:苏千) 采访者 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 在新型冠状病毒疫情下,国内不少企业选择了远程办公的模式.上班族们感叹终于可以"一台电脑.一部 ...

  3. 免费下载!《阿里工程师的自我修养》公开10位阿里大牛解决问题的思维方式

    简介: 今天,阿里技术公布一波阿里P8.P9技术大牛的思维模型,将他们的思维模式呈现出来.你可以在阿里资深专家职业生涯的真切感悟中,找到应对危机的最佳方法.<阿里工程师的自我修养>现已正式 ...

  4. 致敬各位10年阿里的前端开发

    很巧合,我在认识了两位同是10年工作经验的阿里前端开发小伙伴,不但要向前辈学习,我有时候还会选择另一种方法逗逗他们,拿了网上一道经典面试题,可能我连去阿里面试的机会都没有,但是我感受到了一次面试10年 ...

  5. 【云计算的1024种玩法】10分钟轻松设置出 A+ 评分的 HTTP/2 网站

    前言 其实 HTTP/2 应该是 2015 年的老话题了(2015 年 5 月 14 日 HTTP/2 协议正式版的发布),但是 2018 年都到了很多网站依旧没有使用,作为新一代互联网协议,HTTP ...

  6. 如何用 C++ 在 10 行内写出八皇后?

    bhuztez ,正在找工作 ... 韦易笑. RednaxelaFX. 小白菜. 钢盅郭子 等 517 人赞同 既然有人邀请我了,我就来了,解法参考 如何简化求解八妃问题的代码? - 知乎用户的回答 ...

  7. Java黑皮书课后题第10章:*10.10(Queue类)10.6节给出一个Stock类。设计一个名为Queue的类用于存储整数。像栈一样,队列保存元素。在栈中,元素后进先出。队列中元素先进先出

    10.10(Queue类)10.6节给出一个Stock类,设计一个名为Queue的类用于存储整数 题目 程序 破题 代码 Test10.java Test10_Queue.java UML 题目 程序 ...

  8. Windows 10配置阿里云DNS

    Windows 10配置阿里云DNS 首先需要打开阿里云官方镜像站:https://developer.aliyun.com/mirror/找到DNS服务器地址,再进行后续操作. 1.打开Window ...

  9. 本科毕业生10大高薪专业出炉,IT行业赢麻了

    据环球网报道,现在大学毕业生转行率高达80%! 非常后悔!有不少粉丝向播妞倾诉,曾经以为读了大学就能找到体面的工作,实际上是掉入了天坑专业,成了现实版孔乙己. 大学生找不到对口好工作,似乎已成常态.选 ...

最新文章

  1. 一位编程15年的大佬:我的OpenCV开发高手成长之路
  2. 李开复对话彭特兰:AI不是单打独斗,应避免AI冷战
  3. 结巴分词和自然语言处理HanLP处理手记
  4. java 反射 new区别_JAVA的newInstance()和new的区别(JAVA反射机制,通过类名来获取该类的实例化对象)...
  5. 二分查找的递归与非递归!
  6. 音视频技术开发周刊 | 134
  7. 微信小程序一定要用https的理由,小程序使用HTTPS链接分析
  8. vue2学习计划1-3 浏览器跨域问题(mock-api)
  9. 如何为Kalman Studio编写T4模板
  10. 通信原理大作业--基于MATLAB的数字通信系统仿真设计
  11. sh_gamit报错:error reading station a priori constrains
  12. python爬取拉勾网_python 爬取拉勾网实战
  13. ios禁止屏幕旋转的几种方法
  14. 人力资源分析思维以及有必要学习数据分析吗?
  15. 谷歌浏览器关闭系统代理后断网问题
  16. 按键扫描——74HC164驱动(一)
  17. Deep Depth Completion of a Single RGB-D Image(深度像素补全)全文机器翻译
  18. 宅家羊毛党是怎么做到月入上万的
  19. java IO数据流
  20. Error: Your CLT does not support macOS 11.6问题处理

热门文章

  1. python3编程入门先学什么_自学编程入门,先学什么语言好?
  2. python struct pack一个数组_Python中struct.pack的一个疑问
  3. java获取spring注解的实体_Spring 注解实体类中非数据库字段属性
  4. python增量更新数据_Python标准库——加密
  5. word总积分怎么算计算机,Word文档怎么计算积分
  6. 计算机系统结构实验报告Linux,计算机操作系统体系结构实验报告.doc
  7. java 反射机制 视频_【视频笔记】Java反射机制笔记
  8. python处理时间和日期_python时间和日期的处理
  9. mysql崩溃_mysql崩溃原因分析
  10. linux ns级定时器_linux用户空间获得ns纳秒级时间示例