众安在线财产保险股份有限公司是中国首家互联网保险公司,由蚂蚁金服、中国平安和腾讯于2013年联合发起设立。众安专注于应用新技术重塑保险价值链,围绕健康、数字生活、消费金融、汽车四大生态,以科技服务新生代,为其提供个性化、定制化、智能化的新保险。业务和关联公司的业务包括:众安保险、众安医疗、众安小贷、众安科技、众安经纪、众安国际、众安银行等。截至2023年中,众安服务超过5亿用户,累计出具约574亿张保单。
为了解决这一问题,众安保险建设了CDP平台。该平台的核心职责是整合所有用户数据,构建全面的用户标签和客群体系,并利用其强大的数据分析能力为自动化营销提供数据支持。
CDP平台的建设目标主要包括以下几点:
基于上述建设目标,众安保险目前已形成了完整的CDP解决方案,该方案包括以下几个关键步骤:
CDP产品架构如上图所示。全域数据接入之后,这些数据就可以搭建用户数据中心、实时事件中心、客群画像以及营销流程。用户数据中心是客群画像的基石,并与客群画像、实时事件中心一同支撑营销流程的数据需求。数据服务层则包括用户数据服务、客群圈选、营销策略、实时事件、AB实验和实时效果分析回收在内的全方位数据服务,满足各业务场景的数据需求。
CDP平台架构1.0如上图所示,离线数据和实时数据的处理流程如下:
然而,从架构图中可以明显看出,标签计算和ID图谱计算这一层涉及了非常多的技术栈,包含Impala、Spark、Nebula以及Hbase。这些过多的组件导致了离线标签、实时标签以及图数据存储的不统一、各场景数据分散存储,形成了数据孤岛。
在这种情况下,当需进行整体视图计算或为上层提供服务时,就需要打通所有的数据,这无疑增加了大量数据传输和数据重复存储的成本。此外,由于各类数据存储方案的差异,还需要使用较大的CDH集群和Nebula图数据库集群,进一步提高了集群资源与维护成本。
为了解决数据存储的不一致性和高昂成本问题,我们决定进行架构升级,并选择ApacheDoris作为核心组件。我们的升级目标是希望通过引入Doris来统一技术栈,实现实时和离线数据存储和计算的整合,从而打破数据孤岛,大幅度降低数据存储和资源维护的成本。在实际的应用中,Doris完美地满足了我们的需求,使得整体架构变得更精简高效。
对于离线数据,我们采用了Doris的StreamLoad功能,轻松地从离线数仓中将数据抽取到Doris中。而对于实时数据,则通过FlinkConnector与StreamLoad的结合,将实时事件和实时标签无缝导入到Doris中。基于Doris强大的向量化计算引擎,我们不仅实现了OneID计算、离线/实时标签的存储和计算、客群圈选、实时事件存储,还支持了实时分析等多样化需求,真正实现了技术栈的统一。
引入Doris后,我们还收获了以下显著的收益:
为满足不同场景的数据集成需求,CDP平台主要分为三个板块:
1.构建ID图谱
我们在现有系统中配置了ID图谱的点关系,这些关系以用户为中心,形成了复杂的网络结构。举例说明:假设某用户在体系A拥有用户ID,并且绑定的公众号,这样就形成了OpenID绑定关系。随着用户的使用,他可能注册了手机号,那么手机号跟体系A用户ID之间便建立了绑定关系。如果用户在体系A也进行了实名,那么身份证和注册手机号也会建立绑定关系。
2.构建OneID
基于用户各个业务线之间点和边的关系,我们会将用户在不同业务线中的信息全部抽取出来,放入一张大表里面进行UnionAll操作。这张表包含了手机号、体系A用户ID、体系B用户ID、身份证号和OpenID关键信息。OneID的构建流程如下:
结合上图以及构建流程,可以得出结论:1-4行是用户1,5-6行是用户2。
在标签体系中,有一些简单的配置规则:
ApacheDoris在标签体系中的应用主要包含以下四个方面:
1.离线标签处理:由于拥有2000+较大量级的标签一级用户,当遇到高峰期并发宽表写入时,全量更新所有列可能会出现内存不足的问题。为避免该问题,我们利用Doris的InsertIntoSelect功能,在session变量中打开部分列更新开关,只更新目标表中需要修改的列,这样可显著减少内存消耗,以提升全量导入的稳定性。
在be.conf中调整BE参数:
storage_page_cache_limit=40%
-在建表时调整表属性:enable_unique_key_merge_on_write=truestore_row_column=truelight_schema_change=true