年末不少移动产品都会推出本身的年度帐单,每一年都会引发大众媒体的关注。今年有幸参与了宜信财富APP年度帐单的开发,本文将带你们探索宜信财富年度帐单背后的技术架构和研发逻辑,但愿能够给你们带来一些思路上的启发。前端
宜信财富年度帐单前端架构所采用的技术栈包括:java
本次年度帐单涉及客户维度、销售维度、客户标签等数据,其中客户维度包括活动参与、文章、视频浏览等数据。这部分数据的整合来源于数据中台的主题数据。如下是数据中台的架构图:redis
在数据中台的架构上,咱们创建了“以客户为中心”的标签体系。该套标签体系按照人口属性、价值指标、地理指标、心理指标等几大类对数据进行分层管理,标签的加工方式主要来源于DW和DM层数据的轻量汇总或者衍生加工,以及部分模型生成的产品预测等标签。这套标签体系支持360度客户画像以及分析关键接触点,提供基于跨渠道全流客户体验优化和关键触点优化。算法
本次帐单的数据主要来源于业务操做、用户管理等源系统数据,这些数据被结构化地存储在数据库集群中,且都已接入数据中台,并按照定时任务或者实时数据落入对应主题域。帐单数据经过其相应主题数据加工而成,前端经过接口API访问数据。spring
帐单需求里的“销售评价消息实时推送”和“帐单传播短信发送”都是经过智能运营系统支持的,该系统是集运营活动建立、执行、管理、反馈、迭代为一体的自动化平台,可以经过用户属性、标签、计划、操做等数据筛选客群,实现目标的精准触达,提高关键指标和运营效率。数据库
下面是智能运营系统建立运营计划流程图:canvas
用户数据来源于宜信财富平台自己数据,包含:基础信息、浏览信息、参与活动等多项数据,如何保证数据准确、高效地传达到前端是后端开发所必须保障的。资产平台采用了spring+jersery+oracle+redis+jetCache的技术架构,为了提高用户体验度,加快响应时间,数据存储上该项目采用了缓存、非关系数据库和传统关系数据库灵活结合的方式,更好地提供数据支撑。后端
在对接年度帐单需求时,咱们也着重考虑了接口响应时间。年度帐单用户数据包括用户活动数据及操做数据两张表,其中操做数据是一个重量级表格,为了减小数据库的IO操做,采用了两种方式来减小IO时间:缓存
Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,更像一个高级版本的 Iterator。数据结构
此外Stream还提供了并行技术,在不关注集合内部数据顺序的时候,能够采用并行Stream拆解任务来加速处理过程。例如在作统计,须要将子产品进行汇总,或其余操做时。
若是将复杂的代码逻辑直接用SQL来实现,代码会很是冗长,执行效率也不高。代码的逻辑是使用并行流Stream,根据类型对相关数据进行分类汇总,而且根据本次需求的业务场景将某一子类划分到另外一个类别下。
使用Stream并行流代替SQL逻辑能够加速执行效率,减小响应时间。感兴趣的同窗若是想了解Stream的更多特性,能够参考技术文档。Stream的应用可以让代码逻辑更加清晰,提升速度。
此项目是由多个团队共同协做完成,本文对年度帐单需求作了一次技术层面的梳理,因为时间比较匆忙,内容不太详细,但愿能够给你们带来一些开发思路,也但愿用户能够真切感觉到咱们的用心。
来源:宜信财富管理技术团队
做者:米志华、孙李强、李力、赵全超