跳过正文
  1. 文章/

配送特征平台

4 分钟· ·
haifeiWu
作者
haifeiWu
北京后端开发者,热爱分布式系统、中间件与 AI 工程,正在深入学习 Go 与 Rust。
目录

📌 本文原发布于掘金社区:配送特征平台

一、业务背景
#

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

二、整体架构与服务拆分
#

整体架构
#

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

  • 流程标准化:从数据输入,加工计算到数据输出做了一个流程的标准化。
  • 数据分层,将共性沉淀下来。
  • 特征兜底,降低风险。
流程图.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)

四、实时特征
#

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

流程图 (1).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。对于上述情况,就可以设计通用的算子来进行特征的复用,只要简单地提供一些配置项,就可以在不写代码的情况下完成计算和存储流程。比如上面的骑手完单量特征的表达式算子,可以支持下面这些形式的“计算”:

流程图 (1).jpg

七、相关资料
#

人工智能在线特征系统中的生产调度

人工智能在线特征系统中的数据存取技术

美团外卖特征平台的建设与实践

美团配送实时特征平台建设实践

一套实时特征系统的迭代过程

相关文章