需求分析
企业用户需要分析本公司下经纪人(包括人员增减、构成等)及其房源情况(包括录入量、推广量、VR房源量等),以及效果数据(点击情况、IM联系情况)等,同时系统自动分析优质房源特征,引导经纪人提高房源质量。
平台自动分析房源和客源标签,自动匹配潜在客户,促进房源成交。
平台根据经纪人房源特征和自身营销产品特点,圈定特定人群后进行精准营销。
总体架构
图-1 总体架构
在实际的企业业务开发过程中,会有不同的产品技术团队负责不同的业务模块。当前最流行的是微服务架构,因此在业务层面会有用户库、钱包库(当前项目中不涉及,因此没有画出)、产品库、订单库、客源库(当前项目中暂未涉及因此没有画出),上述库组成了用户的账户体系。本项目是基于房产经纪人自主发布房源背景下,通过平台推广获取客源。因此用户(房产经纪人)需要先购买公司产品,才能继续后续推广流程。
在用户购买营销产品以后,就可以录入自己的房源并进行上下架操作,这个过程就涉及房源库和推广库。
房源上架推广以后,会有客户与经纪人通过IM软件进行联系,这些信息都会存储在IM数据库中,所以在画像的时候也会涉及IM库的数据同步。
房源在平台推广展示以后,为了知道它们的效果我们会监控房源的点击情况、浏览时长、以及特定区域的点击(比如生成分享二维码等操作)情况,这时需要进行埋点操作。
另外由于个别经纪人为了获客,会故意放一些低价房源上去,因此我们除了在我们自己的数据库中进行横向比对之外,还会抓取一些外部房产站点的公开数据,以便在更大的范围内评估房源的真实性。
由于数据大部分都分散在不同的关系数据库中,还有一些Web访问日志(点击量)、一些结构化的操作数据(埋点数据),要综合分析的话必须把它们放到一起进行,因此我们引入Hadoop的大数据平台。
要将分散在各处的数据往Haddop平台导入保存到HDFS的时候,就涉及到了数据采集。在这一步,结构化的关系库数据我们通过Sqoop导入进去,非结构化的数据我们通常采用Flume将日志或者其它文件类信息导入;在企业实际开发过程中,经常还会将一些业务过程数据或者一些文本数据放入Kafka,经由Flume写入到HDFS中。
将数据写入到HDFS之后,就可以进行数据指标计算、打标签的操作了。这个过程涉及到两种:一种是离线的数据计算,内部都是通过MapReduce来进行,随着技术迭代,通常采用SparkSQL或者HiveSQL(HQL)来完成。另外一类是实时计算:就是把采集到的数据进行实时处理,通常用Flink或者SparkStreaming处理。处理之后的数据,根据实际业务需要,通常会放入列式数据库(如ClickHouse、Vertica)或者ES中,方便后续业务进行OLAP(在线联机分析处理)或者相似性数据抽取,也有的业务场景会将结果数据再次送回给Mysql等关系型数据库之中。在一些场景中也会基于机器学习进行智能特征提取、归类等。通常在大数据的处理过程中,还有两个重要的模块:一个是资源调度模块,用来自动分配各种计算任务并汇总结果,通常选择Yarn;由于大数据中的数据来源复杂,任务繁多,而且不同任务之间可能还有前后依赖,因此需要专门的任务编排、调度软件,通常选择Azkaban或者Oozie。
有了上面所述的大数据研发平台后,我们就可以进行各种指标计算、标签提取等工作了。但在实际业务开发过程中,如果不涉及一些特殊算法类处理操作的话,大部分工作都可以通过HQL或者SparkSQL来完成。因此大部分企业都会在大数据基础技术平台之上再搭建一层数据中台系统,方便企业内部人员快速开发。这里和开发人员最直接相关的是一个企业内部研发的HQL或者SparkSQL的编写、调试窗口,以及结果导出配置。当然实际过程中还会有数据的自助查询系统、以及数据集成的配置系统,方便快速收集数据、查看已有数据。考虑到数据的安全性以及为了统一管理,还会有专门的数据治理模块来支撑:该模块除了进行数据安全管理、元数据管理(包括字段标准化、数据结构定义、数据流转的血缘关系等)之外,还会进行数据生命周期管理。
有了数据中台之后就可以通过该平台进行标签生产或者指标计算了,标签通常分为统计类标签和规则类标签,统计类就是直接根据原始数据通过统计SQL得出,比如性别、地区标签等;规则类标签是根据一定规则得出的标签,通常由业务或者运营人员定义,比如7天内有登录行为的认为是活跃用户,需要打上活跃用户的标签。还有一类是通过机器学习提取特征或者聚类以后获得的标签。这些标签通常会存储在ClickHouse或者Vertica或者ElasticSearch中,方便检索或者做相似度计算。有的数据会回写到关系型数据库中方便查找。
在打完标签或者计算完相关指标之后,就可以进行实际的业务开发,一般通过Java系的SpringBoot、Mybatis等框架读取上面的结果,然后进行系统展示。或者通过定时扫描特定标签进行风险控制。
技术选型
针对上面的技术框架,我们仔细来看看每层都需要用到哪些技术,以及它们的优缺点。我们在进行技术选择的时候主要考虑的因素有:业务需求、技术成熟度、数据量大小、开发上手成本、维护成本。