基于字节跳动分布式治理的理念,数据平台数据治理团队自研了SLA保障平台目前已在字节内部得到广泛使用,并支持了绝大部分数据团队的SLA治理需求,每天保障的SLA链路数量过千,解决了数据SLA难对齐、难保障、难管理的问题。

背景介绍

SLA(Service Level Agreement):服务级别协议,对互联网公司来说是网站服务可用性的保证。数据SLA,即数据可用性保证,一般以数据产出时间作为SLA。

在海量数据任务开发场景中,因业务多样化、数据量大、数据任务复杂等问题,导致数据任务链路依赖复杂、链路长、跨团队节点依赖多,因此,在实际开发运维过程中,任务负责人为保证自身数据准时产出,会遇到如下困难:

  • 沟通成本高:任务负责人尝试与上游任务负责人约定SLA,但由于上游任务数多(可至上千个),且跨越多个团队,沟通成本非常高

  • 权责不清晰:由于链路复杂,如何制定SLA?谁来负责保障SLA?

  • 运维压力大:无法及时发现上游任务延迟,导致下游任务负责人承担绝大部分运维压力,且运维效果较差,往往发现延迟已经错过了补救的时间。

为解决上述问题,字节跳动数据平台通过自研的SLA保障平台,规范并推进各业务团队进行任务链路治理,有效保障数据的SLA,数据SLA达标率达到99.1%。

理想的一组任务的完成时间与对应SLA之间的关系如下图所示,即各个任务及其上游任务都在对应的SLA之前完成,这也是平台的治理目标。

应用场景

SLA保障平台除了解决上文的困难外,对不同的用户还有以下使用场景:

  • 数据业务方:“我们团队的业务很依赖一份重要数据,希望能对其进行保障,希望上游能承诺SLA”

  • 数据负责人:“我们团队有很多对外承诺SLA的数据,希望能有一个平台对SLA进行集中管理,并能提供一些统计大盘、风险分析等内容”

  • 数据治理方:“我们希望能提升团队内核心数据的数据质量,对齐进行SLA管理,及时发现风险,并进行事故复盘和改进,最终不断优化数据质量”

根据以上不同角色需求,SLA保障平台提出自身解决方案。针对团队数据治理需求,平台提供完善的治理看板能力;针对任务链路复杂导致的SLA难达成,平台通过各项优化,简化了SLA达成流程;针对下游任务运维压力大的问题,平台优化通知体系,及时播报SLA状态。

那么,SLA保障平台有哪些核心模块?平台是如何运转的呢?

核心概念介绍

1. 角色

目前SLA保障平台的核心角色有三类,分别是:

  • 申报人:即SLA提申报的人,一般是数据业务方,其提申报的目的是保障业务数据的SLA;

  • 管理员:满足数据治理方的需求设置的角色,负责申报的审核、批准、管理、统计、登记、复盘等,其目的是不断优化所属团队的数据质量。

  • 任务负责人:即待保障SLA数据链路中的任务owner,负责确定及签署所负责任务的SLA,平台会按照其签署的SLA进行保障;

2. 任务

即产出数据的任务,通过数据任务的元信息,可构建整条数据生产链路的完整DAG。在本平台中,所涉及的任务元信息一般需要包含以下内容:

3. 申报单

申报人提起的一次申报内容,被称为一个“申报单”,一个申报单一般包含的核心内容如下:

申报签署流程详解

SLA保障的前提是先达成SLA协议。在SLA保障平台中,以申报单签署的形式达成SLA协议。平台核心特点是优化了SLA达成的流程,先通过“系统卡点计算”减少待签署任务的数量,再通过“SLA推荐计算”自动签署部分任务,最后为剩下的待签署任务智能提供合适的SLA,进一步降低签署成本。

在申报签署环节中,各个环节的变化将通过通知模块传递信息给相应负责人,实时通知降低信息交流成本,加速了SLA的达成。

1. 流程简介

上图为申报签署的一般流程,在实际操作时,如任务链路变化、SLA时间商讨待确认等特殊情况,申报签署流程会有微调。

