BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

樊振华:金融行业去IOE没那么困难
录制于:

| 受访者 樊振华 关注 0 他的粉丝 作者 魏星 关注 0 他的粉丝 发布于 2015年6月3日 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!
31:25

个人简介 樊振华,天弘基金创新支持部总经理,硕士研究生。余额宝/增利宝项目技术负责人,带领团队完成了金融行业第一个基于云计算完全去IOE的大型批量结算系统的研发;积极主导并推动基于ODPS/OSS等产品构建天弘特色的云数据中心,引领团队对余额宝的数据尝试做多维度全样化的深度挖掘和分析。专注互联网金融、云计算、大数据、移动互联网等领域的发展动态和创新。 2004年加入天弘基金,我从一个开发者转变为一个资深架构,并一直专注于基金行业的业务发展、深刻理解基金行业的IT治理,经常思考和积极尝试如何能用技术手段提高业务运作的效率和自动化程度。2010年主导了第一只债券分级基金的系统设计;2013年主动迎接互联网金融的浪潮,作为天弘基金余额宝/增利宝项目的技术负责人。 我希望技术创新能成为金融领域的关键竞争力,能让技术的价值最大化一直是我努力的方向。

QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、杭州、旧金山召开。自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。

   

1. InfoQ的网友大家好,现在我们是在QCon2015北京现场,今天做客我们专访间的是天弘基金创新支持部总经理樊振华先生。很高兴樊振华先生接受我们的采访。金融行业在去IOE方面最大的技术难点在于去O,能给我们解释一下当时余额宝在去O方面是怎样进行的吗?

樊振华:我们当时在去O阶段确实面临了很多挑战。我们整个团队不熟悉MySQL,它的编译是最大的挑战。

因为使用Oracle可以简单有效地做很复杂的多表关系,比如编写一个SELECT或者插入视图,所以曾经我们的开发人员都依赖于Oracle。用金融行业的话来说,Oracle是一个非常优秀的数据库,它的存储过程可以让你不用太关注它性能方面的问题。Oracle帮你解决了很多问题,它对复杂的脚本、视图的编汇,甚至部分事务的处理,让程序开发变简单,或者说变傻瓜式了。

阿里云包括蚂蚁金服当时派出MySQL这方面的专家给我们提供技术支持,帮助我们把基于Oracle的脚本导出,告诉我们如何编译。但在MySQL里不能照搬Oracle时的做法。比如我们的Oracle里面有很复杂的一个SQL,既有视图,又有存储过程,还包括SQL脚本,同时还必须要做到多表关系,因为写INSERT时可能需要批量插入一些语句。一般来说这需要关联几张表格,但现在使用MySQL,我们最多只能通过两张表进行关联,并且单张表里面不能有太多的字段。这就涉及到我们在转换SQL时对整个基于Oracle的业务进行重构的问题。

比如将Procedure里的那些逻辑,搬到应用层面,转换成简单的查询、修改、插入、删除。我们和数据库进行交互,变成简简单单的UPDATE,INSERT,或者DELETE,这样一个动作,而且这个脚本不能够太复杂。这是因为MySQL是不支持Oracle的存储过程的,所以去Oracle首先任务就是改变逻辑,把基于Oracle的所有存储过程全部砍掉。而把整个逻辑层搬到应用层去,来减轻你对RDS、对MySQL的依赖,是所谓去Oracle的目的。

我们有很多工作是通过结算系统进行数据分配,而整套系统的批量结算有可能要在短短的半个小时内,或者一二十分钟之内,批量处理整天的数据,并且全部处理完。当时发现SQL执行起来效率很低,需要我们不断地优化。基于MySQL,我们考虑到它事务处理的极限,因此开始更关注于应用层,如果不减轻应用层负担的话,数据库根本无法负担。所以怎么能让MySQL不过多的解决问题,这点的话是比较大的挑战。我们需要从脚本的写法上减轻它的处理能力,让它简单化。由于当时在Oracle上进行时没有这样的问题,所以我们原来的开发人员也不太注重应用层面的优化。现在把原本属于Oracle处理的东西交给了应用层,开发人员一下子要去想很多事情,压力变得非常大。这个时候,阿里云蚂蚁金服的专家都介入进来,不断地复核我们开发人员写的脚本和应用,然后让他们反复地修正。

