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


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

文章插图
 
阿里妹导读:搜索引擎是阿里的10年+沉淀,具有很高的技术/业务/商业价值 。1688很多场景都借助了搜索中台的能力,基于此,以1688主搜为例介绍搜索全链路知识点,希望对你有所借鉴,有所启发 。
一、整体架构搜索引擎分为数据源聚合(俗称dump)、全量/增量/实时索引构建及在线服务等部分,以Tisplus为入口经由Bahamut(Maat进行工作流调度)->Blink->Hdfs/Swift->BuildService->Ha3->SP->SW等阶段对客户提供高可用/高性能的搜索服务 。其中数据源聚合在tisplus平台和Blink平台完成,Build service和Ha3在suez平台完成,SP和SW通过drogo进行部署 。具体架构图如下:
10年+,阿里沉淀出怎样的搜索引擎?

文章插图
 
二、Tisplus1688目前有spu、cspu,company,buyoffer和feed等引擎及offer离线在tisplus运维,该平台主要ha3和sp的搭建和维护,大体架构如下:
10年+,阿里沉淀出怎样的搜索引擎?

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

文章插图
 
在tisplus平台,离线dump的入口如下:
10年+,阿里沉淀出怎样的搜索引擎?

文章插图
 
DAG数据源图示例:
10年+,阿里沉淀出怎样的搜索引擎?

文章插图
 
下面主要说下离线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)
对数据源的处理过程,描述如下:
10年+,阿里沉淀出怎样的搜索引擎?

文章插图
 
by 敬明
而对于Bahamut->blink过程可以陈述如下:
10年+,阿里沉淀出怎样的搜索引擎?

文章插图
 
其中,Bahamut将任务拆解后扔给JobManager进行逻辑节点到物理节点的转换,形成若干节点后再归并组合成一个完整的SQL语句,例如上图Kratos_SQL就是一个增量Join的完整SQL,配合资源文件一起通过BayesSDK提交任务 。此外,平台增加了一个弱个性化配置的功能,可以通过个性化配置来实现控制某个具体任务的并发度、节点内存、cpu等等参数 。
2.2 Maat——分布式流程调度系统
Maat是基于开源项目Airflow再次开发的分布式流程调度系统,具有可视化编辑及通用的节点类型,Drogo化部署,分集群管理及完善的监控&报警机制等优点 。
关于Airflow及其他工作流系统,对比陈列如下:
10年+,阿里沉淀出怎样的搜索引擎?

文章插图
 
eed引擎为例,maat调度页面如下:
10年+,阿里沉淀出怎样的搜索引擎?

文章插图
 
当任务错误时,可以通过该页面进行“将指定步骤置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” // 数据产出的时间} ]}


推荐阅读