【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

流量运营数据产品最佳实践——美团旅行流量罗盘

  • 2020-02-27
  • 本文字数:5222 字

    阅读完需:约 17 分钟

流量运营数据产品最佳实践——美团旅行流量罗盘

背景

互联网进入“下半场”后,美团点评作为全球最大的生活服务平台,拥有海量的活跃用户,这对技术来说,是一个巨大的宝藏。此时,我们需要一个利器,来最大程度发挥这份流量巨矿的价值,为酒旅的业务增长提供源源不断的动力。这个利器,我们叫它“流量罗盘”。


我们首先要思考几个问题


  1. 流量都来自哪些入口;

  2. 本地场景、异地场景的流量差异如何运用好;

  3. 如何挖掘出适合不同品类的流量场景;

  4. 是否能让不同群体的用户得到合理的引导。


所以,我们先要给流量罗盘做一个能够快速对比和衡量流量价值的来源分析功能,来覆盖流量的灵活细分及组合方式,继而找到酒旅流量增长的契机 ,为优化流量应用场景提供建议。



图 1 产品结构图


从图 1 可以看出,流量罗盘就是将用户、场景、流量来源进行充分组合,封装了流量来源分析方法,这样一来所有 C 端的 PM(产品经理)和运营都可以随时随地完成对流量来源的分析,继而迅速落实到流量优化的实际工作中,大大提高了工作效率。


以上数据组合每个环节的需求关键点在于:


  1. 满足丰富的场景组合、灵活且能够随时满足酒旅业务的场景扩展;

  2. 流量来源可以是任何一个页面或控件,甚至是组合,来源的组合要高效易用。

挑战

在建设流量罗盘过程中,主要面临以下几点挑战:


  1. 维度种类较多且元素丰富。清洗后所到达主题层的与业务直接相关的 UV 流量,每天增量在千万级别。同时数量众多的维度和丰富的元素,使得总体数据量呈指数级别膨胀。考虑用户使用体验,分析结果反应时间需要控制在<=3s(天粒度)和 <=5s(月粒度)。

  2. 维度的可扩展性。现有基础维度是 12 个,在此基础上做维度的扩展主要从三个方面着手。第一,添加新的正常维度;第二,新增已有维度的衍生维度,例如城市等级;第三,在已有维度中增加新元素,该元素可以与已有元素存在交集,例如酒店业务的两种不同品类共享一部分门店,这时候流量和交易需要双算。业务发展较快,要在不修改已有数据模型的前提下,快速迭代添加新的维度。

  3. 入口来源的灵活性。其实入口来源属于上文中维度里面的一种,之所以在这里单独说明,是因为它非常特殊。它要求我们做到在每个版本中所有的新加入口,都可以立即分析其效果。

  4. 在查询引擎中,我们在选择时间维度类型时,选择按周或按月,各个指标的值都是计算日均值(单日数据去重,跨天不去重),单日的指标值数据都是针对用户去重的,直接按周按月查询是按周去重和按月去重的,这就不符合按周按月指标的计算逻辑。

解决思路

建设流量罗盘的时候,我们既要满足新的流量分析应用需求,解决以往的短板和痛点,也要有一定的业务和技术前瞻性,给未来留有改进的空间。针对前文描述的问题,有以下几点思考:


  1. 在应用接入选型 Kylin 的基础上,考虑到其维度数量的限制,数据输入的时候,可以提前对维度进行剪枝。例如酒店常有的本异地场景,观察角度具有多个层次,我们可以只采用最低层次粒度输入,然后通过后台的关系规则匹配关联,间接得到更多丰富场景的计算数据。

  2. 同样是为了解决之前低扩展的问题,尽量将整个数据链条层次化,功能模块要避免高耦合的数据逻辑。

  3. 想要满足入口来源的灵活配置,首先埋点要规则统一,然后抽象该规则至入口维度中,最后搭配指标的联合计算得到。

解决方案

明确思路之后,我们开始了流量罗盘制作的实践,包括流量日志采集和抽取、来源归因、主题模型建设、构建多维应用层,以及应用后台和前端的开发。

体系架构


图 2 流量罗盘体系架构