我们的数据分配是十分复杂的东西,比如基金资产,如果有增值部分,这个部分要分配到你每个账户里面。如果当天进行了交易,或者进行了赎回等等。这种交易和赎回操作都是要参与数据分配的。而赎回的那一部分是否走收益,还需要再计算,甚至还有尾差处理。这一块仅收益分配的逻辑处理起来就非常复杂。

原来我们基于Oracle时不用关心这些问题,我给你传入一个值,你就做一次收益分配,然后行了,因为有逻辑在帮我工作。但我们收益分配逻辑很多是写在Oracle里的,在转换SQL时我们要把这一部分全部剥离出去,放到应用层,这就是个非常复杂的大挑战。

一般作为开发者是不愿意这么做的,大家对这个不熟悉,工作量又很大,还不知道能不能保证功能转移到应用层后计算的正确性。就好象我们与金正合作过,他们会有巨大的抵触心理,对这件事根本没有信心,也不知道这么做究竟行不行。而且Oracle的数据连接之所以比较简单,是因为它支持多个驱动,包括应用层和数据库连接。但Oracle对驱动的支持与我们后期二期上云的数据连接方法不一样,转换后如果使用原来的驱动可能无法有效地支持MySQL的通讯——MySQL的通讯在一个中间层,或者叫做引擎。我们的程序都是用C来写的,而蚂蚁金服阿里巴巴,他们都是基于MySQL用Java来写的,我们没有Java这方面的经验,他们也没有C方面的经验,这就是说要完全靠自己去琢磨怎么做这个事。

   

2. 那个驱动引擎之后经过了你们的有很多改造吗?

樊振华:蚂蚁与阿里云也是不断地针对这这方面,找了一个通用的。这里虽然好多问题都是交给应用层的,但不能把所有的对这些事务的控制权全部都交给应用层。我必须要把整个逻辑想得清清楚楚,放任不管,这整个过程都必须要去关注,对人的要求非常高,所以去O最大的压力在这块。

   

3. 当时去O的初衷是为了降低成本,但是按您刚才的说法看起来,在去O的过程中还必须开发一套新的适用于MySQL的系统,这需要增加大量人工成本。那么就现在去O完成后的情况看,您觉得相对于预期,这个成本下降得如何呢?

樊振华:我认为现在的成本是非常理想的。当时我们的一期只基于IOE的话是投入了四百万.如果我们自己来构建这套东西,采购IBM Services,EMC存储,Oracle数据库,包括还有很多的中间件,之后还要基于二期的性能要求和两亿用户这个指标来投入,并且还要做容灾,做双活的话,那么没有五千甚至八千万是搞不定的。

   

4. 那去O之后这个比例能降多少?

樊振华:去O之后从我们二期来看,我们需要新进三百台RDS,将近二百五十台的ECS,这样这块资源我们一年的投入有八百万左右。比如以前你需要向公司要五千万甚至七八千而现在的投入是一千万以内。原来天弘是比较薄弱的,七八千万中小型基金公司怎么承受得了。而去O之后的投入的成本公司还是可以承受的。余额宝是个低收入产品,我们配以一个允许范围内基于业务的技术投入,使之成为良性的盈利模式,是非常符合成本要求的。

   

5. 金融行业的系统架构与互联网或者传统电商的系统架构有什么不同?

