配送特征平台

一、业务背景

现实世界中,一个运单的完成过程是从用户下单开始到用户收餐骑手离客为止,需经历一系列室内室外的场景——用户下单,系统派单,骑手室外骑行到目的地然后下车步行到商家,等待取餐驻留室内,商家出餐,骑手取餐离店后步行上车,室外骑行到用户目的地,下车步行上楼送餐,驻留室内等待用户收餐,最后用户收餐骑手离客。
那么特征平台就是上述过程中涉及到骑手的基础数据沉淀下来,进行数据挖掘提供特征数据,来辅助算法平台更好的完成骑手派单,配送费的计算以及倾斜等场景。

二、整体架构与服务拆分

整体架构

特征平台的整体架构需要兼顾下面的基本规范。

  • 流程标准化:从数据输入,加工计算到数据输出做了一个流程的标准化。
  • 数据分层,将共性沉淀下来。
  • 特征兜底,降低风险。

流程图.jpg

基于定制的基本规范,服务的整体架构如上图所示,共分为 7 层:

  1. 数据源层:主要有线上的业务表运单表、骑手表等,以及离线hive表
  2. 数据层:将数据进行清洗和转换,最后形成实时特征与离线特征的宽表。
  3. 计算层:通过标准化的 SQL 对宽表数据进行计算。
  4. 存储层:存储计算层输出的特征数据。
  5. 服务层:提供统一的RPC特征读取服务,将存储层数据统一输出应用层应用。
  6. 应用层:主要有 ETA 时间预估服务、分单引擎服务、骑手管控服务以及供需服务。
  7. 管理系统:负责特征元数据从创建到销毁的整个生命周期的管理,以及特征的计算口径,数据源,存储格式的管理,特征默认值。
  8. 监控报警:包括对特征生产链路服务依赖的监控,以及对特征数据质量的可视化,通过人工巡检的方式发现数据问题。

服务拆分

  1. 特征读取服务:抽象统一的特征读取的RPC接口。
  2. 实时特征写入服务:提供基于RPC,HTTP,MQ的实时特征数据写入。
  3. 离线特征写入服务:依赖大数据平台,将离线数据在线化操作。
  4. 特征管理平台:特征元数据管理。

三、特征抽象
数据源模型(feature_source):抽象特征生产源,来定义特征生产数据源的元数据模型。如下

{
    "product_id": "",
    "feature_ids": ""
}
复制代码

特征使用业务方模型(feature_business):抽象使用特征的业务方,来定义业务方的元数据模型。如下

{
    "business_id": "",
    "feature_ids": ""
}
复制代码

特征元数据(feature):通过抽象特征的共性,来定义特征的元数据模型。如下

{
    "feature_id": "",
    "feature_name_space": "",
    "object_id":"", // 特征实体ID(骑手,店铺,用户等维度),骑手的特征就是骑手id
    "feature_val": "",
    "expire_time": "",
    "update_time": "",
    "source": ""
}
复制代码

特征数据源,特征业务方以及特征三者之间的关系:

feature_source vs feature (1:n)
feature_business vs feature (1:n)

四、实时特征

介绍实时特征从数据源到存储的整个流程。

流程图-实时特征计算.jpg
上图是整个实时特征从数据源到存储的整个流程,整个架构可以分成4层,

  1. 特征管理平台:负责特征从创建到销毁的整个生命周期的管理,以及关于整个特征管理其他业务抽象的管理,包括特征实时生产任务,特征离线生产任务管理等。
  2. 任务调度平台:使用开源的airflow分布式调度平台,通过抽象特征生产任务共性,定制自定义的DAG任务,实现实时特征的秒级或者分钟级的生产,将生产的特征数据写入到MQ。
  3. flink数据同步任务:通过flink任务实时同步线上业务的业务数据到索引宽表与明细宽表。
  4. consumer服务:提供RPC,MQ,HTTP的特征写入,将特征数据按照特征管理平台定制的统一数据模型写入到存储中。

五、离线特征

介绍离线特征从数据源到存储的整个流程。

流程图-实时特征.jpg

上图是整个离线特征从数据源到存储的整个流程,整个架构可以分成4层,

  1. 任务调度平台:这里的任务调度平台是指大数据的离线任务调度平台,负责离线任务调度的整个生命周期。
  2. 特征管理平台:负责特征从创建到销毁的整个生命周期的管理,以及关于整个特征管理其他业务抽象的管理,包括特征实时生产任务,特征离线生产任务管理等。
  3. 特征抽取任务:抽象的统一的特征抽取任务,依赖特征管理平台的配置信息,生成标准的hive sql,并将抽取结果数据写入到特征共享表(特征宽表)。
  4. 特征聚合任务:将特征宽表的数据根据特征管理平台的配置,生成特定业务方的特征数据。
  5. 特征同步任务:将聚合任务生成的结果数据,通过离线数据在线化的工具,将特征数据加载到线上存储。

六、特征算子的思考

举个例子:有一个骑手历史完单量的特征a(T-1),以及另一个骑手当天完单量的实时特征b。现在我们需要一个骑手完单量的特征c,c = a + b。对于这种情况我们可以复用a,b两个特征来计算c特征。
对于上述情况,就可以设计通用的算子来进行特征的复用,只要简单提供一些配置项,就可以在不写代码的情况下完成计算和存储流程。比如上面的骑手完单量特征的表达式算子,可以支持下面这些形式的“计算”:

流程图-特征算子.jpg

七、相关资料

人工智能在线特征系统中的生产调度
人工智能在线特征系统中的数据存取技术
美团外卖特征平台的建设与实践
美团配送实时特征平台建设实践
一套实时特征系统的迭代过程

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享