如图 2 所示:


  • A 层(也称 ODS 层),包含美团 App 的大搜日志、页面流量日志、模块事件日志以及描述埋点内容的信息日志。

  • 公共维度,其中重要的流量入口维度、页面维度都是从具有统一规则的埋点标记日志中,抽象形成的维度。

  • B3 层(酒旅基础明细层),通过对 A 层的抽取转换,初步形成只含酒旅业务所需的基础流量日志。

  • B2 层(酒旅多维模型层),对已有的基础层数据和公共维度的轻加工,扩展出业务常用的维度信息,例如页面类型、商家门店、产品、城市,以及平台等。

  • B1 层(主题宽表层),主题宽表层主要是对多维模型层的聚合计算,包括多个复杂业务口径的输出、少数维度的深加工,以及来源入口的增加,保证数据的一致性。

  • App 层,该层是针对各自的流量应用(流量罗盘)设计的,满足该产品应用所需且具有一定扩展容量的聚合模型结构。

  • 视图层,作为 App 层与 Kylin cube 的缓冲层,依靠其本身视图的特性,能够很好地解决顶层扩展、查询延时、资源分配,以及表意理解等多个问题。

  • cube 层,每个 Kylin cube 是由单个视图与多个维度的雪花组合,输出计算数据给罗盘后台服务。

  • 后台服务层,包含查询引擎和配置模块两部分的内容。处理前端的查询请求。

  • 权限层,对各个业务线分平台和终端控制权限。

  • 前端展示层,与用户交互并提交用户的查询请求。

具体方案

公共维度

从图 2 可以了解到,公共维度从 B3 层一直贯穿到视图层,最终形成顶层 Cube。公共维度的主要作用是将抽象的埋点规则、业务规则,以及各项标签模块化,能够被各层数据直接或间接调用,从而保证数据的一致性。


图 3 举例说明的是,页面类型维度、页面明细维度,以及流量入口维度的来源。



图 3 公共维度来源图


如图 3 所示:


  • 页面类型维度,抽象于业务方对页面的定义、对 DAU 和意向等口径的定义(文档日志);

  • 页面明细维度和流量入口维度,来源于平时规范化的埋点方案文档日志,明确标示业务页面范畴和业务入口的定义。

主题宽表层

主题宽表层的主要作用是在满足一定就绪时效和查询效率的前提下,尽可能地向下游输出丰富维度、标准业务口径、具有强扩展性的数据模型。


这里举其中一个例子来回应下前文提出的维度扩展性问题。


场景:如何在不更改主题模型结构和让下游无感知的前提下,满足多品类(相互重叠)的添加和扩展?


针对该场景,我们采用具有强扩展性的 Json 串作为该维度内容,同时封装该复杂的口径处理逻辑,使其具有全局复用性和扩展性,并保证口径的唯一。



图 4 口径处理模块


上面的部分讲解了主题层是如何设计的,接下来将具体描述下为了达到所设计的模型,我们的 ETL 从(酒旅)流量日志开到上层主题过程中,是如何流转处理的。


因为流量产品主题和订单产品主题的较为类似,故以流量产品主题为例,表示基础层到事实层再到主题层的一般流程。



图 5 主题模型计算流程


如图 5 所示,数据链路中的各个节点功能之间相互独立:


  • 日志到事实是保留基础流量信息的前提下,提取和分区主要流量页面,同时附加 A/B Testing 策略维度;

  • 用户维度的输入是用户,输出是包含但不限于新老、常驻等具有用户标签属性的扩展维度内容;

  • 标准口径模块的功能是统一管理口径处理逻辑、统一输出口径标签维度,具有全局适配性;

  • 从浏览事实到产品流量主题,除了保留了原有的信息外,就是增加了很多需要二次计算的补充扩展维度;

  • 归因计算模块,包括 tag 标记归因、页面归因和模块事件归因,根据不同的场景匹配不同的归因方式,得到不同的入口来源;

  • 对产品流量主题进行流量入口的加工,产出具有易于分析的入口主题,两者的就绪时间相差较大,所以分步进行。

数据应用层

应用层的功能是向系统后台提供方便的、直接满足用户需求的查询通道,本文采用的是 Kylin cube。这样系统后台可以根据约定好的查询逻辑,直接调用 kylin 接口,得到数据。


所以,本文认为衡量应用层和后台系统对接的效果有三个方面:


  • 后台查询数据的逻辑简单。

  • 屏蔽业务逻辑。

  • 业务扩展,查询逻辑不变或者较少更改。



图 6 应用层计算流程


如图 6 所示,为了满足业务需求、用户查询体验,以及较好地与下游对接,做了几方面工作:


  1. App 层分为两部分,不分来源和区分来源,因为两者就绪时间不同,在数据一致性的前提下,采用先到先展示的方案;

  2. 在 App 层和 Cube 层之间,加入中间视图层,是为了隔离业务变动、口径变动,以及数据更改对下游使用者的影响,同时也整体增强了扩展能力;

  3. Cube 创建过程中的维度优化和参数设置,目的主要是为了提高 cube 查询和 cube 生产的效率;

  4. 因为 Kylin 本身的原因,Cube 也与视图一一对应,其中曝光和点击采用模糊计算,经过研究对该类指标采用模糊方案,性价比最大。

