ToB企服应用市场:ToB评测及商务社交产业平台

标题: 一文读懂字节跳动“埋点验证平台” [打印本页]

作者: 玛卡巴卡的卡巴卡玛    时间: 2022-9-16 17:14
标题: 一文读懂字节跳动“埋点验证平台”
更多技术交流、求职机会、试用福利,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群
 
序言

埋点数据作为推荐、搜索、产品优化的基石,其数据质量的重要性不言而喻,而要保障埋点数据的质量,埋点验证则首当其冲。工欲善其事必先利其器,要做好埋点验证会面临很多技术挑战:易用性、准确性、实时性、稳定性、扩展性,如何攻克这些挑战呢,其实还是技术,这也是本文的主旨所在。
目前埋点验证已在字节内部得到广泛使用,通过一键扫码开启验证、实时上报验证、自动生成验证报告,解决了埋点数据验证难、埋点质量保障难的问题。
埋点验证流程

技术架构

产品流程

先简单介绍一下产品,以便大家能对平台有整体认识,方便大家更加轻松地理解技术,平台主要包括三部分:埋点验证方案、埋点验证工具、埋点验证报告,三者相辅相成,极大的降低了用户的埋点验证成本。

技术架构图

埋点验证的链路很长,可以简单概括为三个环节:埋点上报、埋点接收、埋点验证,每个环节都有一定的复杂性,此处先介绍整体流程,让大家可以快速对全流程有所认识。其次将主要聚焦于“埋点验证”环节,此环节的重中之重是埋点验证引擎,它包括 4 个部分:规则生成器、规则选择器、埋点验证器和埋点推送器,通过对埋点验证引擎的详解让大家对“埋点如何验证”有更深的理解。
规则生成器

规则生成器将“埋点验证方案”转换为“验证规则”。埋点验证方案是验证规则的逻辑视图,方便用户操作,降低验证规则的编写和维护成本。通过逻辑视图和物理视图两层逻辑,确保了埋点验证引擎底层不受业务变化的影响。
埋点方案
埋点验证方案支持 2 种:
按元数据验证:
埋点数据:
  1. {
  2.     "app_id":100,
  3.     "event":"click",
  4.     "params":{
  5.         "enter_from":"login",
  6.         "duration":1,
  7.         "type":3
  8.     }
  9. }
复制代码
埋点规则
  1. {
  2.     "app_id":100,
  3.     "event_name":"video_play",
  4.     "logical_filter":{
  5.         "enter_from":"login"
  6.     },
  7.     "meta":{
  8.         "required_field":[
  9.             "duration",
  10.             "enter_from",
  11.             "type"
  12.         ],
  13.         "scene":{
  14.             "condition":"enter_from=login",
  15.             "name":"登录页"
  16.         },
  17.         "validate_field":[
  18.             "duration",
  19.             "enter_from",
  20.             "type"
  21.         ]
  22.     },
  23.     "physical_validation":"{"$schema":"https://json-schema.org/draft/2019-09/schema","type":"object","properties":{"params":{"type":"object","properties":{"duration":{"type":"integer"},"enter_from":{"type":"string","enum":["login"]},"type":{"type":"integer","enum":[1,2,3]}},"required":["duration","enter_from","type"]}},"required":["params"]}",
  24.     "source":"schema_scene"
  25. }
复制代码
埋点规则字段说明
规则选择器

规则选择器将依据“埋点”中的关键信息,从“验证规则池”中选择出对应的“埋点验证规则”。
 
埋点验证器

埋点验证器将依据“基础验证规则”以及“规则选择器”产出的“埋点验证规则”,对“埋点数据”进行验证并产出“验证结果”。
埋点推送器

埋点推送器将“埋点验证结果”推送到前端,推送的过程存在数据交互频繁、数据体积大、数据传输稳定性的要求,这里我们自建 Push 服务进行数据传输,保证数据实时可达。
技术挑战

易用性

