导读: 随着大数据的快速发展,大数据应用已经融入各行各业。在很多场景中得到了商业化实践。今天和大家分享下58同城商业站内DMP平台架构与实践,介绍如何在大数据量的情况下进行实时数据挖掘并为在线广告系统应用提供物料等数据支持。
主要内容包括:
DMP 其实是一个数据管理平台,是把分散的多方数据进行整合纳入统一的技术平台,并对这些数据进行标准化和细分,让用户可以把这些细分结果推向现有的互动营销环境里的平台。
业界代表性的产品有腾讯广点通和阿里达摩盘。它们主要提供创建细分人群、分析用户画像、种子用户群体拓展(lookalike)、再营销、分析投放管理、流量采买和第三方数据接入等功能。
下面和大家分享下58商业对DMP平台的需求。
1. 业务需求
58商业产品技术部主要负责整个58的商业变现,最核心的OKR其实是如何将有效的流量进行变现。
我们需要把点击广告的用户特征、上下文特征和我们自己的广告库特征进行加工整合后,再提供给在线广告推荐的触发、排序和装饰。其次还要支撑其他部门的商业营销、商家平台以及微聊系统。
2. 特征需求
特征需求主要是特征的挖掘和特征的使用。
特征挖掘需满足:
特征使用应提供如下功能:
1. 商业DMP定位
首先,结合我们的需求,介绍下商业DMP定位,这里介绍的商业DMP主要是指我们商业站内的,主要提供特征挖掘和特征数据服务的能力。
对于开发者,特征挖掘平台提供了简洁、易用的开发SDK,屏蔽实时计算、批量计算、海量存储、高并发服务、各底层分布式系统部署等细节。提供TB级别(N天)行为数据挖掘和秒级别延时实时特征挖掘,支持特征挖掘实验、水平扩展。
对于特征数据服务平台,提供丰富的特征数据(TB级别)和元数据管理,能够提供在线和离线特征数据服务。对于在线,提供稳定的在线特征数据服务,支撑在线推荐系统;对于离线,提供灵活的多维查询,支持按人群特征进行营销活动。
2. 平台业务架构
从数据的产生到标签的加工再到业务应用,在这完整的数据流中,DMP平台其实是起着承上启下的作用,可以把它看做是一个数据工厂,对数据特征进行统一、清洗、加工、转化、提炼,再对外提供相应的数据服务。DMP平台主要包括特征挖掘平台、dmp service、标签元数据管理、监控等模块。
3. 平台逻辑架构
平台逻辑架构主要分为数据层、存储层、计算层、服务层和监控层。
数据层: 提供Kafka、ESB、HDFS、Api等多种异构数据源,通过importer层将数据进行统一的清洗转化,对下形成统一的数据源,从而屏蔽底层的异构数据源。
存储层: 我们实现了存储接口、序列化模块、压缩模块。由于在线推荐特征挖掘提供基于KV键值存储就能满足需求,故底层存储主要提供Redis和自研的wtable等。
计算层: 提供了storm、spark、sparkstreaming、flink等多种计算引擎。在operator模块提供让特征挖掘用户自己实现对应的SDK即可,简便高效,同时对于用户来说屏蔽掉了异构计算。
服务层: 主要提供IDMapping、路由、实验、process四个模块。IDMapping主要是为了打通数据孤岛;路由模块主要是解决流量分发问题;实验模块主要是进行分流实验;process模块主要是提供业务解耦能力。
监控层: 对服务、任务、存储等进行监控,对多环节快速发现定位并解决问题。
4. 平台功能
平台目前提供行为引入、特征存储、特征挖掘和特征服务四大模块。
行为引入: 提供ID-Mapping服务、实验分流、统一Behavior结构,支持Behavior结构实时离线复用和兼容,支持实时批量导出Behavior数据。
特征挖掘: 支持实时挖掘和批量挖掘,并支持在线加工,统一特征和属性结构,为解析用户行为提供相应的SDK。
特征存储: 支持随机和批量的高并发读写,提供TB级别的特征存储能力,同时提供实时特征和历史特征的融合,支持多版本的特征迭代。
特征服务: 对外提供统一的访问接口,权限控制,元数据管理和实验分流。
5. 元数据管理
商业DMP标签体系主要分为C端标签和B端标签两类。C端主要是流量相关的标签,可以给予人口属性、行业标签、地理位置等做进一步细分。B端主要是广告主相关的标签。
6. 特征挖掘流程
特征挖掘主要分实时特征挖掘和离线特征挖掘两大块。我们提供了Importer(对数据源的解析)和Operator SDK(融合数据挖掘的接口),可以对用户提供SDK开放接口,达到一处编写,多处执行的能力,并且支持插件化部署,利于服务解耦和维护。
7. 计算框架
计算框架大致分NODE、Module和Operator三部分:
8. 实时计算
① 遇到的问题
② 解决方案
③ 定制化监控
我们的监控平台主要结合Flink,Spark自带监控进行一个补充,主要针对task运行,重试次数和失败次数的监控和一些其他维度的监控,通过告警层,配置告警相关规则,将监控的异常信息及时通知告警人并处理。
9. 存储系统选型
针对上述对比结合58内部以及业界常见KV存储查询,我们选择Redis和wtable这两种KV存储系统。针对要求高性能高并发读写的场景我们选用redis,针对并发读性能要求高,并发写性能相对较低的场景则选用wtable。
10. 存储优化
① 读写合并优化
由于实时离线特征数据量太大,数据库的读写次数几乎等于流量日志的数量。我们做了如下优化:
优化结果:超时概率从之前的3%左右降到了0.1%以下。
② 离线实时特征拆库
由于之前离线实时特征库为同一个库,大量离线写入会对在线读请求有影响,造成服务超时及离线数据导入时间较长。针对此现象我们将离线特征单独存储,并将数据导入方式从单条导入修改为bulkload导入的方式。
优化结果:离线数据导入由3小时降至0.5小时,同时DMP对外查询服务保证在50ms之内。
③ 耗时优化
遇到问题:
优化方法:
优化结果:服务调用耗时从原来的各服务调用时间之和变成各服务调用耗时最大值。
11. DMP实验平台
如图所示为DMP分流实验架构参照的是google分层实验框架,整个流程大致如下:
1. 在线推荐系统二手车Feed流
Feed流是实时的个性化推荐,从而实现用户体验和商业价值的提升。这就要求我们能快速捕捉到用户的行为变化并提取用户特征。DMP需要能对用户行为数据的采集清洗转换到特征加工等达到秒级加工能力,从而保障Feed流系统的实时性。
2. 人群服务
人群服务主要是给营销产品提供人群圈选的功能,用来做智能营销的场景,主要包括创建人群包和通过人群来查询相关的用户即基于多个维度的标签属性筛选分析用户特点。目前创建人群包主要支持标签组合和自定义上传两种模式。
创建人群的具体流程如下:
创建完人群包之后,即可根据创建的人群包进行相关的人群圈选功能。具体流程如下:
在整个查询过程中,通过人群包进行人群圈选直接查询es的性能会有一定延迟,为此我们进行了架构的优化和调整:
未来我们希望可以借助商业DMP的能力,进一步为公司赋能提效:
1. 构建OneService
通过服务升级,能够对外提供统一的用户画像服务、标签管理、统一开放API、人群管理。
2. 引入Doris
引入Doris计算引擎,支持人群包更实时和灵活的多维度分析功能。
今天的分享就到这里,谢谢大家。
作者介绍:
林鹏,58同城大数据架构师
58同城,商业产品技术部大数据架构师,2019年加入58同城。主要负责58同城站内DMP平台和客户数据建设的项目管理和研发工作,对实时计算、OLAP分析有一定研究,曾先后在百度、去哪、小米任职。
本文来自 DataFunTalk
原文链接:
领取专属 10元无门槛券
私享最新 技术干货