后台服务层

后台服务提供查询引擎和配置模块。


由于酒旅各个业务线关注的来源入口的不统一,各个入口支持的本异地、品类等维度的不同以及各个入口能支持的指标不一致,造成了各业务线的差异性,流量罗盘针对这种差异性,设置了针对不同的业务线和平台的各个入口分别进行配置。包含入口的指标计算都会基于来源配置的内容生成查询服务。来源入口的配置包含(不限于)以下几方面的内容:


  • 来源入口对指标的支持。

  • 来源入口各个指标对品类(其中酒店包含高星、经济连锁、海外等)的支持。

  • 来源入口各个指标对本异地的支持。


配置模块也是基于权限控制的,配置模块是分业务线和平台配置的,只有具有对应权限的用户才能增加和更改来源入口的配置。只有在配置模块配置的入口信息才会展示在对应业务线对应平台的入口维度选择中。其中,配置模块交互如图 7 所示:



图 7 配置模块交互


前端展示登录用户具有权限的业务线和平台的入口配置信息。当增加一条配置信息时,配置服务会从入口信息维表中读取对应业务线和平台下的所有可配置的入口信息,配置完入口对应支持的指标及各指标支持的基本维度信息后会将配置信息存入入口配置表。当入口的状态修改为在线状态后,在查询引擎的入口维度中才可以展示此入口维度。


查询模块负责根据用户提交的查询请求中的维度信息,执行查询,返回前端结果。用户提交的请求中如果包含入口信息,会查询配置模块中对应入口配置的指标中是否支持对应维度的查询,若不支持将不对此维度进行限制。如果前端提交的查询请求中不包含入口信息,查询的指标为各业务线设定的默认的指标信息。


查询引擎也会受权限的控制。此模块根据业务线、平台和终端三部分共同配置权限,只有具有某业务线下某个平台和某个终端的权限时,用户方可进行查询服务。其中查询请求流程如图 8 所示:



图 8 查询服务流程图


当用户选择的时间维度是按周或按月的查询时,各个指标的值是计算日均值(对于单日数据去重,跨天不去重的逻辑),单日的指标值数据都是针对用户去重的,直接按周按月查询是周去重和月去重的,这就不符合按周按月指标的计算逻辑导致数据查询结果存在差异性。为了解决数据准确性和按周按月查询数据量过大导致的查询效率的问题,将 Master-Worker 的多线程的设计模式应用于按周和按月的指标查询中。其中任务拆分指标计算的过程如图 9 所示:



图 9 任务拆分指标计算


如图 9 所示:


  • 用户在选择维度之后提交每个指标计算的总任务。

  • Master 将总任务简单的按时间维度拆分成对每个周或是每个月为维度求日均值的查询任务放到任务队列中。

  • Worker 进程队列从任务队列中获取任务、执行任务并将任务结果提交给 Master 的结果集。

  • Master 将各个子任务的指标计算结果进行汇总返回。


目前,涉及到的指标都相对简单,之后如果涉及到较复杂的衍生指标,也可以将指标的计算拆分成对基础指标的计算,计算完成后再将基础指标的计算结果合并计算衍生指标的值。

评价指标

整套数仓设计和实现是一个需要长期持续优化迭代的过程,所以需要一些具有客观评价系统好坏的指标。


评价指标可以分为两类,一类是,对业务支撑的深度、广度,以及响应的快慢程度。


  • 业务的深度和广度,可以从业务对模型的需求总量来侧面衡量;

  • 响应的快慢,可以从需求发起到需求接受,再到需求完成的各阶段时间来衡量。


另一类,需要从数据模型本身出发,考量模型的稳定性、生产查询效率、数据质量,以及可扩展能力。


  • 数据效率(生产和查询),包含数据最晚(平均)就绪时间、数据最大(平均)执行时长,以及最大(平均)多维查询反馈时间;

  • 数据质量,包含每月平均数据问题产生数,细分可以有数据缺失、数据合理性问题、数据一致性问题等;

  • 数据占用资源,例如整体数据占用存储资源多少、每天占用计算资源多少。

总结

流量罗盘在美团点评酒店旅游各业务线已经得到了全面的应用,并收获了大量好评和建议。本文从底层数仓总纲和产品层面对流量罗盘进行分析,目前流量罗盘已经在线运营了 2 个季度,后续将会持续优化和迭代。

展望

