为什么要构建标签系统
在真正去实现一个标签系统之前,先来了解一下什么是标签。
标签简单来说就是针对某一实体(人,商品...)某些特征的描述。有了这些特征的描述,我们可以很好的去刻画一个用户或者一个商品。这也是用户画像的技术特点:在大数据时代背景下,将用户的每个具体信息抽象成标签,利用这些标签将用户形象具体化,从而为用户提供有针对性的服务。
标签系统设计的目的就是为了将数据变成用的,看得懂的数据。业务人员有了这些数据可以进行更快速的决策和更精细化的营销。
标签系统的作用
了解了标签的作用,我们开始尝试去生成所需要的标签。在这个过程中会发现生成一个标签首先要定义一个标签。如会员等级标签,它的标签值包含 一级会员、二级会员、三级会员。定义好了标签还不够,还需要定期的去更新这个标签,比如用户A因为购买了会员,他的会员等级就会进行变动。
上面的过程其实就属于标签系统中的一部分。在标签系统中,我们可以进行标签管理,标签规则的定义,标签的发布和更新。
标签体系建设完成后,标签系统还会提供人群圈选,人群分析等功能,将标签真正的使用起来,并提供出数据服务给外部系统使用(针对某些人群做活动,发短信)。
标签系统相当于一个引擎,提供了通用的标签能力,针对不同的实体(人,商品...)都具有相同的标签能力。
要实现一个怎样的标签系统
到这里,我们会发现标签系统不只是标签。
以用户为实体来讲,要构建标签,我们需要接入构建标签的基础数据:
用户属性:主要包含了用户的基本属性如年龄、性别、所在地...
用户行为:主要包含了用户的行为数据如购买、下单、支付金额...
这里的接入并不是说真正要提供数据集成的能力,而是需要将上面加工好的数据模型的相关信息接入到标签系统中,如真实的表名,字段名。这样在我们定义标签规则的时候可以去选择基于哪些表和字段来完成标签计算逻辑的生成。
当标签的结果输出后,就可以服务于上层的数据应用层,如:
进行标签的圈群
人群之间的交并差
人群分析
最终需要通过提供数据服务的能力将标签数据,人群数据投放给营销平台使用。
整体架构如下:
标签系统技术概览
系统应用层
标签系统偏向于一个后台管理系统,并没有什么高并发上的潜在问题。整个系统可以基于SpringBoot来实现。
因为涉及到标签的计算和调度,考虑到是在大数据的场景下,需依赖一个功能完善的数据平台来实现,可以选择社区活跃的 dolphinscheduler。并利用其接口提交任务到平台上进行标签的计算和调度。
标签计算引擎
标签在计算逻辑上实际上可以分为离线标签和实时标签。Spark和Flink都支持批处理和流处理。可以结合公司内部情况来进行选择。
标签存储引擎
为了提供给应用层及时的标签查询和圈选的能力,标签的存储需要引入了OLAP引擎,如ClickHouse或者Doris,也可以选择ES。
标签的存储方式也有多种,如大宽表、长表、倒排表,需要基于合适的存储引擎来选择合适的存储方式。