百亿互金平台救火故事

多年前,又是周六客服打电话过来,平台官网不能访问,app完全无法打开,客户在QQ群和微信群中各种反馈,说平台是不是跑路了?客服的多条400热线完全被打爆,电话已经接不过来...


前言

一直以来总是想以什么方式去记录下自己在互金行业的这段经历,趁着自己还记得清楚,还能找到一些资料原型,一方面可以分享出来供大家参考,但是更重要就是多年以后我可以根据这些文章回忆起来自己的那段激情岁月。

想了很久但一直没有实施,后来觉得应该从架构的角度来梳理一篇文章,就写了从零到百亿互联网金融架构发展史这篇文章;最后认为只有实战出来的东西以及解决问题的过程,才是工作中最宝贵的经验,应该把它分享出来,在梳理的过程中觉得有三起事故比较有代表性就整理出了下面这三篇文章,本篇文章从整体来回忆一下一路走过来所经历过的救火故事。

作为一个互联网金融平台,涉及到用户资金,任何的服务(资金)差错用户都是不可容忍的,用户不懂什么是数据库,不知道什么网络不通,就是一会看不到钱在app里面展示都会觉得不安。在已经有很多P2P公司跑路的前提下,用户个个已经被锻炼成为福尔摩斯侦探,每天打开app查看收益,监控着平台一切,甚至半夜升级断网十分钟,也会被用户察觉,直接就发到群里面,更有甚者直接在QQ群或者微信群中你们的技术行不行!

我们常说的互联网工作经验,一方面是开发经验,但其实更重要的是处理问题的能力。那么处理问题的能力怎么来呢,就是不断的去解决问题,不断的去总结经验,其中处理生产环境中问题的经验更甚,因为在处理生产环境中对个人的压力和临危应变的能力要求最高,你不但需要面临千万个用户反馈,客服不时得催促而且旁边可能就站了N个领导在看着你,一副你行不行的样子要求立刻马上解决问题!这个时候你的操作就非常重要,稍有不慎便会引发二次生产事故。

说了这么多,只是想说明,生产事故对技术综合能力要求颇高,更是锻炼处理问题能力最佳时机!下面给大家介绍我们从零开发到现在百亿交易量所遇到的几次关键事故,有大有小挑出一些比较有代表性的事件来分享。


并发满标

公司系统刚上线的时候,其实没有经历过什么大量用户并发的考验,结果公司做了一个大的推广,涌入了一批用户来抢标,共1000万的标的几乎都在10秒之内搞定,大概会有上万左右的用户会同时去抢标,平均每秒大概有千人左右的并发,满标控制这块没有经过大的并发测试,上来之后就被打垮了,导致得结果是什么呢,1000万的标的,有可能到一千零几万满标,也有可能会九百多万就满标,也就说要不就是多了一些,要不就是少了一些,就满标了。

这就会很尴尬,因为借款用户就借款一千万整,那么多出来的钱既不能给用户退回了,因为用户好不容易才抢上了,无端退了用户也闹;少了也是问题,用户借款一千万,少了几十万也不行,如果短得少了可以想办法找一些有钱的客户直接给买了,多了就必须重新放出来让用户投资,非常影响士气,这个问题困扰了我们有一段时间。

购买标的流程图,不知道大家是否能根据此图发现问题呢?



超募

为何会产生超募?在最早前的版本中没有使用乐观锁来控制,如果在最后购买的用户一单出现并发,就会出现超募,比如最后剩余30000份的购买份额,因为并发量特别大,可能同时会有十几个用户拿到了剩余30000份余额的可购买额度,有的买1000份、有的买上3000份、有的买上20000份都会驱动满标,所以最后导致了超募。

针对这个问题,主要是引入了memcached乐观锁的概念(底层主要是casgets两个命令),在发标的时候存入标的总份额,当用户购买的时候首先去锁定用户购买的份额,因为乐观锁的原因,如果同时有两个用户拿到份额的时候保证只有一个最后可以更新成功(锁定份额),(锁定份额)失败直接返回,这样就保证了在入口的时候就直接屏蔽了部分并发的请求。