快速接入埋点验证,快速开始埋点验证
SDK

 
[tr]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">端<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">SDK<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">如何开启埋点验证开关[/tr][tr][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">客户端[/td][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">Android SDK IOS SDK[/td][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">Android、IOS 提供 API,开关默认是关闭的,业务侧集成的时候可选择在“域内测试包”打开此开关[/td][/tr][tr][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">服务端[/td][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">Go SDK Java SDK Python SDK[/td][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">服务端会自行判断是否是非线上环境,如果是非线上环境,会默认开启“埋点验证开关”[/td][/tr][tr][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">web 端[/td][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">JS SDK 浏览器插件[/td][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">1. JS SDK 采用和客户端 SDK 一样的逻辑 2. 为了使用方便,我们也提供了浏览器插件,用户只需打开此插件即可,无需关注“埋点验证开关”[/td][/tr][/table]"}}" data-pm-embed-component=""> 扫码连接

准确性

埋点验证结果准确、用户可信
埋点验证引擎必须保证埋点验证结果的准确性,才能降低验证成本。针对埋点数据本身的格式验证,我们采用了 JsonSchema 作为验证手段,以支持完善的验证规则、可信的验证结果。上文中的“规则生成器”、“规则选择器”、“埋点验证器”也都在一定程度上保证了埋点验证结果的准确性。
埋点方案

event:video_play
埋点规则

jsonSchema
  1. {
  2.     "$schema":"https://json-schema.org/draft/2019-09/schema",
  3.     "type":"object",
  4.     "properties":{
  5.         "params":{
  6.             "type":"object",
  7.             "properties":{
  8.                 "duration":{
  9.                     "type":"integer"
  10.                 },
  11.                 "enter_from":{
  12.                     "type":"string",
  13.                     "enum":[
  14.                         "login"
  15.                     ]
  16.                 },
  17.                 "type":{
  18.                     "type":"integer",
  19.                     "enum":[
  20.                         1,
  21.                         2,
  22.                         3
  23.                     ]
  24.                 }
  25.             },
  26.             "required":[
  27.                 "duration",
  28.                 "enter_from",
  29.                 "type"
  30.             ]
  31.         }
  32.     },
  33.     "required":[
  34.         "params"
  35.     ]
  36. }
复制代码
埋点数据

event:video_play
  1. {
  2.     "app_id":100,
  3.     "event":"click",
  4.     "params":{
  5.         "enter_from":"login",
  6.         "duration":1,
  7.         "type":3
  8.     }
  9. }
复制代码
验证结果

event:video_play
 

实时性

埋点数据实时可见
埋点验证场景下,服务端和验证平台需要频繁地进行数据交互,所以我们自建了 Push 服务(基于 WebSocket 的封装),能够保证数据的实时畅通性
Push 服务目标

Push 服务优势

Push 服务流程

稳定性

埋点数据可靠不丢失
SLA

措施

[tr]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">措施<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">说明[/tr][tr][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">监控[/td][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">为了保证线上服务的稳定性,对线上流量进行监控,支持按 app 粒度进行查看 app 粒度的 QPS,以便发生报警的时候,可以快速定位到具体是哪个 app 的流量异常[/td][/tr][tr][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">报警[/td][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">对线上流量进行报警,报警策略的设置如下:- 当前 QPS 达到最大 qps 的 50%的时候,报警级别为 warning,提示需要注意- 当前 QPS 达到最大 qps 的 70%的时候,报警级别为 critical,提示必须处理[/td][/tr][tr][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">限流[/td][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">当发生报警的时候,通过监控定位出具体 app,做如下处理:1. 针对此 app 数据进行限流,确保其他 app 不会受到影响 2. 联系 app 业务方,确认此 app 流量是否为异常流量 3. 如果是异常流量,对异常流量进行处理,处理后撤销限流 4. 如果是正常流量,那么埋点验证服务进行处理[/td][/tr][tr][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">降级[/td][td]<span style=\"margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 15px;\">实时验证流程是当前的主要业务,当发现流量突增,限流无法解决的情况下,对自动化验证流程进行降级,确保主要业务的稳定性[/td][/tr][/table]"}}" data-pm-embed-component="">  
扩展性

快速接入新的埋点数据格式
展望

埋点验证是保障埋点质量的有效方式,此方式属于事前验证,适用于埋点频繁变化的业务场景,需要一定程度的人工介入,能够解决基本的埋点质量问题。但是对于核心埋点场景来说,这种方式的验证成本较高,需要重复的人力投入,为了解决核心埋点验证成本高的问题,我们正在探索落地其他方式:
 
立即跳转火山引擎大数据研发治理套件产品官网了解详情!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4