Java 程序员Java

基于流量域的数据全链路治理

2022-06-21  本文已影响0人  程序花生

一、流量域概览

1.1 概念

众所周知,在数仓建设过程中,首先都需要划分数据域,以确定数据的方向。如交易域、营销域、客满域等,流量域也属于其中一部分,主要是针对埋点数据做一些数据处理和数据分析的动作,包含但不局限于活跃用户分析、漏斗分析、归因分析等,从而给运营团队,用户增长团队,商业化团队以及高层决策,提供强有力的数据支撑以做出正确的决策。

1.2 流量域建立初衷

建立"全面、准确、高效、低成本、高价值"的流量数据体系 ,整合全域流量基础数据,开启上帝视角,让业务做到知行合一 ,贯穿事前、事中、事后建设一套完备的数据质量体系,打造流量数据公信力。这是全体流量域建设者的愿望。要想做到这样,必须做到数据模型就绪时间早,执行时间短,查询响应快。

1.3 指导思想

1.3.1 建模理念

思考原则:

顶层设计思考原则(思考主题建设最终态)

建模原则:

1 高内聚低耦合

这是架构设计最主要的目标,实现系统的高内聚、低耦合遵从以下原则:利用分层架构实现系统在纵向上的低藕合;利用开源框架进一步确保纵向分层的具体实现;按照功能划分子系统来实现横向上的低偶合;利用包结构确保横向上低耦合的具体实现 。

主要从数据业务特性和访问特性两个角度来考虑:将业务相近或相关、粒度相同的数据设计为一个逻辑或物理模型;将高概率同时访问的数据放在一起,降低概率同时访问的数据分开存储。

2 核心模型与扩展模型分离

核心模型包括的字段支持常用的核心业务,扩展模型包括的字段支持个性化或少量应用的需要和扩展。要避免破坏核心模型的架构简洁性和可维护性。

3 公共处理逻辑下沉及单一

越是底层共用的处理逻辑越应该在数据调度依赖的底层进行封装与实现,不要让公用的处理逻辑暴露给应用实现,不要让公用逻辑多处同时存在。

4 成本与性能平衡

适当的数据冗余可换取查询和刷新性能,不宜过度冗余和数据重复。

5 数据可回滚

处理逻辑不变,在不同时间多次运行数据结果确定不变。

6 一致性

具有相同含义的字段在不同表的命名必须相同,必须使用规范定义中的名称。

二、流量域基础数据架构

2.1 数仓架构

2.3 技术架构

三、流量域数据全链路治理

目前的痛点:

3.1 流量数据特性

3.2 问题暴露

主要有以下几点导致问题发生:

3.3 解决方案

3.3.1 完善开发规范,优化数据模型

基于现有的词根,词典,数据域/主题域划分,模型评审流程,数据开发规范,数据 ETL 清洗规范等做了进一步的完善优化

基于元数据着手于公共层数据模型的优化,并取得一定的成效,明显提高模型完善度,模型复用度及模型的规范度,提高数据研发效率和质量

3.3.2 埋点规范

什么是埋点?

埋点就是通过植入一段代码到某个页面或者按钮,从而收集上报用户行为数据。能通过埋点看用户在 APP 里做了些什么,访问了哪些页面(页面统计+行为统计)。

基于埋点管理平台,可以有效杜绝埋点混乱的问题。

3.3.3 指标管理平台上线

指标管理平台可以从根本上解决大部分指标一致性问题

3.3.4 数据质量保证

我们最终的目的是希望做到页面可配置

3.3.5 SLA的保障

四、模型层面

4.1 模型设计层面

这个就没啥好说的了,严格按照模型架构,模型设计原则,分层原则去做模型设计,这个就没啥好说的了,如果这个没设计好,是会影响任务产出的,比如链路过长。

4.2 模型迭代

模型在迭代后,一定要先试运行再提交,保证此次模型迭代是没问题的,然后一定要看一下下游任务会不会受影响,尤其是在新增字段的时候。如果这些都没去校验的话,晚上极有可能是会有报错情况的,因为这么多年的经验发现,只要白天没有新任务上线或者老任务迭代,晚上不出意外情况的话,一般是不会有报错的,特殊情况除外。

但是只要白天上了新任务或者核心的模型进行了迭代,晚上值班人员就会慌得一批,一般都会报错。

4.3 模型优化层面

模型优化其实是多方面的,但是跟任务及时产出有关系的主要有一个任务调优及事实表或者维表的横向或者水平拆分。

之前任务有一条链路产出时间非常晚,几乎都是 10 点之后,后来发现主要有2方面的原因:

所以当时我们做了 2 个方面的优化,一个是对运行时长过长的任务进行了 sql 层面的调优,最后这个任务 15 分钟就能产出,另一方面我们对该维表进行了垂直拆分,解决了 2 个爬虫获取的属性直接影响核心报表产出的延迟问题

当然具体的优化还是得看具体的场景,优化方式也是比较多的。

4.4 模型优先级设置

每个任务都应该设置任务优先级,这样我们就能知道哪些任务产出就基本能代表数仓核心任务全部跑完,并且在告警机制里面,优先级也是非常重要的一项参考。

五、调度层面

5.1 调度系统

目前发现的调度系统会存在以下 2 个问题

这一块就需要负责调度系统的同学及时的去发现并且去解决这些问题,我们数据部门的同学也要及时的去跟他们反馈。

5.2 任务调度配置

六、大数据运维层面

6.1 资源

及时评估存储及计算资源,之前发生过存储不足导致晚上大批量任务报错的情况。

6.2 组件故障

这种遇到比较多的就是 hive on spark 出现问题了,连接不上,导致大批量任务报错。或者是别的大数据组件 server down,导致任务不能运行。

七、监控层面

7.1 数据质量监控

此项监控比较核心,对今日抽取的数据量,核心模型数据唯一性,核心指标阈值等进行实时监控,避免数据有问题也没发现,导致白天所有下游任务需要重跑。可以配置重要表的监控和字段监控,确保核心模型按时产出。

7.2 任务延迟未产出监控

这个就比较好理解了,一般我们运行的任务都会有一个差不多的时间范围,比如某个核心任务一般 2 点 - 2 点半就会产出,但是今天凌晨在 4 点钟开没开始跑或者还没跑完,这个时候就应该有监控报警,提示值班人员该任务产出时间异常。

八、值班层面

什么是值班?就是晚上不但要睡觉,还有负责整个数仓的任务正常运行,若不正常则需要处理。

上面说了那么多的方案,优化,报错,数据质量监控,任务延迟产出告警之类,但是如果没有人去处理这些问题,那将毫无意义。

这个时候我们将需要进行值班人员安排,周期安排,还有对应的告警机制,是邮件告警,短信告警还是电话轰炸呢,还有发现问题处理不了的话应该找哪一方,任务延迟故障定级等。目前我们也正致力于完善这一块内容。

作者:政采云技术团队
链接:https://juejin.cn/post/7111472481382170660
来源:稀土掘金

上一篇下一篇

猜你喜欢

热点阅读