首先需要申报人填写申报单,在申报人提交后,系统会根据申报单中的申报任务拉取上游的所有任务,构成一个完整的DAG,并进行任务链路分析链路分析的结果是后续算法的前提,也是管理员审批时的重要参考因素,可以让用户快速了解到自身任务在链路中所处的位置及上下游运行情况。

在理想情况下,为保证申报任务顺利推进,需要该任务的所有上游任务都签署SLA才算完成签署。而链路复杂导致的上游任务多、跨团队沟通成本高、SLA难以确定等问题,成了整体SLA达成的最大阻碍。通过“卡点计算”与“SLA推荐计算”可以跨越此阻碍。

2. 卡点计算

本系统采取一定的“卡点策略”,计算出此DAG中的部分需要被签署的任务,此类任务称为“卡点任务”,这个过程称之为“卡点计算”。计算得到卡点任务后,在签署过程中可以忽略其他任务,从而大大降低签署成本。

一个申报单会关联多个任务(即该申报任务及其上游的卡点任务),同理一个任务也会关联多个申报单,因为在一个DAG中,申报任务可能从任意节点起,因此二者是N:N的关系。

当两个申报单有部分任务列表重合时,如Task4关联了两个申报单,该任务的申报方、治理团队等数据是两个申报单的去重合集,而等级则取所有申报单中最高者。

3. SLA推荐计算

利用任务及其上下游任务的历史运行信息,再结合推荐算法,得到该任务的推荐SLA,这个过程称之为SLA推荐计算。

在负责人签署SLA之前,SLA推荐算法会智能计算每个任务的推荐的SLA,并以此进一步通过算法自动签署部分待签署的任务,进一步降低签署成本。据平台数据统计,此功能可以自动签署近40%的SLA,是最核心的功能之一。

而对于剩余的待签署任务,会将算法推荐的SLA提供给任务负责人。任务负责人可以直接选择直接用这个SLA签署,也可以自行决定SLA。一般情况下,智能推荐的SLA已经能满足绝大多数的需求,通过推荐SLA,任务负责人更快的做出签署决定,再次降低了签署成本。

4. 系统保障监控

当一个申报单完成签署之后,平台将对申报单中的任务进行保障服务。保障服务的核心就是通过监控SLA的状态变化及时播报消息通知,为相应负责人及时提供一手资料,以此降低运维成本。对于一个离线任务,评价其SLA主要是依据其完成时间和其所承诺的SLA来判断,SLA的状态分为四种,分别是:

  • 未到SLA:即当前时间,任务未产出,且还未到SLA时间(继续监控);

  • 已达成:即任务已完成,且完成时间在所承诺的SLA之前(发送就绪通知);

  • 已延迟:即任务未完成,且当前时间已在所承诺的SLA之后(发送延迟通知);

  • 已延迟(产出):即任务已完成,但完成时间在所承诺的SLA之后(发送延迟产出通知);

    从下图可以看到在任务达成、未达成两种情况下,随着时间的推移,其SLA状态的变化。

SLA的实时状态是数据业务方所需要的重要信息,因此平台会所有任务的SLA进行监控,并在SLA状态变化时实时对相关人员发送通知,相关人员根据收到的通知知晓SLA的具体情况,并能做出应对措施。

复盘管理详解

复盘管理是本平台提供的响应式治理服务的实现方式,是数据治理方的重点关注对象。复盘管理又分为问题管理与事故管理,问题管理侧重于“为什么”——即整理分析SLA破线的原因,事故管理侧重于“怎么做”——即SLA破线事故之后该怎么治理。

1. 问题管理

问题管理模块的整体目标是满足数据治理团队对SLA问题的登记管理,支持对登记后的问题数据进行不同维度根因数据分析,辅助用户对问题根因进行治理,沉淀治理问题经验。