樊振华:在架构层面上,金融业可能在分布式处理方面不是支持得特别到位。他们过多的侧重于大型机,特别在意机器的性能,希望把复杂的应用都交给它们来处理。我认为对于金融行业中尤其是我们这一类来说,对分布式处理的需求其实不高。很多金融企业或者基金公司,实际上并没有面临大量用户,他的用户群体是一个数百万内的小范围的群体。但随着发展,当你交易量面临每天千万级万万级的用户的时候,那就不一样了。对并发的要求变高就势必需要分布式处理了。这个发展中的转换过程对普通金融单位来说是一个比较大的挑战。而互联网技术对于传统的金融业来讲最大的优势在于平民化。因为互联网最早给人感觉就是免费。它不像金融感觉上那么高端。其实所谓的高端就是包装多,包装上都是成本。这点是他们区别比较大的地方。

   

6. 您演讲时我们有留意到在余额宝二期工程里面除了云计算方面的创新,还有代码的重构。您能谈一谈二期工程中架构和代码重构的工作么?

樊振华:代码重构第一个就是刚才我所说的去O,第二个是我们的分布式计算,我们分布式计算在应用层。按照以前的考虑,就是一个连接对应一个实例,信息反馈非常明显。而在变成同时连接多个实例之后,我必须具备一个能够反馈这些实例是否成功的功能,这就需要产生一个不间断的消息通讯机制,使你能够监测它成功分配了没有。这方面对整个逻辑来说要求会更高一些。

在二期代码重构方面主要是去保证性能的稳定,我认为在程序开发中要保证事务的一致性,同时保证数据的正确性。在这方面会需要很多突破,重构一些传统的算法,以及在前置机这方面我们也做了不小的改变。

   

7. 余额宝应该是第一个把金融行业放到云上的案例,在您看来把金融业务放到云上有什么代表性的问题吗?

樊振华:容易出现的问题比如现在的节点数很多,首先数据呈递特别麻烦。我们把数据记录保存起来给业务使用,放在电脑后连着五十个数据库里,但是业务不关系这个,他关心的是我是不是能够去抽样查数据。他需要在一个显示器里面能够看到所有的数据的方式,这是比较麻烦的事情。可以假设成原来的Oracle是一张表,业务跑去找就完事了,但现在突然变成一千张表,每张表的数据还分散在不同的数据库里,为了查询一条数据就要做很多事。

其次是监控,三百台机器,大量应用,能不能事前知道哪些有问题,相当于预警监控。现在在这方面不是特别完整,主要是没有一个整体概念,我们可能收到一些报警,比如短信过来了,通过短信通知我们出现问题,然后我们去查,感觉像黑盒子的作用。我们不能像看一张图表一样去清晰地观察每个节点的状态。

还有一些历史数据之类的,包括在线数据,并不是都能实时的录入到数据仓库的。同时当天的数据是在当前库,历史的数据是在历史库,这也关系到呈现数据这方面的事情,需要不断的出现跨库操作,所以我们下一步在这些地方还要再去优化。

   

8. 金融行业一般对数据的安全性要求是特别高的,你们在数据安全方面是怎么做的?

樊振华:安全方面是基于金融云。阿里云蚂蚁金服也是这样,我们希望针对金融用户建立一个比较符合金融安全标准的环境,所以阿里云就这方面专门搭建了一个金融云,在硬件和网络环境的安全标准上一直是遵循银行的要求。因为客观上看银行的标准是要比证券基金的标准更高的,而且我们的主环境也全部是在金融云上的,所以我们相信与阿里云配合做这个项目会让我们用户非常安全。当然这里也会有一个类似防火墙一样的东西,来保证我们的数据隐私,不产生串联。

   

9. 您曾在接受采访的时候说2013年是您人生中最大考验的一年,余额宝入云后的初期的表现如何?是不是达到您预期了?

樊振华:总体上是达到预期了。这个达到所谓的预期就是我们能否够准确、顺畅地支撑我们每天的数据处理,以及能否够容纳业务的爆炸式增长,这是我最关心的。虽然有一点瑕疵,比如我们的业务人员看来使用不方便的地方,或者我们的IT人员觉得的在文件交互方面可能的风险点,但这些都是可以接受的。满足了爆炸式业务增长的这样一个主要的需求,我认为已经完成任务了。能够让我的数据、账户,每天都能通过数据分配准确地对用户呈现出来,是我最主要的目标。至于其他工作,相对于这个任务都可以慢慢来做。任何的事物,任何的创新,不可能是十全十美的。对于这样的业务目标能完成百分之七八十,就算是非常成功的创新项目,所以说我觉得很欣慰。

   

