概述
不以需求为目的的技术研究都是耍流氓
由于公司业务的快速发展,以及运营部门的需求,需要实现投资用户的月账单功能。
数据背景
目前平台投资用户57万多,投资流水数据已超过千万级,另外还需要统计用户的充值、提现、回款本金、利息、奖励、红包、区分各种产品的分类统计(定期、活期)、历史投资分布、收益趋势、打败多少用户、月度理财之星等等指标。
技术选型背景
在此之前就有类似需求,统计2016年投资用户的年度账单。当时部门几个核心的人员也针对年度账单做了分析及技术选型,有考虑定时任务多线程跑批、存储过程、读写库分离等,甚至为了不影响平台应用的资源,单独购买数据库跑批。最终的方案是多线程(10个线程)通过java调用、数据库读写分离、单独服务器、单独数据库,进行跑批实现;当然最终的结果也是顺利实现了,但过程不尽人意,记得应该是两个研发工程师,用了近两个星期的时间实现,包括梳理数据、测试数据、核对数据、需求变更、重跑等等,跑批的时间将近花了三天的时间,这不管是效率上、时效性上、人力成本、服务器成本上都是不划算的。
因为有了这次经历,再加上2017年规划,各部门提出了各种报表、智能营销、精准营销、实时结果反馈等各种需求,所以就有了预研阿里云大数据平台——数加的开始(这里不是打广告,有关数加平台,有兴趣的可自行从阿里云了解)。目前我们利用数加平台主要实现了两大功能:月账单(各种统计需求)、大屏流量墙。
预研数加平台这里要特别感谢柯里(百香果)提供了不少的帮助。
月账单
月账单:
借助数加平台的大数据开发套件实现。
什么是大数据开发套件?
“大数据开发套件”是阿里云推出的大数据领域平台级产品,提供一站式大数据开发、数据权限管理、任务离线调度等功能。其底层依赖阿里云自主研发的大数据计算服务 MaxCompute(原 ODPS),提供海量任务的离线加工、分析、云数仓搭建、大数据挖掘等应用于多种场景的功能。‘开箱即用’的使用方式,让用户不必担心底层集群的搭建和运维所带来的成本和繁琐。
产品架构图
如上图那么我们利用大数据开发套件,具体用来做了什么处理呢?
1、数据同步和存储,支持从阿里云数据库同步源数据到大数据开发套件;前提是根据需要提取的数据进行建表,可以根据业务模型创建宽表,在此表的基础上进行数据清洗和处理,得到结果数据再进行存储;
2、利用MaxCompute支持的SQL语句处理;
3、配置工作流,支持复杂的业务按流程逐步执行;
4、支持ETL调度,可配制高度周期,以及日志的输出和跟踪;
5、支持任务监控,出错及时报警和处理;
6、结果输出回导至现网数据库,以供业务系统调用显示;
开发过程中,也很好的支持了开发、调试、测试、上线的一体系的支持,所以运用到业务系统中的可行性是很大的,据了解目前已很多公司已商用;当然大数据开发套件还有很多功能暂时没有用到,比如机器学习、支持自定义函数、java调用、BI报表输出、SDK获取结果等等,有兴趣的同学可以从阿里云更深入的了解;
https://help.aliyun.com/product/30254.html
月账单功能的整体流程如下图:
目前月账单功能顺利上线,那么大家肯定想知道的通过阿里云的大数据开发套件,体现了哪些好处呢?
后面再说~
大屏流量墙
借助数加平台的流计算实现。主要体现出数据的实时情况,用户实时注册及显示其所在市、用户投资时连线到借款人所在地(取经纬进行飞线)、实时的借款数据、投资数据等等
什么是流计算?
顾名思义,流计算通俗的讲,就是对产生的一条条事件流、数据流进行实时计算和处理;
通常而言,流计算具备三大类特点:
实时(realtime)且无界(unbounded)的数据流
流计算面对计算的,是实时且流式的,流数据是按照时间发生顺序地被流计算订阅和消费。且由于数据发生的持续性,数据流将长久且持续地集成进入流计算系统。例如,对于网站的访问点击日志流,只要网站不关闭其点击日志流将一直不停产生并进入流计算系统。因此,对于流系统而言,数据是实时且不终止(无界)的。
持续(continuos)且高效的计算
流计算是一种”事件触发”的计算模式,触发源就是上述的无界流式数据。一旦有新的流数据进入流计算,流计算立刻发起并进行一次计算任务,因此整个流计算是持续进行的计算
流式(streaming)且实时的数据集成 ·
流数据触发一次流计算的计算结果,可以被直接写入目的数据存储,例如将计算后的报表数据直接写入RDS进行报表展示。因此流数据的计算结果可以类似流式数据一样持续写入目的数据存储。
全链路流计算示意
大屏流量墙的整体流程如下图:
StreamCompute的代码示例:
-- 1. 创建源表 (以下实例是产生随机字符串的源头表)
CREATE STREAM TABLE my_source(word STRING);
-- 2. 创建结果表 (以下是不产生对外输出的结果表)
CREATE RESULT TABLE my_result(word STRING, cnt BIGINT);
-- 3. 计算逻辑
INSERT INTO my_result select
t.word,
COUNT(1)
FROM my_source t
GROUP BY t.word;
-- 4. 代码完成后,请点击 "调试任务",进行任务调试。任务调试可以mock输入/输出数据,方便用户进行数据调试。
-- 5. 调试完成后,请点击"上线任务",任务发布到"数据运维"页面进行生产运行。
想学的也可以看数加体验馆的大屏教程:https://data.aliyun.com/experience/case8
最终大屏显示的效果图:
总结
使用数加平台后,给我们带来了什么
优点:
1、人力成本方面,相比较年度账单,人力成本大幅减少,一个开发人员一周内可以完全实现(还是初次接触)
2、业务执行效率大幅提高,阿里云其Maxcompute适用于100GB以上规模的存储及计算需求,最大可达EB级别。目前我们的数据大小只能算是沧海一粟吧~!~ MaxCompute产品地址:https://www.aliyun.com/product/odps 大数据开发套件地址:https://data.aliyun.com/product/ide
3、运算能力也大幅提升,还是以年度账单为例比较,目前上线初次全量数据跑,基本是在30分钟以内完成。
4、大数据的开发门槛降低,所谓专业的事交给专业的人来做,我们不需要关心细节,做的只是梳理业务、建模、配置、提取即可;
5、隔离性好,基本不需要渗入到业务系统实现;
说了优点,再说点缺点:
1、Maxcompute的SQL支持方面有较多限制,当然有关系型数据库SQL经验的同鞋上手应该是很快的。
2、在跑批过程当中,有出现过一次数据回写数据库失败的问题。
3、开发环境与测试环境隔离不是很好,只能通过权限来控制。
4、有些产品还在公测阶段,有一定的小BUG,比如数据有重复,需要自行去重。
本文作者: Tonson(农金圈研发团队),热爱技术的java攻城狮。