平台在进行系统保障监控时,会在SLA延迟时进行通知播报,并持续提醒负责人进行问题登记。在问题登记时,平台提供了一组根因树辅助登记,明确问题根因类别,方便统计分析。任务负责人进行问题登记后,累积数据展示在问题看板上,数据治理方由此做问题分析归纳总结。

平台保证了 SLA 延迟记录与问题之间是一一对应的关系,并在问题看板上关联了 SLA 详情信息,包括任务链路、负责人、任务起止时间等。

问题登记往往是一个从多到少的过程,前期出现的问题在逐一治理解决后,将对后期的治理起到很好的参考警示作用,它的数据价值如下:

  • 不同 SLA 问题类型的趋势分布,针对性的治理问题

  • 相同根因引发了多少 SLA 问题,涉及影响多少数据资产

  • 哪些数据资产经常出现 SLA 问题,问题的分类以及是什么根因造成的

  • SLA 问题经验总结,方便类似问题发生后,后期做推荐辅助快速定位根因

根据平台运营的记录显示,常见的问题有资源队列阻塞、上游任务故障、数据倾斜等。某数据团队双月问题登记总结如下,问题数量和问题根因种类得到了有效的收敛:

2. 事故管理

事故管理用于记录 SLA 破线事故的复盘与改进管理,每个事故至少对应一条 SLA 问题记录,而每个 SLA 问题不一定会造成事故。

事故可以在任意节点进行,一般在 SLA 破线并造成实际的业务影响之后,需要进行事故登记,事故登记同样会关联相关的 SLA 信息。一个事故的处理流程如下所示:

如图所示,事故主要包含 SLA 事故明细、SLA 事故根因、改进计划及 SLA 消耗这几部分,在这其中可以关注以下几点:

  1. 事故在登记时,会根据事故明细确认事故根因,并让相应负责人提出改进计划

  2. 用户可以订阅事故,在事故的复盘状态及其改进计划的完成状态变化时,都会通知订阅人

  3. 任务的改进计划在完成前,每日都会提醒计划负责人,直到计划完成为止

SLA 事故管理平台的数据是数据治理方治理成果的重要依据,也是整个 SLA 保障平台使用效果的体现,它的数据价值如下:

  • 对事故的复盘归档管理,方便后期随时查阅,定位相关 SLA 信息

  • 针对不同数据团队发生 SLA 事故的整体情况进行对比查看,互相借鉴

  • 对事故的改进计划管理跟踪,验收 SLA 的治理效果

以下是某个团队的双月事故统计:

通过上述数据可知,本平台有效保障了核心任务的稳定产出,辅助降低了稳定性事故发生的概率,现在每双月该类型事故数量长期维持在个位数。

六、平台架构总结

平台整体主要分为基础组件、规划式治理服务、响应式治理服务三大块,系统组件架构图如下:

1. 规划式治理服务

所谓“规划式治理”,即在问题发现前治理,通过主动规划约定 SLA 的形式保障任务产出。规划式治理是 SLA 相关问题发现的过程。

规划式治理服务即“提供以申报单签署的方式达成 SLA 协议的服务”,包括在此过程中申报单的生命周期管理操作,申报任务的链路分析,以及达成 SLA 之后的系统保障监控,服务于“申报签署流程”。

2. 响应式治理服务

响应式治理是指通过复盘管理模块对 SLA 相关的事故/问题进行登记、管理、复盘的过程。在发现 SLA 相关问题之后,需要对问题进行处理,形成一个完整的闭环,在发现问题后进行的治理成为响应式治理。

响应式治理服务模块抽象出问题登记和事故管理两个模块,更加灵活的服务于数据 SLA 的问题归因与事故统计。

3. 基础组件

基础组件提供了配置、播报、看板等基本功能模块服务,为规划式、响应式治理服务提供了必要支撑,是整体 SLA 保障服务不可或缺的一环。

3.1 系统配置

  • 治理团队配置

治理团队为 SLA 的管理团队,每个申报单都需要绑定一个治理团队,治理团队主要负责审批申报单。

  • 数据团队配置