少募
为何产生少募?少募是可能1000万的标的突然到980万就给满标了,这是因为在超募情况下我们完善了代码,用户一进来首先就是锁定购买份额,只有锁定购买份额才能进行下面的流程,如果锁定购买份额失败直接返回,这样虽然保证了在1000万份额在购买初期必须每一个用户只能锁定一份,但是在高并发的情况下,因为购买流程中有十几个分支,每一个分支失败就会退回锁定的份额,这样就会导致这样的现象,就是可能是并发一上来,马上就满标了,过了一会进度就回退回来了。

少募主要是因为分支失败回退导致的,一方面我们分析了容易导致回退热点,因为在用户抢标的时候会给用户实时的展示标的进度,在很早的版本中直接就是存入到一个标的进度表里面,并且采用了乐观锁,如果并发一高就频繁的更新失败导致回退,因此优化了标的进度这块,直接去掉了标的进度表,实时根据查询来展示标的进度(可以有延迟,有缓存);另一方面在回退份额的时候在次判断试下memcached的份额和标的的状态,如果份额不为零并且标的状态是满标,马上自动更新状态保证后续用户可以立即购买再次驱动满标。

做了以上的两种优化后,我们还遇到了其它的一些小问题,在不断的优化过程中,终于稳定下来;在后期版本中将考虑使用MQ队列或者redis队列来处理抢标更合理对用户也更公平一些。


黑客攻击

2015年应该是互联网行业受黑客攻击最多的一年吧,各互金公司都深受其害,其中我就记得网贷之家有一段时间被黑客攻击的太厉害,连续几天网站都无法打开。当然了我们也未能幸免,什么DDOS攻击、SQL注入、寻找系统漏洞等都几乎都经历过了,有的黑客还比较好,应该是出于善意或者展示自己,将漏洞放到乌云上面或者漏洞盒子里面让厂商来修复。但更多的是一些黑产完全就是威胁、敲诈想捞一笔钱,先看看下面这位吧:

这个家伙潜伏到我们公司的客户群里面,冒充公司能朻栝修%9A标这次d澆更并s蛏奿用MQ頇ﺆ,榈,凌他戺幁胏到戆伌榪最地回镲一

算尷群鼌榰菜鸟䈆享。


话过憒妁求箌克家暄丸出杢于馈S台嗠潸滙买亪最登记来了。 话过憒庆我紧急繁皍判IP郅须切刟解容昁䝥了。

暄是笨想廽额,囑丬庆戁皍判IP来DDOS攨濛庁止标䕴,鐎,戀后肯爷

鼏到戤锑客攻廡标︭殏到戛庤修6一IP额*,緈>鼟了一能蔑客攻幰的日,驈;庆一地回鼌乞,迷他慎大䛞國丄,鼌叙入倀网巔程,妉的吶发充兎>

迥想创広就孩捉迷藏求。



2015梳绀么DDOS攻募2015滴锶砇的绋宺接在群鼇尵下我,

能刏踅淏中你们的抴责过并s蛏充公幠天箌兌鿇憒奚就碝实慥到丈武况吧:

20夯甦况吧:的醵徤䏯能着彠们的抴责吗br/>的醵徤信后我凌中䈑台吜5在10秒乌?br/>的醵徤公司台嗖者戏有br/>的醵徤公埕的ﹳ台是m懂防护m戬中榣br/>的醵剰了我䵄,靆更肉鸡镲DDOS代禇在10秒肯爋内br/>的醵剰了渪个帋靏有帀个互联网達网渗透发测花縍券贤中䈽睮宿陽然俚年p嗶>是情br/>的醵僽费幭堇,乾这么募,36000会乺䅬司庛黓薹面叽费低档10G人左姵g" />的醵剰>

说俙么崤中䈑仈台是下靌烟笔栀栀寷求。

,唨濪N个鉍能迓箩议禝决既不他渀笔钱既助涨20虑䅬叁QQ号刚a出变出%9A描述程况吧:

鈟锑客攻弌翇M要不唑客滈公埕的ᅮ箐,戈客还毼别>的鼭覤公司标ﶡ︀直沿要开。式巑路箶有一段湈嘟著的被客了,寛twitter等著说的互聚P2P免能輌在俘达至了丅楚ﻥ很严常迮复〥对于,我一䁚P2P亀僇于了这过夊坥了。

+正杘止么DDOS憵吧: