跳到主要内容

设计标签管理系统

需求

设计标签管理系统,支持:

  • 标签全生命周期管理(创建→审核→上线→下线)
  • 自定义规则标签 + 算法标签
  • 人群圈选与导出
  • 标签质量监控

架构设计

核心模块

模块功能技术方案
标签管理创建、审核、上下线Web 平台 + 审批流
规则引擎规则标签定义SQL DSL + 条件组合
标签计算离线/实时标签加工Spark + Flink
标签存储标签结果存储HBase(离线) + Redis(实时)
人群圈选多标签组合筛选Bitmap + ClickHouse
标签质量覆盖率/稳定性监控定时巡检

标签分类体系

标签类型定义方式更新频率示例
事实标签直接取值T+1 / 实时年龄、城市、最后登录
规则标签SQL 条件T+1高价值用户、活跃用户
算法标签ML 模型周 / 月流失概率、兴趣偏好

规则标签 DSL 设计

-- 标签规则 DSL(配置化)
{
"tag_name": "high_value_user",
"tag_cn": "高价值用户",
"rule": {
"operator": "AND",
"conditions": [
{"field": "total_amount_30d", "op": ">=", "value": 1000},
{"field": "order_count_30d", "op": ">=", "value": 3},
{"field": "last_login_days", "op": "<=", "value": 7}
]
},
"schedule": "daily",
"owner": "growth_team"
}

规则引擎将 DSL 转换为 Spark SQL 执行:

-- 自动生成的 Spark SQL
INSERT OVERWRITE TABLE tag_result PARTITION (dt='2024-01-15', tag_id='high_value_user')
SELECT user_id, 1 AS tag_value
FROM user_profile
WHERE total_amount_30d >= 1000
AND order_count_30d >= 3
AND last_login_days <= 7;

人群圈选

人群圈选支持多标签交集 / 并集 / 差集组合:

-- 人群圈选示例:高价值 AND 活跃 AND NOT 已领优惠券
SELECT user_id
FROM tag_bitmap
WHERE has_tag('high_value_user')
AND has_tag('active_user')
AND NOT has_tag('coupon_received');
Bitmap 加速人群圈选

使用 Bitmap 存储标签结果,交集 / 并集 / 差集通过位运算实现,毫秒级完成千万级用户圈选:

  • 交集:bitmap_and(tag_a, tag_b)
  • 并集:bitmap_or(tag_a, tag_b)
  • 差集:bitmap_andnot(tag_a, tag_b)

标签质量监控

监控维度说明告警阈值
覆盖率标签非空用户 / 总用户突降 > 20%
稳定性相邻两天标签值变化率波动 > 30%
时效性标签计算完成时间超过预期 2 小时
唯一性互斥标签不能同时为真冲突 > 0

常见面试问题

Q1: 标签系统和用户画像系统的关系?

答案

  • 标签系统:基础设施层,管理标签元数据、计算和存储
  • 用户画像系统:应用层,基于标签系统提供可视化画像、人群圈选、洞察

标签系统是用户画像的底座,画像系统在标签之上叠加了应用层能力(圈选、分析、推送)。

Q2: 实时标签和离线标签如何统一查询?

答案

采用 Lambda 架构

  1. 离线标签:Spark 每天 T+1 计算,存 HBase
  2. 实时标签:Flink 实时计算,存 Redis
  3. 统一查询层:先查 Redis(实时),Miss 再查 HBase(离线),合并返回

Q3: 如何评估一个标签的价值?

答案

维度评估方法
使用频率被下游系统调用次数
区分度标签值分布是否均匀(偏斜严重则区分度低)
业务价值在圈选、推荐中的 ROI 提升
质量覆盖率、准确率、稳定性

低使用、低区分度的标签应定期清理下线。


相关链接