数据团队为数据的归属方,一个数据团队对应一个业务团队,数据团队的设计保障了各个业务团队独立治理的需求。平台通过对数据团队的灵活配置支持,可以更细粒度的划分数据与任务的归属,解决权责不清的问题。

  • 订阅配置

订阅管理是配置订阅信息的平台,本平台的订阅为 SLA 监控的通知播报,通过订阅管理可以将通知指定发动到个人或者群组。订阅管理是 SLA 监控保障服务不可或缺的一环。

3.2 通知播报

通知播报是本平台所提供的基础通知能力,是降低沟通成本、实现保障服务、提升用户体验的重要手段。在重要节点变更、用户操作、SLA 状态变化等情况下,都会进行通知播报。通知播报形式多样,根据不同的场景,有普通文本消息、加急消息、卡片通知、邮件通知、电话通知等。

3.3 大盘展板

SLA 大盘展板是数据治理方最为关心的部分,展板提供当日 SLA 整体统计信息、SLA 延迟趋势分析信息、SLA 等级分布明细、任务健康度明细、团队 SLA 达成信息统计等丰富信息,是很多团队数据治理指标重要参照来源。

七、未来展望

未来字节跳动数据治理团队将持续打磨 SLA 保障平台,在卡点策略优化、SLA 推荐算法优化、基于 SLA 的任务管理机制上持续提升技术能力:

  • 卡点策略优化:卡点计算作为优化签署流程中核心一环,卡点策略优化代表着签署流程进一步的简化,未来可以探索利用更多有效的信息优化卡点策略。

  • SLA 推荐算法优化:SLA 推荐算法是本平台的核算算法之一,已经申请了专利。随着业务的拓展,以及不同种类任务的支持,此算法还有广阔的提升空间,如进一步提升自动签署率,进一步提升准确率等。

  • 基于 SLA 的任务管理机制:任务签署 SLA 信息之后,即可依托 SLA 信息进行资源调度优化,并进行资源分配倾斜。

同时,文中阐述的部分能力已经通过火山引擎 DataLeap 产品向企业客户开放,欢迎关注。

八、产品介绍

火山引擎大数据研发治理套件DataLeap

一站式数据中台套件,帮助用户快速完成数据集成、开发、运维、治理、资产、安全等全套数据中台建设,帮助数据团队有效的降低工作成本和数据维护成本、挖掘数据价值、为企业决策提供数据支撑。

更多技术交流、求职机会、试用福利,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群

难对齐、难保障、难管理?一文了解字节跳动如何解决数据SLA治理难题的更多相关文章

  1. 字节跳动Android实习面试难吗,应该如何应对?

    字节跳动的面试难不难其实很难去非常准确的定义,但是能肯定的一点是,字节跳动的面试题都很有水平,真正考察了该岗位在以后工作中需要的能力. 大学学的Java后面又自学Android方向,跟着老师在实验室做 ...

  2. 【原创】利用doxygen来管理项目文档或注释

    一.doxygen应用场景: doxygen可以用来管理目前主流的编程语言的注释而形成文档系统.(包括C, C++, C#, Objective-C, IDL, Java, VHDL, PHP, Py ...

  3. Go内存管理一文足矣

    最早学习C.C++语言时,它们都是把内存的管理全部交给开发者,这种方式最灵活但是也最容易出问题,对人员要求极高:后来出现的一些高级语言像Java.JavaScript.C#.Go,都有语言自身解决了内 ...

  4. [课程分享]IT软件项目管理(企业项目甘特如是评价、维护管理、文档管理、风险管理、人力资源管理)

    [课程分享]IT件项目管理(企业项目甘特图案例评价.维护管理.文档管理.风险管理.人力资源管理) 对这个课程有兴趣的朋友能够加我的QQ2059055336和我联系 课程讲师:丁冬博士 课程分类:Jav ...

  5. 通过VuePress管理项目文档(一)

    VuePress 相关链接 完整的Vue组件代码以及完整的文档,仅适用于个人参考学习: 文档预览地址:预览链接 使用VuePress编辑文档的代码访问:组件文档 完整代码:组件代码 Vue组件开发 这 ...

  6. 企业级容器管理平台 Rancher 介绍入门及如何备份数据

    企业级容器管理平台 Rancher 介绍入门及如何备份数据 是什么 Rancher 是一个为 DevOps 团队提供的完整的 Kubernetes 与容器管理解决方案的开源的企业级容器管理平台.它解决 ...

  7. HDU 6463.超级无敌简单题-卡边界的暴力 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)

    超级无敌简单题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  8. GBT 33200-2016 社会治安综合治理 综治中心建设与管理规范 GBT 31000-2015 社会治安综合治理基础数据规范

    阚总发的两个国标的标准文件, 看看里面对于数据和问题的分类等. 我们出统计分析,可以按照标准出各个大类小类的各种指标数据. 结合这几天给潍坊弄的12345的报告, 整理出一个可以结合吴中现有平台数据, ...

  9. 一文让你彻底了解大数据实时计算引擎 Flink

    前言 在上一篇文章 你公司到底需不需要引入实时计算引擎? 中我讲解了日常中常见的实时需求,然后分析了这些需求的实现方式,接着对比了实时计算和离线计算.随着这些年大数据的飞速发展,也出现了不少计算的框架 ...

