千亿级互联网平台技术架构及背后那些事

(一)​

这是一个从0到3000亿的故事!
故事里的那群人架海擎天,俱怀逸兴壮思飞,欲上青天揽明月。那时的码大叔也正风华正茂,意气风发!我们浩浩荡荡地碾压过肆意的年华,在代码的世界里千骑卷平冈。
在这里插入图片描述

(二)

窗外,正淅淅小雨,很适合用来回忆。正如普鲁斯特在《追忆似水年华》里说的:当岁月流逝,所有的东西都消失殆尽的时候,唯有空中飘荡的气味还恋恋不散,让往事历历在目。

X项目,刚开始只有一个高层业务模型,但产品具体应该怎么设计怎么呈现谁也没有想清楚。一群人就那么挤在南京奥体中心的公寓里,人紧挨着人坐着,连服务器都只能架设在卫生间的盥洗台上。产品需求经过一轮又一轮的调整,代码经过一遍又一遍的推翻重写,上线时间也一再地推迟。夏天的时候过了17点整栋楼的空调就自动关了,我们啪嗒啪嗒地敲着代码,汗水啪嗒啪嗒地敲打着桌面,经过了大半年的折腾和准备后终于接到通知真的要上线了。那时的心情反倒是很平静,只是觉得该来的终于来了。

由于涉及到在线资金交易且单笔支付金额较大,系统接入了某银行的银企直联接口,支持单笔高达300万的支付金额。所以资金安全问题成了当时唯一的担心,团队做了很多的风险预案,包括系统对账审计人工核算等等。上线前2天郭局长又把程序的事务控制临时调整为SERIERLIZED最高隔离级别,那是我从业以来唯一一次使用到这个级别。就这样项目终于悄悄低调地迈出了第一步,接着媒体开始铺天盖地报道:国家队进场,行业将面临新一轮的洗牌。
在这里插入图片描述

和很多互联网项目一样,系统架构刚开始是单一的,交易和资金耦合在一起。每一次需求调整都战战兢兢,如履薄冰,生怕影响到了资金模块。后来公司招来了一位支付宝的资深大佬,花名“湿手”,支付系统开始独立出来,我也从那个时候开始了5年的支付生涯。

有一个关于程序员的笑话就是做飞机系统开发的人不敢坐飞机,做高铁系统开发的人也一定不敢坐高铁,因为大家都深知没有0Bug的系统,不知道什么时候一个隐藏的Bug就爆炸了,措手不及。做支付的这些年来每一个需求我们都脑洞大开,穷尽所有可能,包括“你身边的朋友知道你的卡里有巨额资金找了一个和你一模一样的人去银行以你的名义办理了一张银行卡,有一天你在常用的电脑上登录了网站忘了退出,偏偏又拉肚子去上厕所,情况紧急你还忘了带手机,手机没有锁就摆在桌子上,此时如何保证账户安全?”等等。去年的时候还有一位企划部的同事找我聊到了网站安全和项目效率如何平衡的问题,问我你们做了这些有意义吗?产线实际发生过账户或者资金安全问题吗?我说正因为有了产品运营、安全、研发、数据中心等一道又一道的防护屏障,因为我们所采取的一系列安全措施,所以系统累计资金处理超过3000亿依然没有出过一次资金损失,0差错。我们要确保的是不要出系统性资金风险,而不是出现资金风险后考虑怎么挽回。

公司也开始高速发展,一路披荆斩棘,历经千磨万击,进入了行业前3名。我个人也跟随着公司一起成长,由一名开发人员成长为资深项目经理,到助理项目总监,负责支付、大数据、供应链等几个产品线的项目研发管理工作。

( 三 )

上个月我看到一篇关于腾讯保险的文章,里面讲到了保险系统上线的事情。微保团队秣马厉兵半年,经过各种测试后,终于准备“核武器发射”,启动微保第一单:
在这里插入图片描述

CTO Jackie 伸出大拇指,像发射核弹的将军一样,把指纹贴向手机按钮。 >“错误!”
几十个老司机忙活了小半年,居然在众目睽睽之下直接翻车,大家脸上都有点发烫。Jackie赶紧让同学们检查原因。忙活了半天,自己的软件逻辑没有找到问题,仔细一看,系统卡在了微信支付这边。和微信同学一确认,才知道,微信支付有个“支付额度上限”,是5000块。

由于错误,Jackie账户短时间被系统锁定了,于是换成了数据中心负责人Lorry,保险金额2822.99!

核武器准备,二次发射!
“错误!”
保险公司系统给出来的提示居然是:缴费不足。
两千多都已经扣出去了,你说我缴费不足??”Lorry 哭笑不得

仔细检查,原来是微保的用户业务系统算出金额出错,2822.68元,少算了1分钱。

架构中心负责人 Hoky 突然想到,这很有可能是因为两种系统使用的编程语言不同。一般 Java 保险系统设计的时候,价格会使用货币类型数值计算,单位是元。

就这样团队又花了四天时间把货币基本单位换成分,才终于成功。

当时看到这段我是比较惊讶的,腾讯这样一个高手如云的团队居然连犯两个支付系统最基本的常识性错误,而且是在系统上线前的最后一刻碰运气被发现的,就像文章里说的“幸亏当时我们触发了这个 Bug,要是 Jackie 出手没那么大方,真的让普通用户遇到了这个问题,那问题可就大啦!”。

那时候就想到了X项目,相对于大型互联网动不动就千万级、亿级的流量,X项目或许是微不足道的。但细细回顾,这个项目从0走到现在以来,我们经历了国家政策多次调整,产品规划变更与渐进明细,项目上百次的迭代发布,开发上也踩过无数的坑,这里面还是有很多可以拿出来细细品味的地方。项目上有很多先进的技术和尝试,也有一些历史包袱原因导致依然采用着与现代技术不符的设计在艰难负重前行。《月亮与六便士》的作者毛姆有一句很有名的话:“即使剃刀里也有哲学。项目上也是如此,这个项目里也有着系统设计的哲学,程序员的禅,我们自己理解的禅。

那些我们习以为常的,其实只是因为我们恰巧经历过而已。有些人把经历过的坑铺平走过之后,远远地抛在了身后;有些人把坑的深度逆转为自己的高度;
千锤万凿,始出深山,烈火焚烧若等闲。挑柴运水无非道,行住坐卧皆是禅。

( 四 )

在这里插入图片描述
在我的书架上有一本书摆放了很多年,《禅与摩托车维修艺术》,我时不时会拿出来翻一翻。里面有一句话:“如果一直向前看,或者只看到目前的状况,对你并没有任何意义。一旦你回顾以往,就会看到一种模式隐隐出现。如果你由这个模式出发,那么很可能会迸发出一些东西”。所以,这不是一个故事,这是一个关于项目的重新复盘。

我有做工作规划的习惯,做月计划、周计划,到每一天具体的工作,从14年至今在我的印象笔记里记录着我每一天的工作。我支付生涯的导师“湿手”在2015年11月06日和我说过一句话:当我们变得挑剔,我们才有提升的空间。接下来的一段时间我将以挑剔的眼光、现在的能力、现在的经验回过头来回顾这个产品,回顾这个项目,回顾整个系统的技术架构设计,甚至是回顾到某一个案例下现在的代码应该是什么样子。

让我们在这条路上慢慢地走着,收拾这时光,眉目生欢!
下一期,再见。


架构师,十年戎【码】,老【叔】开花。个人微信号:qiaojs,注明CSDN,一起学习交流。
在这里插入图片描述

posted @ 2020-04-13 08:47  牧码哥  阅读(1148)  评论(5编辑  收藏  举报