- 综合
腾讯充值系统
时间:2010-12-5 17:23:32 作者:焦点 来源:焦点 查看: 评论:0
内容摘要:腾讯充值系统的崩溃发生在2023年1月1日零点刚过。我正等着给游戏账号充一笔648,页面卡死在“支付成功”的转圈动画上,钱扣了,游戏币没到账。这不是我一个人的问题——微博上瞬间涌出上万条投诉,有人充了
腾讯充值系统的腾讯崩溃发生在2023年1月1日零点刚过。我正等着给游戏账号充一笔648,充值页面卡死在“支付成功”的系统转圈动画上,钱扣了,腾讯游戏币没到账。充值这不是系统我一个人的问题——微博上瞬间涌出上万条投诉,有人充了月卡没到账,腾讯有人重复扣款,充值还有人直接显示“订单不存在”。系统那晚腾讯客服热线被打爆,腾讯智能机器人翻来覆去就一句话:“系统繁忙,充值请稍后再试。系统” 这个系统每天处理数千万笔交易,腾讯从Q币到王者荣耀点券,充值从视频会员到微信红包封面。系统它本质上是一套极其复杂的账务中台,连接着微信支付、QQ钱包、苹果内购、安卓渠道,还有上百款游戏的虚拟商品库。正常状态下,一笔充值请求会在毫秒级完成:前端发起订单,中台校验身份,调用支付渠道,回调确认,最后写入账户余额。每一步都有日志,有监控,有熔断机制。但跨年那晚,问题出在最不起眼的环节——订单状态同步。 流量洪峰比预估高了三倍。元旦活动叠加新年皮肤上线,大量用户集中在零点充值。系统设计时预留了弹性扩容,但自动扩容的触发阈值设得太高,等负载均衡器反应过来,数据库连接池已经耗尽。更麻烦的是,部分支付渠道的回调延迟超过了超时时间,系统判定为支付失败,实际钱已扣走。这种对不上账的“悬单”需要人工介入,而人工审核队列在高峰期堆积了十几万条。 腾讯内部有个叫“蓝鲸”的运维平台,那天自动触发了故障告警。值班工程师在凌晨十二点零七分接手,先做了流量切分,把新请求导向备用集群,再写脚本批量比对支付流水和账户流水。整个过程用了四十七分钟,比行业平均恢复时间长了不少。事后复盘报告里写了一条很扎眼的结论:核心链路缺乏全链路压测,尤其是支付回调这种外部依赖,平时很难模拟极端延迟场景。 有意思的是,这次事故暴露的不只是技术短板。充值系统关联着腾讯云的账号体系、游戏事业群的虚拟商品中心、CSIG的支付中台,三个部门各有各的KPI。故障发生时,游戏侧想快速补发道具,但需要支付侧确认扣款成功;支付侧想退款,又担心重复发放导致资损。两个团队在群里来回拉扯了二十分钟,最后是微信支付那边的技术总监拍板:先按“用户优先”原则处理,所有疑似未到账的订单一律补发,事后内部再对账。 那晚之后,腾讯充值系统做了一次大改。他们把订单状态机从“支付成功/失败”的二元模型,改成了“已创建/支付中/成功/失败/已退款/待对账”的多状态模型,每个状态都允许超时重查。同时加了“幂等键”机制,同一笔订单重复回调时,系统直接忽略。最狠的一招是上线了“容灾演练日”,每个月随机挑一天,人为注入支付渠道故障,让全链路自动降级。 但说实话,这种大型系统永远做不到零事故。上个月我又遇到一次充值延迟,这次页面提示“支付处理中,请稍后查看”,十分钟后到账了。虽然体验谈不上完美,但至少没让我去翻订单记录猜钱去哪了。腾讯在技术社区发过一篇博客,里面有句话我印象深刻:充值系统不是追求不出错,而是出错后能在用户感知之前修复。这话挺实在的,毕竟对玩家来说,最可怕的不是系统崩溃,而是崩溃后没人告诉你钱到底去哪了。