本文主要从服务端角度针对 2022 年春节 Flower 活动中钱包提现模块做一下总结与反思,希望可以对整个开发过程中使用的技术和遇到的问题进行整理和沉淀,在后续类似的活动中可以产生一些帮助。
2022 年春节活动目标是在抖音、火山、西瓜等八端启动,希望抖音端能够给多端进行导流,实现“同一个字节,同一个春节”活动。对用户来说,可以在任意一端参与春节活动并在钱包中看到集卡、红包雨等玩法获得的所有收入,最终可以在任一端提现春节收入至个人账户中,保证用户在活动中的奖励能够落地,提升用户春节活动参与度。
用户在进入活动钱包页后可查看参与活动获得的奖励收入,点击【去提现】按钮可以跳转到提现页面。在提现页面用户输入提现的金额并选择已绑定的到账方式, 然后点击【确认提现】即可提现活动收入到自己选择的个人账户中。
提现即用户将自己通过参与集卡、红包雨等活动玩法所活动的奖励收入提取至用户的银行卡、支付宝或抖音零钱等个人账户中。由于春节活动存在集中开奖导致的高流量,活动发奖瓜分金额巨大等特点,在开发春节活动提现的过程中,有几个方面需要重点考虑:
除夕当晚 19 点到 23 点每个整点开放红包雨,19:30 春节活动集卡开奖与烟火大会启动。此时面对上百万 QPS 的用户奖励入账,可能存在部分请求入账存在延迟,导致用户在提现的时候看到的金额与活动参与获得奖励金额不一致的情况。
此外今年春节活动提现增加了每笔订单 1 元起提的门槛限制,在除夕晚上集卡开奖、红包雨和烟火大会多个玩法的加持下,用户很容易获得 1 元以上的收入。但如果在获得收入达到门槛后立即提现,可能会导致参加后续玩法获得奖励较少而无法提现的情况。
集卡开奖与红包雨后,提现入口打开时将面对几十万的请求流量,经过用户选择到账方式和输入提现金额后也有数万 QPS 的提现下单请求。钱包服务端收到请求后会操作扣除用户的活动账户余额,接着调用财经侧(字节内部的支付中台)请求出款,财经侧维护与各支付机构(支付宝、银网联)的接入交互。但各支付机构分配给各单位的出款请求流量有限额,字节这边获得的容量与提现出款相差了一个数量级。此时需要在保障用户的提现体验不受影响的同时,又能够确保下游渠道侧不会因流量较高导致可用性抖动。
提现是春节活动的最后一道流程,公司在用户的春节活动收入账户进行扣款并将资金通过预先设置的备付金账户转入至端上绑定的个人账户中,从而使获得的奖励最终落地。如果用户在端上的操作出现打款超额等情况,一旦出款成功则基本不会有追回的可能,因此,资金安全是提现业务开发过程中必须考虑并保证的部分,确保每笔出款有迹可循且符合提现规则。
为解决上述问题,我们通过 RocketMQ 进行异步出款来保证用户体验,同时 RocketMQ 的使用还可以对银行卡等出款渠道进行削峰来减少下游的过高流量。在资金安全方面,每笔订单在进行春节活动收入账户扣款和现金出款时做了幂等操作,并增加对账任务对所有流水进行对账校验。
除夕当晚从 19:30 集卡活动开奖用户进入主会场即可看到集卡奖励,同时烟火大会开启参与活动即可获得红包奖励,此外从 20:00 开始到 23:00 每个整点都会有红包雨,用户会不断获得春节活动奖励并进入钱包页查看个人收入。
为保证用户集卡开奖和红包雨活动入账顺利,不会出现看到奖励但钱包中无收入或收入不足导致提现错误的问题,我们在用户进入提现页面的时候会根据端上请求参数中的红包 token 列表进行一次入账请求,以确保用户在确认提现下单前账户中的金额如果没有完成入账的话可通过 token 列表进行一次强制入账,但为给用户在提现页面有较好体验,此处的入账为弱依赖请求。当用户确认提现下单的时候,我们设置了强依赖性的强制入账作为最终兜底方案,来使得最终提现扣款时奖励金额已经入账成功并支持提现。
同时,为保证用户可以在活动结束后提现参与获得的所有奖励,减少因提现门槛导致用户参与后续玩法获得奖励较少而无法提现的情况,我们在春节活动中开启了延时放量提现。从 19 点到凌晨 1 点之间关闭提现入口,用户只能在主会场参与活动获得奖励,而无法进入钱包页面中进行提现操作。当用户在活动钱包页点击【去提现】时,会弹窗提示用户在 2 月 1 日 01:00 后可提现。此外,在弹窗中我们也加入了对用户的绑卡营销策略,引导用户预先绑卡,提现快人一步。
随着凌晨一点提现入口打开,可能会有大量用户涌入提现页面进行提现。此时,为防止瞬间流量突增过高可能引发数据库连接问题,我们通过在配置平台上进行配置,针对用户 id 进行取模后的结果进行分批放开。在有限的情况下,确保用户入账无误,请求不被限流是我们用户体验是否良好一个比较重要的评判因素。延迟到凌晨 1 点分批次放开提现有效降低了用户提现的并发,保障了用户提现体验。
在除夕当天的晚上 19:00 到春节凌晨 01:00 时间段内,春节活动钱包页中会暂时关闭提现功能,进行部分营销导流。而随着凌晨 01:00 提现开关打开,请求会蜂拥而至逐步上涨至数万 QPS,但由于银网联的处理能力有限,导致银行卡渠道出款最高可支持的 QPS 只有几千。此时如果提现模块不进行限速下单的话,可能存在下游系统被压垮引起雪崩的风险,同时用户会给感受到提现功能卡顿并频繁失败。
为解决该问题,我们引入了 RocketMQ 来进行异步出款。当用户在钱包页进行提现操作时,服务端会在春节活动收入账户扣款完成后立即返回结果并跳转至提现结果页面展示当前状态,同时将当前请求参数发送至 MQ 中进行异步消费出款。这样给用户的感觉即账户余额已扣除,提现出款进行中,稍后也可以通过账单流水查询提现结果。
将消息发送到 MQ 后,提现模块利用 MQ 消费提现订单的现金出款,通过下游消费者有限的消费能力进行消息处理。同时增加自定义限流器对每个出款渠道进行限流,利用 MQ 进行流量削峰与限流出款两种方式双重保证了下游出款不会因流量过高而出现抖动。当消费成功时则顺利出款,当消费失败或被限流时则返回错误,MQ 会进行消费重试。我们在这里设置 MQ 最大重试次数为 3 次,如果消息没有超过最大重试次数,则被放入 retry 队列;如果消息达到最大重试次数,则放入死信队列不再处理。
为防止提现订单因 MQ 多次重试消费失败或其他原因导致状态一只卡在某个中间状态停止更新,我们额外设置了定时任务进行补单操作推进提现状态。每小时固定从数据库中捞取已被创建超过 4 个小时且当前还处于未完成状态的订单,并根据其当前状态进行推动:
在提现的过程中,一旦技术方案设计有问题,容易存在资金安全问题:账户未扣款但现金已转入用户的个人账户,账户多次扣款或者现金多次出款等。因此,在春节活动中提现模块的设计中,资金安全问题是重点考虑的部分。在提现请求发生时,服务端需要确保每笔订单一定对应一次账户余额扣减,一次现金出款。而提现完成后,需要有对账任务与账户和财经出款进行对账,分别对提现订单的金额和状态进行校验,保证事件中的验证无误。
幂等,指任意多次执行所产生的影响均与一次执行的影响相同。提现针对 orderID 做幂等性控制,在账户侧每个 orderID 只有一笔扣款操作,从而保证用户的活动账户余额不会被重复扣款;同时,在用户当前订单提现失败后进行账户余额回滚操作时,首先查询账户侧是否存在扣款订单,如果存在则进行余额退回,退回时控制一笔扣款操作对应一笔退回流水,防止出现多退的情况。
账户完成扣款之后,需要调用财经的出款接口将资金从公司预先设置的备付金账户转入至端上绑定的个人账户中,此时需要确保每笔提现请求只能有一次出款。在每次操作提现订单进行现金出款时,我们使用 redis 分布式锁对 orderID 进行加锁操作,加锁成功后判断当前订单状态,如果是待出款状态则调用财经接口进行现金出款。在接口调用后立即更新订单状态为出款中,防止重复调用引发可能出现的重复出款操作。同时,财经侧也针对 orderID 做了幂等控制,确保每笔 orderID 都对应一笔出款。
涉及到资金流动,需要有对账任务来保证上下游之间资金数据的一致性,能够及时发现处理金额或状态差异导致的资损问题。我们在对账平台分别增加了准实时对账和天级对账来进行资金的校验。
在提现事件发生过程中,我们在对账平台中增加了与下游服务(账户、财经)提现数据的准实时对账,确保提现订单每次状态变化时都是准确无误的:
1. 与账户侧准实时对账:
a. 在余额扣减成功后账户侧会保存一笔提现扣款的数据流水,此时需要将扣减流水与提现订单进行金额和状态校验,确保扣款状态和金额一致;
b. 在提现失败的时候,如果此时账户侧已经扣款成功的话则需要将之前扣减的金额退回至用户的活动账户中,此时需要在余额退回成功后进行账户金额退回流水与提现订单状态、金额做校验。
2. 与财经侧准实时对账:
a. 在提现订单状态更新为成功或失败时,获取财经侧的出款订单数据与提现订单数据进行一致性校验,判断双方数据的状态、金额是否一致。
对账平台中的数据校验,是基于数据双方的 binlog 消费进行的准实时对账,在对账双方任一方缺失数据或双方对账状态金额出现不一致的情况下便会发送飞书报警通知。
此外,我们还在线上服务中增加了自主对账任务,通过消费提现数据库的 binlog 消息。针对其中到达终态的订单,我们会根据订单状态分别通过接口调用的方式对账户、财经侧进行查单检查。成功的提现订单在账户的查单接口中可以查到一笔扣款流水,在财经的查单接口中也会有一笔出款成功的订单。而失败的提现订单在账户的查单接口中可以查到一笔扣款和一笔退回余额的流水,在财经的查单接口中如果可以查到订单的话则只有失败订单,如果没有订单的话说明提现流程还没有走到出款便失败了,此时可忽略缺失的差异。
另外,我们也增加了与下游服务(账户、财经)的天级对账,作为准实时对账之外的一种兜底对账。因为上下游之间可能因调用失败或者回调失败导致状态同步不及时,我们增加了定时任务进行订单状态推进,保证每笔提现订单最终都可以达到终态。天级对账即为了解决状态同步不及时可能引发的准实时对账差异,通过每天生成的 hive 数据进行状态和金额校验,减少时间差产生的误报。
对账平台-准实时对账 | 对账平台-天级对账 | 线上服务对账 | |
---|---|---|---|
对账时效 | 准实时(5 分钟内) | 天级(t+1 级别) | 准实时 |
优点 | 可及时发现问题,对账双方任一方存在数据缺失或不一致的情况即会报警 | 对账双方任一方存在数据缺失或不一致即报警,天级对账减少了网络抖动引起的误报 | 准实时,只对提现终态订单进行校验,有查单重试机制避免了网络抖动引起的误报 |
缺点 | 网络抖动可能引起误报 | 对账时效低,一天后才会发现 | 无法发现提现订单缺失的问题 |
对账时效 | binlog | hive | binlog |
为保证活动上线后用户能够在钱包页中进行正常提现,我们在活动开始前增加了准备预案。
在活动正式开始前,我们组织了内部圈定人群、内部所有人、外部圈定城市等三次预演,针对春节活动红包雨和现金提现进行了提前演练,模拟春节活动的正常流程与突发情况的处理。通过演练,我们可以提前发现整个活动流程是否顺利,并将可能存在的问题提前暴露解决。
为支持春节活动过程中产生的大流量请求,保证给用户提供良好的活动体验,我们将春节活动现金提现与钱包日常收入提现的功能进行了集群隔离。在代码开发上线后,申请压测资源对各业务流程进行了预估流量压测,集群隔离也使得压测操作不会对线上正常业务有任何影响。
在提现业务压测的过程中,有两个方面需要做一些数据准备:
另外,在账户同学压测入账接口的时候,我们提供了该文件让其帮助对这批 uid 进行入账。如此在压测提现下单的时候,我们使用已经绑定到账方式的测试 uid 数据,其活动账户中已经存在余额可支持提现余额扣减。
最终,通过对到账方式查询、确认提现下单等接口进行全链路压测后,我们能够准确评估了为支持春节活动最高 QPS 所需的各项资源容量,使春节活动可按照预先计算的流量支持用户操作提现。
除夕是我们春节活动启动后的重要时间点,当天有多场红包雨,同时还有烟火大会和集卡开奖等玩法出现,整个活动会在春节联欢晚会开始的时候达到高潮。在这种大型活动参与过程中,每个人或多或少都会有一些压力在身上。纵使代码经过验证,前期进行过多次演练均无问题,但还是需要抱有谨慎的态度来应对重要活动的开始。在大脑记忆力有限的情况下,为防止出现遗漏,我们针对除夕当天写了执行剧本:
春节活动上线后,用户积极参与各种玩法并在其活动钱包中进行现金提现。在除夕当晚,延时放量虽然使用户在获得收入的第一时间不能进行提现,但用户奖励入账正常,延时放开后提现请求没有被出款渠道限流,有效地保障了用户提现体验。同时,在渠道侧出款能力有限的情况下,通过使用 MQ 进行异步出款有效地限制了对下游服务的请求流量,使其没有因流量过高而导致出款异常。
此外,在春节活动的整个时间段内,通过对提现流程进行风险梳理,增加对账平台准实时与小时级对账支持和线上服务对账支持,双重保障了春节活动现金提现模块对账任务的全覆盖,使用户在参与活动并收获奖励进行提现的过程中未对其造成资金损失,确保了用户的参与度。
本文由哈喽比特于2年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/wCbdElWL-1uEyMqXAKKZ_w
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。