zoukankan      html  css  js  c++  java
  • 阿里如何实现秒级百万TPS?搜索离线大数据平台架构解读读后感

    阅读文章:阿里如何实现秒级百万TPS?搜索离线大数据平台架构解读

    文章网址:https://mp.weixin.qq.com/s?__biz=MzIzOTU0NTQ0MA==&mid=2247488245&idx=1&sn=1c70a32f11da7916cb402933fb65dd9f&chksm=e9292ffade5ea6ec7c6233f09d3786c75d02b91a91328b251d8689e8dd8162d55632a3ea61a1&scene=21#wechat_redirect

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

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

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

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

    离线平台技术组件结构,其中部分组件的简介如下:

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

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

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

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

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

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

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

    一个离线任务从数据源到产出引擎服务数据的整个流程,流程图分为三层:

    (1)  数据同步层:将用户定义的数据源表的全量和增量数据同步到Hbase内部表,相当于源表的镜像。这个镜像中我们包含cf和d两个列族,分别存储数据库的镜像和Daily更新的数据。

    (2)  数据关联计算层:按照数据源中定义的各种关系,将不同维度的数据关联到一起,把数据送到自定义的UDTF中进行处理,产出引擎所需的全量和增量数据。

    (3)  数据交互层:提供全量和增量数据的存储信息,与在线服务build模块进行交互。

    基于业务表和数据处理组件,用户可以开发出一个描述离线处理流程的业务逻辑图,我们称之为Business Graph。Bahamut作为离线平台的执行引擎,会按照Business Graph->APP Graph->Job Graph->(Blink Job/Maat Job)的顺序把一个业务描述转化为可执行的离线任务,具体如下:

    (1) Business Graph->APP Graph:在这个环节中我们主要有2个重要的工作:

    ①  正确性校验:根据BG中的节点信息,校验节点间连接的合法性(例如两个输入源节点不能直接连接)、节点配置的正确性(数据库配置/ODPS的配置是否正确)、Schema推导是否正确。

    ②  任务分层优化:为了用Blink Stream模式来统一完成全量和增量的执行,我们需要将输入源数据存入内部Hbase,直接使用Blink维表Join功能来完成数据的连接。于是在节点遍历过程中遇到Join、Merge组件时,需要在AppGraph中插入一个内部的HTable节点,将Merge或者Join上游的数据同步进入Hbase。

    (2) APP Graph->Job Graph:Graph是一个Blink/Maat任务的配置DAG,其中每个节点包含配置信息,可以在后续的过程中直接转化为计算或者调度任务。

    (3)  Job Graph->Blink/Maat Job:遍历JobGraph,调用Translator将JobGraph转换为Blink/Maat的任务代码。引入JobGraph的目的是将底层的计算引擎与计算任务描述解耦。

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

  • 相关阅读:
    变量和简单的数据类型
    homebrew 取消每次安装检查更新
    小程序设置全屏
    linux 文本换行
    删除mac上的缓存文件
    laravel admin 中监听后台管理数据变化
    laravel快速添加观察者
    软件安装
    跨域数据
    将spring mvc 发布到服务器端
  • 原文地址:https://www.cnblogs.com/lijing925/p/11039874.html
Copyright © 2011-2022 走看看