史晓慕: 付钱拉的挑战还是蛮多的,抽象来说有两个方面,一个方面是人的问题,还有就是业务。所谓的人就是说我们团队做的是互联网化的金融云平台,这个团队由两部分人组成,一部分人做过互联网项目,就是搜狐、金山、新浪互联网这些人,他们身上都有互联网化思维,这些人对金融理解不太深;还有一部分是从美国银行、中国银联、中国银行软件开发中心等银行体系出来的人,这些人汇聚在一起叫互联网金融。这两部分人的行事理念包括对一些事情的见解是不一样的,怎么形成一个自己的企业文化,或者说团队的标准,为人处事的方式方法,这需要磨合,我们在人这一块磨合大概花了一年的时间,大家在互相包容、互相体谅之下找到了一个点,这个点是金融的人也可以靠的上,互联网的人也可以靠的上,这是人这一块。
互联网金融最近比较火,用的人非常多,我们的业务增长量非常高,我是做技术的,我们的技术一直是被业务追着跑,好多时候大家搞的筋疲力尽,但只是初步满足了业务的需求而已,我们现在还处在技术栈的积累期,好多东西做了一遍可能不太好,推翻了重新做,再推翻再重新做,对互联网金融的理解还不是特别深,1.0、2.0,3.0,现在已经做到4.0版本,我们还觉得不够好,后面还要做5.0,6.0。
另外一块就是金融这个东西有一定的门槛,比如你要接中国银联或者一些传统金融机构的服务,很复杂。搞互联网金融的人都是传统行业的人,比如搞资讯类网站的,他也想做金融这块,他们两个中间出现了空白地带,这时候付钱拉要做的事情就是把金融的服务做的简单化,互联网化,适合中小微企业,适合个人创业者。有时候我们也经常恍惚,一会认为自己是互联网,一会又认为自己是传统金融,不知道自己定位的东西准不准。搞金融的说这个一定要安全,不能出任何问题,要非常稳定,搞互联网的说这个东西一定要快,一定要用户体验好,要非常好用。大家看到的点不一样,付钱拉站在中间是想把这两个问题都解决,又要安全稳定又要用户体验好,中间面临的挑战很大。还有一块就是关于付钱拉整体发展性能的问题,总的来说人不够就拿机器来顶,这是我们第一个阶段,服务如果增长的特别特别快,超出了业务预期,刚开始就不停的加硬件,服务器刚开始才8、9台,现在已经是100多台的规模了,还有就是不停的换硬件,还有架构上的一些改进,我们的版本1.0、2.0,3.0不断的在升级,不停的精益求精,一点点把它做的非常好。反过来讲,互联网金融的门槛很高,需要你对金融,对互联网都有了解,还要找一个非常好的点,能把安全、稳定、用户体验、快,这些所有的点取一个折中,这是很难的事情,也是付钱拉一直在致力解决的问题。
2. 你们团队从开始到现在的发展规模是怎样的?
史晓慕: 刚开始组建的时候只有4个人,我是做技术,还有一个做应用架构,是传统金融那边的人,还有一个产品经理,还有一个人负责运行。随着业务量发展,刚开始租了一个办公室装40个人,1.0、2.0这两个版本大概40多个人在开发,到3.0发现不够,3.0是搞SOA、服务化、微服务化,服务编排这些东西,一旦上了这些东西以后你就发现需要的人会更多,这时候我们就重新搬了一个办公区。目前我们研发团队是百人左右的规模,也有几条比较成功的产品线,包括传统金融机构合作的一些项目,自己研发的一些项目,还有大数据、征信这些东西,在我们平台上都有介绍。2016年从年初到现在,8、9个月的时间,我们人员增长的非常多,从40多个人的团队增长了2倍,到现在一百人左右,业务也是呈指数级的增长,做技术的兄弟也很辛苦。这也反映另外一个问题,搞金融或者互联网金融,看着很高大上,但其实做的很辛苦,感觉好像是说开了一个F6战机把导弹一扔就回去,导弹自己能找到地方把军事基地给炸了,其实不是这样,是把衣服脱了,拿了一把刀冲锋陷阵。互联网金融是一个刀刀见血的行业,很辛苦而且竞争非常残酷,没有像大家想的搞金融很厉害,搞IT也很厉害,金融IT结合在一起会更厉害,不是这个概念。所以从这一方面来讲,搞开发,大家不要重复发明轮子,我们也是想把互联网金融做好,如果以后有一些企业或者个人对金融比较感兴趣,有流量,或者有用户,但缺少变现的门路,或者原来做传统行业,现在想做互联网金融,第一件事情要来付钱拉网站逛一逛,看看我们是不是已经造好了轮子给你用,你把轮子装上就能用,而不是发明一些轮子。
史晓慕: 我们经过了四个阶段,现在是4.0版本,做金融系统有几个要点,第一是刚才说的安全,我经常把安全和稳定放在一起,安全是什么意思,一个是没有泄密的风险,还有就是给人一种很踏实,很稳重的感觉,我可能会比别人要慢一点,就像40多岁的人说话很慢,但他有章法,这是金融的一种理解。比如说你去ATM机取钱,打开的速度和响应速度可能不如新浪主页打开的快,但是他不需要那么快,他更需要的是每点一次都有反馈,这是安全、稳定的需要,这也是金融不一样的一点,一个是安全一个是稳定。而且最主要的是金融类服务重试的成本非常高,假设蹦出来一个框,让我输入支付密码,我要做的第一件事情是看看有没有人,要输入的时候还会想,这个电脑是我的吗,会不会中病毒了,有没有木马,这都是要考虑的问题,好不容易把所有心理障碍全克服了,密码输了,你让他重试,用户就崩溃了,他会想要不要再试一次,为什么要试两次,我们只有一次机会为用户提供服务,用户重试的成本非常之高,我不知道别人怎么样,但我是这样的,每次输入密码都很胆颤。还有就是有时候去ATM机,你去之前是不是要看看周围有人没人,取大额资金的时候,甚至还会想要不要叫一个人一起去,这就是另外一点,你只有一次机会,重试的成本非常高。另外一方面,站在用户角度来说,你没有办法让用户去接受一个服务质量稍微有点降低的金融系统,因为对他来说信任你需要很高的成本,可是他一旦信任了你,用了一次你的服务,给了他良好的体验,用户的忠诚度也是很高的,比如说这条路走通了,支付很顺畅,一般情况下他不会再选择别的路,因为对用户来说尝试金融的东西,尝试的越多,泄密的可能性就会越高,所以用户有一定的忠诚度,愿意用这个,前提是你不要伤害他,这就是金融服务和别的服务很不一样的一些地方。
史晓慕: 刚才说到的两类人关于加密这个事曾经吵过无数次,按照传统金融的标准,必须要买一个设备,硬件的加密机,而且是金融系统专用加密机,他们找我说这个东西不买加密做不了;互联网的人就说加密写一个软加密不就完了,随便找一个服务器,布一个服务就可以了,没有必要买加密机,加密机很贵,他们为加密这件事掐过好几架。最终加密机买了,因为在安全这个问题上,站在我的角度,是向传统金融看齐的,安全是非常非常重要的,他们提的任何要求都要满足。然后是密码流程管理规范,比如我们密钥有AB两个密码,分给两个不同的人管理,加密机如果掉电了要启动起来是启动不了的,必须要两张卡,一个插进去读了再一个插进去读了,系统才可以启动起来,有任何一个人不在,加密机就启动不了。总的来说我们付钱拉的金融加密安全力度是向银行系统看齐,在一个水平上,甚至我们比他做的更高一些,好多银行业务不考虑网络攻击,因为银行业务是放在专有网络,我们叫专线上,但是我们的服务不是在专网上,是放在互联网上给中小微企业,个人创业者用的,我们在原来的加密层面上,还做了网络层的好多东西,因为我们没有办法和公网隔离,所以我们对流量、对并发、对大的促销活动,这些在设计之初都考虑到了,最终还是回到一句话,就是我们希望利用用户的仅有的一次机会,为用户提供一次完美的金融体验,让用户觉得我们的平台是安全的、稳定的,是一种很成熟很专业的感觉。
史晓慕: 我讲几个点,第一个点是硬件高可用,软件做的再好如果没有硬件是不行的,第一要多点部署,比如我们的主干机房在北京,一个分点在深圳,还有一个分点在济南,是三个点,一些必要的硬件的基础设施是要到位的,纯靠软件做有时候很辛苦。我们这三个机房还拉了专线,这需要花很多成本做硬件投入,这是第一点。有了硬件投入还要做数据同步,一份数据不能出现两异性,这个数据在这是这样,到了另外一个地方是那样,这是不对的,保证数据的同步非常重要。另外就是效率,有一个实时性的要求。实时性的要求,多点部署的要求,同步数据一致性的要求,在金融上都是非常重要的点。金融业务今年出过几个问题,9月份还是10月份的时候,上午10点,微博上突然爆支付宝不可用了,因为有一个工程机械把光缆挖断了,导致支付宝很多服务不可用。好多时候硬件设备搞两三条,有一些冗余或者有一些铺张浪费,是有必要的。还有一点,故障就是不可用了,高可用并不表示零故障,高可用也可以理解成怎样才能在最短时间内修复。支付宝那么大体量,但用了几个小时就恢复了,我觉得很厉害,因为数据同步断了这件事对于我们来说是不可想象的东西。怎么来实现这种高可用,我觉得非常重要的一点就是做灾备演练,灾备演练是考验一个人或者一个企业真真正正能实现高可用非常非常重要的点,但好多公司不愿意做这个事情,比如把北京机房停掉,所有交易切到深圳机房,这对我们来说是非常大的一个挑战。我们9月份做过一次,10月份又做过一次,9月份只是做数据,10月份是连数据带应用全部切过去,切过去2个小时又切过来,在10月11号凌晨2点我们做了一次这种业务的切换。这种灾备演练我觉得应该定期化日常化去做,训练流血战时不流泪。只要做过,不停的在演练,真正这个事情发生的时候,你就更容易去摆平。但是在迁移过程中,或者在做灾备演练的时候会出问题吗,出问题的可能性很大,所以大家才不愿意去做,站在我们的角度是极力的推动这件事情,所以我觉得我们在高可用上做的一些东西,在业界还是做的比较好的。
6. 您刚才提到灾备演练,一般都是在半夜凌晨时做。
史晓慕: 对,在业务量比较少的时候做。
史晓慕: 我们主干机房在北京,所有的写如果不出问题,都是写到北京,写到master,master会推给slave机器。如果北京突然宕机,会选择两个slave其中的一个作为master,一个新的master就出现了,数据会写到这里面来。还有一个反复的动作,一旦北京恢复了,我们还要切回来,为什么,因为这时候要把深圳写的数据再推到北京,需要来回的做。灾备演练最难的就是这一部分,把数据再反解回来,你要知道断在哪儿,新增了多少,拿过来怎么对。付钱拉的平台里面80%的业务支持自动化实现这点,但是我们有些核心的业务,比如记账业务,如果出现断档的时候会发现有的数据在这边,有的数据在那边,对的时候就要人工的去看数据对的是不是天衣无缝,需要人去检查,我们有20%的业务在做这种跨机房同步的时候,需要做人工check,在没有问题的情况下才能提供服务,会有五到十分钟的波动。
读分两种,有一种读对实时性要求极高,就到主库读,有一种读比如经济分析或经营分析,这种就到备库读。所以我们的BI平台、报表统计平台、风控研究平台,这些东西都是双数据源,任何一个sql改完了要上线运行,首先要经过DBA review,DBA看的时候会问你对数据的及时性要求是多少,是不是要求写入进来马上就要看到,还是允许有5到10分钟延迟,如果可以有延迟就到备库,如果第一时间就要看到结果,那只能在主库查。
史晓慕: 我们也用NoSQL做一些redis集群,memcache也都在用,还有一些基于文件的。数据这块我们是这么划分的,首先划分两点,一部分是结构化数据,一部分是非结构化数据,非结构化数据就是文件,比如身份证扫描件或者用户的签字确认书,都是要上传到服务器上,这种用的是网络存储外加hbase。除了这种还有结构化数据,又分两种,一种是二维化结构数据,他是平面的,另外还有KV结构的,这种是放在redis、memcache里。整体的付钱拉的存储是有一个非常大的集群在做,我们有一个非常强悍的DBA负责所有这些状态,对于我们来说,如果让我做一个选择,比如业务要支持一个东西,DBA要支持一个东西,更多的时候是听取DBA的意见,对于金融来说数据的安全稳定是最重要的,如果一件事业务要这么做,数据说NO,一定要听数据这边的意见,保证数据是安全的、稳定的。
9. 你们在监控方面怎么做的?
史晓慕: 监控我觉得可以分几种,按时间来分,可以分事前的、事中的、事后的。事前的怎么做,更多的是根据历史经验去做分析,比如说十一的时候,1,2,3三天和4,5,6都是不一样的,要区分工作日非工作日,区分国家放没放假,还要区分是不是中华民族传统节日,每天还要根据时段区分,每个月也不一样,每年几月份好几月份不好也都不一样,要发现规律。一旦有了这个规律以后,事前就不让他进来,服务降级,一旦发现确实受不了,就提示现在不要做,事前就能拦住。事中是什么意思,我没拦住,你进来吧,既然进来了就把你服务好,每一个节点的监控需要实时向监控服务中心报数据,服务监控中心会从第一个点开始计算延时,就是有一个节点接收到服务了,告诉监控中心说客人来了,9点来的,我把这个客人交给另外一个同事,就不管了,监控中心说9点来了一个客人,过一会9点01,另外一个同事A接待他,转给B同事,9点02到另外一个同事,直到9点05最后一个人说我把客户送走了,完成一个流程。一旦发现他不上报状态,监控中心就问他为什么不上报状态,有什么问题,事中就是通过上报,另外就是计算,各个节点要报数据,上报完数据监控节点进行很复杂的分析,他利用规则做参照系,然后把今天的数据往参照系贴,贴完发现这个超高,异常了,就要加机器。事后是要做什么,一个交易做完了以后,监控报警要做复核。交易做完了不算完,用户已经得到一个满意的结果,或者说用户已经得到结果,我们要看看到底这个流程执行到不到位,他会再看一遍确认一下,比如去ATM取钱,输密码把钱取出来,有的人取完就走了,有的人不是,他把卡退出来再插进去查询余额,再看交易记录,都没有问题再走。这就是金融系统事后和别人的不同,不光要做,做完了还要反馈,或者叫跟踪,这些东西我们也认为是监控报警的一部分,如果回头看发现有问题,也会报警说有可能会有问题。通过事前、事中、事后的监控报警,就能保证所有的应用如果出现异常在第一时间就会被发现。监控报警是发现,发现并不表示问题解决了,发现问题下一步是有一些半自动化在解决这些问题,但是这部分自动化程度不是特别高,最终还是需要人。监控报警来了以后大家收到短信,比如晚上2、3点大家都睡觉了,这时报警短信来了手机开始振,5到10分钟之内大家全部起床,一个紧急故障小组就出现了,确认网络有没有问题,数据库有没有问题。这就是监控报警下面的环节了,我们叫应急预案,怎么做好应急预案,慢慢整理成一条流程,类似一个快速反应机制,这也是监控报警的下一步,我们这一部分经过两三年的发展也已经做的很完善了。
10. 具体来说监控系统是自己研发还是采用开源的?
史晓慕: 自己研发的,完全自己研发。
11. 也不会考虑采用其他的开源框架?
史晓慕: 从我本身来讲,我希望尤其是监控报警这块,一定要特别的贴合业务,我们也会用zabbix,但这种只是做非常通用的指标,比如CPU的、内存的、网络的、硬盘的,类似这些监控我们也都在做。但是再往上走应用层或者服务可用,完全是自己研发,好多企业也是这样,如果监控做的很细,没有一个厂商会满足你的需求,所有的厂商满足的是低层次、统一化、可配置的监控报警。
InfoQ: 谢谢。
来源: http://www.tuicool.com/articles/FZVFjyB