何谓离线?在阿里搜索工程体系中我们把搜索引擎、在线算分、SearchPlanner等ms级响应用户请求的服务称之为“在线”服务;与之相对应的,将各种来源数据转换处理后送入搜索引擎等“在线”服务的系统统称为“离线”系统。商品搜索的业务特性(海量数据、复杂业务)决定了离线系统从诞生伊始就是一个大数据系统,它有以下一些特点:

1. 任务模型上区分全量和增量

 

1)全量是指将搜索业务数据全部重新处理生成,并传送给在线引擎,一般是每天一次。这么做有两个原因:有业务数据是daily更新;引擎需要全量数据来高效的进行索引整理和预处理,提高在线服务效率。

 

2)增量是指将上游数据源实时发生的数据变化更新到在线引擎中。

 

3)性能方面有较高要求。全量需要极高吞吐能力,确保数以亿计的数据可以在数小时内完成。增量则需要支持数万TPS秒级的实时性,还需要有极高的可用性。

 

2. 需要支持多样化的输入和输出数据源,包括:Mysql,ODPS,TT等各种数据库和消息队列作为输入,搜索、Ranking、图、推荐等各种引擎作为输出。

 

3. 需要提供一定能力的数据处理能力,例如多表Join、UDTF支持等,以方便搜索业务的开发和接入。

 

在后续的段落中我们会看到离线系统架构围绕着这些特点,针对搜索业务的变化,做出的各种演进和发展。

 

  • Maat:分布式任务调度平台,基于Airflow发展而来,主要改进点是调度性能优化、执行器FaaS化、容器化、API及调度功能扩展等四个部分,在保持对Airflow兼容的基础上,大幅提升性能,提高了稳定性。 一个离线任务的多个Blink job会通过Maat建立依赖关系并进行调度。

  • Bahamut:执行引擎,是整个离线平台的核心,负责离线任务的创建、调度、管理等各种功能,后文会详细介绍。

  • Blink:Flink的阿里内部版本,在大规模分布式、SQL、TableAPI、Batch上做了大量的优化和重构。离线平台的所有计算任务都是Blink job,包括stream和batch。

  • Soman:UI模块,与Bahamut后端对接,提供任务信息展示、状态管理等可视化功能,也是用户创建应用的开发业务逻辑的主要入口。

  • Catalog: 存储表信息管理,提供各种数据源表的DDL能力,负责离线平台存储资源的申请、释放、变更等各种功能。

  • Hippo:阿里搜索自研的分布式资源管理和任务调度服务,类似于Yarn,提供Docker管理能力,主要服务于在线系统。

  • Swift:阿里搜索自研高性能分布式消息队列,支持亿级别消息吞吐能力,存储后端为HDFS,存储计算分离架构。

  • 搜索离线数据处理是一个典型的海量数据批次/实时计算结合的场景,搜索中台团队立足内部技术结合开源大数据存储和计算系统,针对自身业务和技术特点构建了搜索离线平台,提供复杂业务场景下单日批次处理千亿级数据,秒级实时百万TPS吞吐的计算能力。离线平台目前支持了集团内200多个不同业务线的搜索业务需求,大幅提高了业务迭代的效率,成为搜索中台的重要组成部分。很快离线平台还会在阿里云上与Opensearch/ES结合,为集团外客户提供高可用、高性能的搜索离线数据处理能力。在不远的将来离线平台将会逐渐拓展到推荐和广告的数据处理场景,有着广阔的应用场景,一个涵盖搜索/推荐/广告体系的SARO(Search Advertisment and Recommandation Offline)平台会逐步成型。