随机推荐

  1. python学习笔记(三)——函数

    函数定义 def 函数名(形参 . . . ) 函数体 1. 函数参数 返回值:可以有一个或多个 形参:支持默认形参.关键字形参.可变参数形参等 1.1 必须参数 调用时传入的参数必须与定义时相同. ...

  2. C语言 | 栈的应用 | 非递归栈实现快排

    /* 非递归栈实现快排 */ #include <stdio.h> #include <math.h>> #include <malloc.h> #inclu ...

  3. 安装Yarn

    安装Yarn Yarn是比npm更高效.快速的包管理器工具,它支持并行下载程序包,并且简化了包管理的复杂度. 使用npm安装yarn,命令npm install -g yarn. 安装后,使用yarn ...

  4. 破解浏览器同源政策利器之JSONP

    本文是在了解了浏览器的同源规则之后,学习了破解这个规则的一个简单有效的方法->JSONP.主要通过阮一峰老师的博客学习 浏览器的同源规则 有这样一个背景,如果你通过银行的网站进行的取钱的交易,而 ...

  5. 用Node处理文件上传

    前言 在Web开发中,文件上传是一个非常常见.非常重要的功能.本文将介绍如何用Node处理上传的文件. 需求分析 由于现在前后端分离很流行,那么本文也直接采用前后端分离的做法.前端界面如下: 用户从浏 ...

  6. idea 启动微服务 设置 run dashboard

    微服务如果很多,启动时如果在run窗口,会不是很方便,所以idea中配置了rundashboard,有时不自动出现时,需要进行配置: 配置操作如下: 我的idea版本2020.2 1.在父工程的.id ...

  7. java中请给一个Abstract类实现接口的实例!

    2.Abstract类实现接口 马克-to-win:如果实现某接口的类是abstract类,则它可以不实现该接口所有的方法.但其非abstract的子类中必须拥有所有抽象方法的实在的方法体:(当然它a ...

  8. Java实现链表反转(借助栈实现)

    public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } // 添加新的 ...

  9. C++---变量、数据类型和运算符

    内存 计算机使用内存来记忆或存储计算时所使用的的数据. 计算机执行程序时, 组成程序的指令和程序所操作的数据都必须存放在某个地方, 而这个地方就是计算机的内存, 也称为主存, 或随机访问存储器(RAM ...

  10. 使用基于Roslyn的编译时AOP框架来解决.NET项目的代码复用问题

    理想的代码优化方式 团队日常协作中,自然而然的会出现很多重复代码,根据这些代码的种类,之前可能会以以下方式处理 方式 描述 应用时可能产生的问题 硬编码 多数新手,或逐渐腐坏的项目会这么干,会直接复制 ...