作者:MacTalk
以前过年发红包,是纸包的,而且只发给还没工作的晚辈就好了。自从有了移动支付,事情慢慢变得复杂起来。如果你在负责一个部门,过年要给部门员工发红包。如果你在运营一个公司,你得给公司员工发红包。给娃发了个纸红包,她还会和你要移动红包。所以呢,很多人过年在抢红包,我基本上是在发红包,以至于每年各大互联网公司的红包战事,我都少有参与。
不过支付宝的五福红包我每年都参与,倒不是我折腾,每次都被家人抢过手机,凑齐五福,到点提醒我,开。于是得了一块多。我说为啥要这么做呢,毕竟发出去的比这多好几千倍。家人说,过年啦,图个吉祥热闹呗。
基于这个考虑,我估计全国有很多人会使用支付宝红包。正好阿里发布了相关的内容,我们这次可以聊聊支付宝红包背后的故事。
2019 年新春是支付宝五福红包活动第四次与全国人民见面。果不其然,参加的人数超过了 4.5 亿。可以说,三分之一的中国人都是这么想的,当年的移动支付,也是这么拉开帷幕的。
中国人过年,图的就是顺遂、圆满、喜庆。红包的意义不仅在于钱,更是年味的体现,支付宝的红包更多象征了祝福、好运等意味,正是因此,这一活动对于用户体验的要求非常苛刻:扫福、赠福、沾福……福气需要手到擒来,对应到系统,响应必须要如丝般顺滑;活动结束后开奖,红包金额越快到账越好,因为喜悦不容等待啊。同时,用户之间的互动功能也需要充分保障,毕竟中国人的年是团圆的年,是人与人之间相互连接、分享祝福的节日。
要在数亿用户的规模上实现这样的用户体验绝非易事。4.5 亿人每点击一次屏幕,海量的数据都会汇聚成潮水涌入系统。如何保证系统「不卡、不错、不宕机」,让每一个用户都能开开心心拿红包呢?
为了达到这样的效果,蚂蚁金服的各个技术团队合力搭建起完整的链路,共同守护互联网时代的新年味。
「快」的秘密:Geabase 图数据库和数据智能算法
今年五福红包活动中新增的玩法「沾沾卡」,让用户可以「沾」取好友的福卡或「花花卡」(可代还全年花呗账单的奖品卡),在使用「沾沾卡」的页面上,用户可以看到一张好友排名榜,这份榜单按持有福卡总数的多少排列,用户可以很轻松地找到手握大量福卡的「土豪」,去沾沾他们的豪气。
这一玩法互动性极强,奖品本身又足够有吸引力,创意很好,但实现起来远非那么轻松。「好友福卡排名榜」看上去只需要计算每个好友的福卡总数,再进行排列,是个很简单的计算问题,但几亿用户参与的情况下,假设每人有10个好友,查询量就会达到数十亿级别;而且每个人所持有的福卡总数都是实时更新的,这份榜单每时每刻都会波动,实时计算会对数据库造成巨大的压力。
Oracle、Mysql 等普通的关系型数据库,在面对这种问题时往往显得力不从心。用关系型数据库查询「用户的好友」,尚且能在毫秒级完成;但如果要查询「好友的好友」,耗时就会指数级上升。随着查询深度的深入,时延很快就会高到难以接受的程度:查询深度达到三级时(好友的好友的好友),关系型数据库的耗时将超过30秒;而当深度达到五级时,关系型数据库就完全「懵」了,无法反馈查询结果。
也就是说,假如用普通的关系型数据库来支持「沾沾卡」的活动,用户可能会遭遇点击页面后大半天没反应,甚至页面崩溃的情况,根本谈不上用户体验。
「关系型数据库里缺乏关系。」蚂蚁金服技术专家浩壹引用《Graph Databases》的观点表示,为了在海量数据里完成高并发、低延时、毫秒级的查询和分析,需要一种把关系作为独立实体进行存储的数据库 —— 也就是图数据库。「蚂蚁金服自主研发的分布式图数据库GeaBase,有非常多的场景应用,基本覆盖了五福红包所有应用场景」 。
由于数据的存储结构和查询规则不同,查询深度对于 Geabase 的速度几乎没有显著影响,当关系型数据库捉襟见肘地花上 30 秒才能给出反馈时,Geabase 只需要 0.168 秒;关系型数据库难以给出结果的查询,Geabase 也只需 2 秒即可完成。
这样的数据库,可以实现几亿用户的好友排行榜在毫秒级内实时更新,可以支持「沾沾卡」这样的活动,也为之前那些因为系统性能限制的业务提供更大的想象空间。
另一方面,借助数据智能算法,决策效率也取得了飞速提升。以前,应对这样大型的活动,要花大量时间对数据指标做实时分析,每次分析时间可能会长达 3 天。
蚂蚁金服高级技术专家张荣华介绍说:
但今年,借助蚂蚁金服的金融级实时数据智能平台的能力,不仅可以在分钟级的尺度上掌握数据指标的异动,还能即时获得智能系统提供的决策建议。
在这个数据智能平台尚未成熟之前,用蚂蚁金服数据平台部资深总监周卫林的话来说,决策有如「在黑暗里开车」。一项策略实施之后,需要一段时间才能监测到反馈,再根据反馈来分析和调整,中间耗时很长,就像是「开车时打了方向盘,车却要隔好久才能转弯,司机心里都没底」;但现在有了金融级实时数据智能平台,有了流批一体的计算能力,反馈、分析、决策建议的流程从几天缩短到小时级,随时调整随时都能看到结果。
数据智能取代了「人工」智能,智能平台的数据洞察取代了「人肉」的分析和决策,效率飞涨, 「以前红包活动期间,时时刻刻都想着数据指标,连吃饭都没心思,现在有了数据智能平台的支持,就轻松多了」。
今年的五福红包活动中,数据智能和 AI 还被运用于生成智能文案和个性推荐礼券。在数据智能的帮助下,「刮刮卡」礼券页面也做到了千人千面,自动匹配用户的需求特征,让用户不再会被那些「用不上」的礼券打扰。
「稳」的秘密:单笔业务秒级稽核,分钟级别「极致弹性」
5 亿现金,即使不考虑花哨的玩法,要把这笔巨款准确无误地分发到中奖用户的账户中,本身就是一场极大的考验。每一笔金额虽不算大,但都是真金白银,不容有误;而且活动截止之后,钱要多久才能到账,也是关系到用户感受的重要指标。
2018 年的五福红包活动结束后,中奖用户收到奖金普遍是在大年初一的凌晨两三点,也就是活动截止后四五个小时,红包的金额才到账。「去年,每一笔单笔业务的稽核需要 5-10 分钟,海量数据的全量核对要花一个半小时。」蚂蚁金服技术专家郑天寿表示。
到了 2019 年,等待的时间被缩短到了分钟级。「今年整套体系已经实现了单笔业务的秒级稽核,4.5 亿用户的数据全量核对仅仅花了 5 分钟。」绝大部分用户在新年零点之前就收到了红包。
「这才是真正的拜年红包。」周卫林表示,得益于交易稽核速度的大幅提升,往年需要彻夜盯着系统以保障红包安全入账的运维团队,今年刚过零点不久就可以回家过年了,可以说是皆大欢喜。
钱发得这么爽快,安全如何保障?其实在正式「上岗」之前,这套体系已经在技术团队内部的红蓝演习之中经历过千锤百炼了。为了模拟各种可能的突发情况,不仅「蓝方」给「红方」出难题,同时还通过机器识别能力,识别出线上系统弱点,生成了一系列攻击方案,来考验系统的整体识别能力和应急能力。
资金安全要有所保障,系统稳定也必须有所保障。和每年的双11一样,五福红包这样全民参与的活动,洪峰流量对于服务器的承压能力来说是一场大考。每个中奖逻辑后面都有数十条数据,整体来说就有几十亿的数据需要同步。这些数据需要在 2 分钟内完成同步,并发数高达每秒上千万。
经历过历年的双 11,只要事先做好准备,承接这样的瞬时流量压力已经不算最难的事,但难就难在如何以更有效率,更节省成本的方式调配服务器资源。「服务器是大促类活动最主要的成本。」 蚂蚁金服高级技术专家田启杰表示,最重要的是,「需要从什么时候开始持有资源,从什么时候开始把资源还到大的池子里去」。
蚂蚁金服的高性能分布式数据库系统 OceanBase 在这场大考之中功劳卓著:「OB 能够在分钟级别内把资源能力加上去,在活动之后把资源收回来,我们把这个称之为极致的弹性。」
分钟级别的弹性,意味着当流量的洪峰到来时,在极短的时间内,系统就能调度资源去承接流量,而在洪峰过后,系统也能迅速地返还资源,避免资源浪费,尽可能地节省成本。
和双 11一样,支付宝五福红包的系统也经历过严苛的全链路压测。但用田启杰的话来说,在大促类的活动日益频繁的今天,举全体之力保障一次活动的顺利进行已经不是最重要的问题了,更重要的是「在大促常态化情况下,我们的稳定性能够一如既往不出现任何问题」。因为不管举办什么样的活动,支付宝本身作为一款已深入社会生活方方面面的金融应用,都必须全年无休地安全平稳运行。
以往一年一度的「大考」,如今已日渐成为每个季度甚至每个月都要面对的常态。这意味着,系统的弹性、稳定性和高可用性也需要成为常态。以守护互联网时代的新年味为开端,蚂蚁金服的技术团队,其实每时每刻都在守护着与我们每个人的日常生活都息息相关的普惠金融系统。
数据显示,在 2019 年 1 月 25 日至除夕的 11 天里,超过 4.5 亿人参与了集支付宝五福活动,相当于每 3 个中国人就有1个人在参与集福和送福。和去年相比,今年参与集支付宝五福的人数同比增长 40%,其背后的技术挑战也更加复杂。
技术人从业一生,能够参与这种规模的线上活动,可以说是人生大考,也是至尊荣耀。
免费Java资料领取,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo/Kafka、Hadoop、Hbase、Flink等高并发分布式、大数据、机器学习等技术。
传送门:mp.weixin.qq.com/s/JzddfH-7y…