一, 背景
年底很多移动产品都会推出自己的年度账单, 每年都会引起大众媒体的关注. 今年有幸参与了宜信财富 App 年度账单的开发, 本文将带大家探索宜信财富年度账单背后的技术架构和研发逻辑, 希望可以给大家带来一些思路上的启发.
二, 前端整体架构和执行流程
宜信财富年度账单前端架构所采用的技术栈包括:
前端页面是用 H5 制作;
数据加载进度百分比, 技术用到 swiper 插件和一些 CSS3 动效;
海报生成用到了 canvas 图片合成, 把海报背景和二维码合二为一.
为了完成 MGM 的追踪, 在二维码中嵌入 M1 信息.
三, 数据来源和数据处理
本次年度账单涉及客户维度, 销售维度, 客户标签等数据, 其中客户维度包括活动参与, 文章, 视频浏览等数据. 这部分数据的整合来源于数据中台的主题数据. 以下是数据中台的架构图:
ODS: 数据来源层, 存放从业务系统抽取过来的数据, 业务系统中的原始数据经过抽取, 洗净, 传输装入本层. 这层数据接近原始数据, 却不等同原始数据, 数据装入的时候进行了去重, 去噪, 表命名, 字段命名等一系列规范操作.
DW: 数据仓库层, 该层是数据仓库的主体, 将 ODS 层的数据按照主题建立数据模型, 是为企业所有级别的决策制定过程, 提供所有类型数据支持的战略集合, 是一个包含所有主题的通用的集合.
DM: 数据集市层, 是以某个业务应用为出发点而生成的字段比较的宽表, 用于提供后续的业务查询, OLAP 分析, 数据分发等, 该层数据主要由轻度汇总层和明细层数据计算生成.
在数据中台的架构上, 我们建立了 "以客户为中心" 的标签体系. 该套标签体系按照人口属性, 价值指标, 地理指标, 心理指标等几大类对数据进行分层管理, 标签的加工方式主要来源于 DW 和 DM 层数据的轻量汇总或者衍生加工, 以及部分模型生成的产品预测等标签. 这套标签体系支持 360 度客户画像以及分析关键接触点, 提供基于跨渠道全流客户体验优化和关键触点优化.
本次账单的数据主要来源于业务操作, 用户管理等源系统数据, 这些数据被结构化地存储在数据库集群中, 且都已接入数据中台, 并按照定时任务或者实时数据落入对应主题域. 账单数据通过其相应主题数据加工而成, 前端通过接口 API 访问数据.
账单需求里的 "销售评价消息实时推送" 和 "账单传播短信发送" 都是通过智能运营系统支持的, 该系统是集运营活动创建, 执行, 管理, 反馈, 迭代为一体的自动化平台, 能够通过用户属性, 标签, 计划, 操作等数据筛选客群, 实现目标的精准触达, 提升关键指标和运营效率.
下面是智能运营系统创建运营计划流程图:
销售评价消息实时推送: 该功能依赖 wormhole 实时平台将数据落到数据库, 然后在智能运营系统里配置数据, 最终通过消息中心和极光将消息推送到产品终端.
账单传播短信发送: 按照业务规则筛选符合条件的客群, 在智能运营系统里配置短信模板等内容, 然后调用 notify 通过短信平台将短信发送给客户.
四, 技术后台
用户数据来源于宜信财富平台本身数据, 包含: 基础信息, 浏览信息, 参与活动等多项数据, 如何保证数据准确, 高效地传达到前端是后端开发所必须保障的. 资产平台采用了 spring+jersery+oracle+Redis+jetCache 的技术架构, 为了提升用户体验度, 加快响应时间, 数据存储上该项目采用了缓存, 非关系数据库和传统关系数据库灵活结合的方式, 更好地提供数据支撑.
在对接年度账单需求时, 我们也着重考虑了接口响应时间. 年度账单用户数据包括用户活动数据及操作数据两张表, 其中操作数据是一个重量级表格, 为了减少数据库的 IO 操作, 采用了两种方式来减少 IO 时间:
根据数据组提供的标签, 尽量减少访问资产数据表的几率;
利用 java8 的 Stream 的新特性, 将复杂的 SQL 逻辑放进代码中进行处理.
Stream 不是集合元素, 它不是数据结构并不保存数据, 它是有关算法和计算的, 更像一个高级版本的 Iterator.
此外 Stream 还提供了并行技术, 在不关注集合内部数据顺序的时候, 可以采用并行 Stream 拆解任务来加速处理过程. 例如在做统计, 需要将子产品进行汇总, 或其他操作时.
如果将复杂的代码逻辑直接用 SQL 来实现, 代码会非常冗长, 执行效率也不高. 代码的逻辑是使用并行流 Stream, 根据类型对相关数据进行分类汇总, 并且根据本次需求的业务场景将某一子类划分到另一个类别下.
使用 Stream 并行流代替 SQL 逻辑可以加速执行效率, 减少响应时间. 感兴趣的同学如果想了解 Stream 的更多特性, 可以参考技术文档. Stream 的应用能够让代码逻辑更加清晰, 提高速度.
五, 总结
此项目是由多个团队共同协作完成, 本文对年度账单需求做了一次技术层面的梳理, 由于时间比较匆忙, 内容不太详细, 希望可以给大家带来一些开发思路, 也希望用户可以真切感受到我们的用心.
来源: http://www.bubuko.com/infodetail-3363365.html