10. 在入云不久后你们就建了大数据中心,这个大数据中心是在你们当时的规划中呢,还是因为之后要满足业务的爆炸增长才建立的?

樊振华:建立大数据中心是我们做余额宝二期的时候就设想的。因为我们知道余额宝属于增长量非常快的业务。为了能够去更好地发现这些数据的价值,对资金的动向进行预测。基于数据能够满足我们很多的需求,所以尝试去规划一个数据中心。

我们当时人力比较少,工作重心在前期只能首先保障我们入云的顺畅性。之后因为有很多数据是接入OSS的,包括天津。把本地数据同步到天津的压力非常大,而且我们在天津的容量也是有限的,所以规划数据中心成立云计算就成了下一步。具体的说,是因为我们数据增长非常快,而且在天津的单位存储成本非常高,每天都是几十G上百G,不仅仅是那些硬盘,甚至只是维护那套东西成本就非常高了,并且这种方式的数据提取的效率非常低,更何况当时基于Oracle这块还没有做水平或垂直的分表,单独查询一条记录或者做一个简单的统计都是很痛苦的事情,所以建立数据中心的需求十分迫切。

当时我们选用了阿里巴巴阿里云的一些他们内部的比较成熟的产品,比如ODPS。当时ODPS还没有商用化,但因为ODPS在北京,并且是基于MapReduce的,所以实际上是和Hadoop一样的。于是我们就基于他的产品,做了一个数据中心的建设,这正好也能符合我们未来的一个需求嘛。

   

11. 说到分布式云计算,余额宝上在各个技术环节都有一些应用,这种架构有什么好处?您刚才也说了传统互联网公司的分布式用的比较多,但是金融行业相对来说需求不那么强,可是余额宝这样做了,并且把分布式运用到了你的金融产品里,为什么?

樊振华:首先这种架构具有弹性,它降低了单个节点的压力,同时根据业务量能够做出调整。云计算本身强调的就是弹性。业务量发展快,可以立即扩容,业务量收缩,可以收减。弹性计算是非常重要的点,传统架构确实还做不到,一般都是在前期依据未来三年的规划做一年的投入。实际上运营投入可能会浪费,比如采购一大堆设备投入了三年发现没有用,而IT设备的生命周期也就三到五年,对于公司来讲这是造成了巨大的资源浪费,所以传统架构明显显得落后。而且你会发现你的周期总是踩不到点上,投入还非常大,精神非常紧张。我们选用云计算这种弹性架构,确实能让我们的资源配置效率达到最优最好。把基础层面的事情交给别人去做,也让我们的工作重心能够集中在应用层面。我们不必做到面面俱到,要相信专业性,要明白我们的重点是什么哪里。

   

12. 您提到过一些对余额宝数据的自动化的想法, 能跟我们聊一聊吗?

樊振华:所谓自动化是阿里巴巴所说的数据化运营。需要强调就是,互联网在服务方面使我们得以与用户走得更近,也使我们内部数据传输更高速。不论是针对用户,还是针对我们自己。从互联网的角度来看,数据化运营能够及时地响应外界的变化,包括风险控制,客户服务,数据分析等等。比如出现交易异常,那么数据会通过联网迅速通知客服服务系统,就像我们的在线客服或者语音坐席,用户的问题可以立马得到反馈。又比如结算工作,其实业务人员算是我们内部的客户,我们设计的产品或者我们设计的系统,目的是让业务人员能够更有效地使用,而要求他去懂很多的IT技术,让他作为整个信息流转中的一环,快速地做出响应,实现数据化运营的就是这样一个目标,也就是所谓的自动化。

InfoQ:好,谢谢您今天接受我们的采访。

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT