B站标签系统重构策略,最核心的要点都告诉你了
一、背景
性能瓶颈:随着查询量和频率的增加,现有的标签系统计算方式已经达到了性能瓶颈。 缺乏规范:没有统一的标签体系建设规范,导致数据源接入和标签配置需要平台人员手动操作,效率低下。 重复建设:由于数据来源和业务的多样性,业务侧建设了多个定制化的类标签系统,这些系统虽然满足了特定需求,但缺乏通用性,造成了资源的重复投入。 对接不规范:下游业务应用对接缺乏规范和系统层面的管理,导致效果回收链路没有建设,影响了整体的业务流程和数据流转效率。
二、架构设计
1、实施策略
2、整体框架
标签引擎:开发一个灵活的标签引擎,允许用户根据标签组合来定义人群。 行为分析:集成用户行为分析工具,以识别符合特定行为模式的用户群体。 实时处理:对于需要实时反馈的场景,集成流处理技术。
数据导入接口:提供一个稳定高效的数据导入接口,支持大文件上传和处理。 数据验证:在导入过程中实施数据验证,确保数据质量和一致性。 用户界面:设计直观的用户界面,简化Excel文件的上传和人群定义过程。
URL解析:开发服务解析外部链接指向的数据,并将其导入系统。 数据同步:实现数据同步机制,确保链接更新时人群信息也随之更新。
数据库集成:与Hive数据库紧密集成,直接从数据表中提取人群信息。 SQL查询:允许用户编写SQL查询来定义人群,提高灵活性。
系统集成:与数据管理平台(DMP)集成,实现人群包的同步。 数据映射:确保DMP中的人群信息可以正确映射到本系统的人群定义中。
个性化推荐:根据用户的标签,提供个性化的内容或产品推荐。 定向营销:使用标签来定向特定的营销活动,提高营销效率和转化率。 用户细分:通过标签对用户进行细分,以便更好地理解不同用户群体的需求和行为。 服务优化:利用标签系统来优化服务流程,提供更加个性化的服务体验。
三、核心方案
1、标签构建优化
2、人群交并差计算
| 适用标签 | function | 运算关系 | params |
|---|---|---|---|
连续标签 数值型 | LESS | < | 一个参数 |
| MOST | <= | 一个参数 | |
| GREATER | > | 一个参数 | |
| LEAST | >= | 一个参数 | |
| BETWEEN | between [a,b] | 两个参数 | |
所有连续标签 | NOTEQUAL | != | 一个参数 |
| EQUAL | = | 一个参数 | |
| IN | in(x1,x2,x3) | 多个参数 | |
| ISNULL | is null | null | |
| NOTNULL | is not null | null | |
连续标签 字符串类型 | LIKE | 支持多值like | 多个参数 |
| 离散标签 | IN | in(x1,x2,x3) | 多个参数 |
| 人群 | EQUAL | = | 一个参数 |
| 圈选场景示例 | DSL描述 | SQL示例 |
其中A1、A2...B5为单个条件表达式,例如: | lceberg sql |
改造之后人群圈选平均耗时为30s左右,效率提升120%。
3、在线服务
人群id | 放流比例 | 最新版本 | 冻结版本 | 替换人群 |
|---|---|---|---|---|
| 789 | 90 | 20220710 | 20220708 | 790 |
| 790 | 10 | 20220710 | ||
| 791 | 80 | 20220711 | 792 | |
| 792 | 20 | 20220711 | ||
| 793 | 10 | 20220711 |
/*Parser*/condition: condition AND condition #logicalAnd| condition OR condition #logicalOr| LPAREN condition RPAREN #paren| compare #logicalOp2| variableDeclarator #commomOp;compare: variableDeclarator op variableDeclarator #logicalOp;variableDeclarator: TRUE #logicalTrue| FALSE #logicalFalse| INT #commonInt| DOUBLE #commonDouble| STRING #commonString| IDENTIFIER #variable;/*Lexer*/op : EQ | NE ;EQ : '==';NE : '!=';OR : '||';AND: '&&';NOT: '!';LPAREN: '(';RPAREN: ')';TRUE : 'true' ;FALSE : 'false';INT : [0-9]+; // 整数DOUBLE : [1-9][0-9]*|[0]|([0-9]+[.][0-9]+);// 小数STRING : '"' ('\\"'|.)*? '"' ; // 字符串IDENTIFIER: Letter LetterOrDigit*;fragment LetterOrDigit: Letter| [0-9];fragment Letter: [a-zA-Z$_];WS : [ \r\n\t] + -> skip;
condition = "tag_1 == 1 && (tag_2 == 0 || tag_3 == 1)"四、落地成果
在系统建设的落地过程中,取得了显著的成果,这些成果不仅体现在技术层面的稳定性和性能上,更在业务支持和应用场景的广泛性上得到了充分的体现。
1、技术稳定性与性能
得益于对算法和数据处理流程的不断优化,在人群圈选方面,成功率达到了99.9%,针对不同规模的数据集,圈选耗时如下:
千万级人群:离线标签,在Clickhouse数据库的支持下,圈选耗时小于10秒,这为需要快速响应的业务场景提供了强有力的支撑。
亿级人群:离线标签,同样利用Clickhouse数据库,圈选耗时在10秒至30秒之间,确保了大规模数据处理的高效率。
1~5千万人群:连续标签,在Iceberg的辅助下,圈选耗时在1分钟至2分钟之间,这为中等规模数据的处理提供了稳定而高效的解决方案。
2、在线服务的稳定性
对系统架构的重构和对服务流程的持续优化后,在线服务的稳定性达到了99.999%,响应耗时小于5毫秒。
3、业务场景的广泛支持
业务支持上具有较强的适应性和扩展性,打通了公司推送、活动、任务、风控等多个平台,支持了超过30+不同的业务场景。广泛的业务覆盖能力,能够满足多样化的业务需求,为不同领域的用户提供定制化的解决方案。
4、标签和人群规模的扩展性
在标签和人群规模方面,标签数量累计达到了3000+,人群生产规模累计达到了10w+。
五、未来规划
1、实时标签和人群
实时数据处理:引入实时数据处理技术,如Apache Flink或Spark Streaming,以实现数据的实时流转和分析。 实时标签生成:开发实时标签生成机制,使业务能够即时获取并应用最新数据。 业务闭环:构建从数据决策到业务迭代再到数据回收的闭环链路,实现数据驱动的快速业务迭代。
2、标签基于指标灵活定义生成
指标模型复用:建立指标模型库,允许标签定义时复用已有的指标,减少重复开发。 动态标签生成:支持根据业务需求动态生成标签,无需预先聚合或分段数据。 自动化流程:开发自动化工具,简化标签定义和生成流程,提高效率。
3、应用效果回收
效果监测:建立监测机制,跟踪人群应用后的效果,为业务提供反馈。 数据链路打通:打通人群应用和业务效果数据生产链路,实现数据的无缝流转。 生命周期管理:根据业务使用情况优化人群标签的生命周期管理。