由于魔方的查询引擎、统一建模工具和起源已经相对成熟,后面产品的查询引擎方面会接入魔方(关于“魔方”的介绍可以参考之前的博客文章《大圣魔方——美团点评酒旅BI报表工具平台开发实践》)的查询引擎(筋斗云),配置模块会接入魔方的统一建模工具,将起源应用于统一指标口径,关于筋斗云、魔方建模工具、起源以及改版后的流量罗盘产品敬请期待!改版后流量罗盘产品架构如图 10 所示:



图 10 产品架构图

作者简介

  • 冰,美团平台数据中心高级研发工程师,2014 年毕业于北京航空航天大学,2015 年加入美团,负责酒旅事业群的数据仓库建设。

  • 瑞芳,美团平台数据中心 BI 工具后台开发工程师,2016 年毕业于北京工业大学,2017 年加入美团点评数据中心,长期从事 BI 工具开发工作。

  • 夷山,美团点评技术专家,现任 TechClub-Java 俱乐部主席,2006 年毕业于武汉大学,先后就职于 IBM、用友、风行以及阿里。2014 年加入美团,长期致力于 BI 工具、数据安全与数据质量工作等方向。


2020-02-27 10:50790

评论

发布
暂无评论
发现更多内容

Spring Boot「19」WebApplicationInitializer源码分析

Samson

Java spring 学习笔记 10月月更 spring-web

壳牌公司利用数字孪生推动绿色工厂计划和氢能经济

雨果

数字化转型

主导未来的前 5 大数据科学趋势,你知道几个?

雨果

数据科学 DaaS数据即服务

数字孪生与未来城市建设

雨果

数字孪生

软件工程师的核心竞争力是什么?

老张

职场成长 核心竞争力

腾讯升级云原生产品布局 助力企业数字化转型更进一步

科技热闻

如何查看 Series、DataFrame 对象的数据

二哈侠

Python serialVersionUID 10月月更

倒计时3天!云栖大会龙蜥操作系统峰会最新议程一览

OpenAnolis小助手

开源 操作系统 倒计时 云栖大会 龙蜥社区

Pandas的介绍及 Series、 DataFrame的创建

二哈侠

pandas pyhton 10月月更

Spring Boot「20」从 DispatchServlet 开始一个请求的处理过程

Samson

Java spring 学习笔记 10月月更 spring-web

拳头产品|海泰虎讯,新一代安全即时通讯系统

电子信息发烧客

精品方案|基于医疗机构的突发公共卫生多点触发监测预警系统 实现疫情精准防控

电子信息发烧客

让你的 Runner 可视化,使用 Prometheus + Grafana 实现极狐GitLab Runner 可视化

极狐GitLab

DevOps Grafana Prometheus runner 极狐GitLab

数字化转型如何成为增长和创新的工具

雨果

数字化转型

埃森哲《2022中国企业数字化转型指数》: 中国企业数字化进程五年间稳步推进,17%企业成领军者

雨果

数字化转型

C#泛型协变和逆变概念学习

IC00

C# 上位机 10月月更

Zepoch节点已售出500+,Zebec Chain市场反响激烈

股市老人

C# 关于多态性学习

IC00

C# 学习 上位机 10月月更

企业选型必读:选择数据湖or数据仓库?

雨果

数据仓库 数据湖

6种容器接入方式

阿泽🧸

10月月更 容器接入

DataFrame 的拼接

二哈侠

Python ApplicationContext 10月月更

九科信息RPA助力某大型航运企业财务部门降本增效,实现业务流程自动化操作

九科Ninetech

再见 MySQL!这可能不再是一个哗众取宠的梗了

雨果

MySQL 关系型数据库 开源数据库

2022-10-31:以下go语言代码输出什么?A:map[];B:nil;C:Panic;D:编译错误。 package main import “fmt“ func main() {

福大大架构师每日一题

golang 福大大 选择题

Hive基本架构

穿过生命散发芬芳

hive 10月月更

如何选择数据

二哈侠

索引技术 DataFrame 10月月更

和鲸 ModelWhale 入选《2022爱分析 · 数据智能厂商全景报告》

ModelWhale

机器学习 数据智能 数据科学 厂商

分层的电子签市场,被忽略的小微企业

ToB行业头条

Java 字节码简介

Kian.Lee

Java JVM bytecode 字节码

从“青铜”到“王者”,制造企业的数字化闯关记

脑极体

Gartner:通过数字投资缩短价值实现时间的必要性

雨果

数字化转型 CIO

流量运营数据产品最佳实践——美团旅行流量罗盘_文化 & 方法_美团技术团队_InfoQ精选文章