动手点关注 干货不迷路 👆
我们做了什么
业务背景
在春节活动期间,抖音将视频和春节红包相结合,用户可以通过拍视频发红包的方式来给粉丝和好友送祝福。
业务玩法
整个活动玩法分为 B2C 和 C2C 两种玩法,下面对这两个玩法的流程简单介绍下
B2C 红包
在 B2C 红包玩法中,用户需要先来抖音或者抖 Lite 参加春节红包雨活动,有一定概率在春节红包雨活动中获得红包补贴。用户可以在获得补贴后直接跳转到相机页面,或者在之后拍摄视频跳转到相机页面,在相机页面用户拍摄完视频后会看到一个红包挂件,在挂件中可以看到已发放补贴。用户选择补贴后点击下一步完成投稿后即可完成视频红包的发放。

图 1 春节红包雨活动 图 2 红包补贴 图 3 红包挂件 图 4b2c 红包发送 tab 页
C2C 红包
在 C2C 红包玩法中,用户拍摄视频点击挂件,填写红包的金额和个数信息,选择红包的领取范围后,点击发送红包会拉起收银台,用户支付完成后点击下一步发布视频,即可完成 C2C 红包的发放。

图 1C2C 红包发送 Tab 页 图 2 支付界面 图 3 红包支付后挂件展示
红包领取
B2C 和 C2C 红包的领取流程都是一样的。用户在抖音刷视频遇到有视频红包的视频时,视频下方有个领取红包按钮,用户点击红包领取,会弹出到红包封面,用户点击红包封面的开红包后即可领取红包,领取成功后会显示领取结果弹窗,在领取结果中用户可以看领取金额,以及跳转到领取详情页,在领取详情页中可以看到这个红包其他用户的领取手气。

图 1 红包视频 图 2 红包封面 图 3 红包领取结果 图 4 红包领取详情
卫视春晚演示视频
C2C 视频红包在卫视春晚上也有推广,这里贴一个卫视春晚的推广视频,方便大家了解下整体流程。
我们碰到的一些问题
通用红包系统的设计
在上文中有提到,本次春节活动需要同时支持 B2C 和 C2C 两种类型的红包,这两个类型的红包既有一些相似的业务,也有很多不同的业务。在相同点上他们都包括红包的发放和领取这两个操作。在不同点上,比如 B2C 的红包发放需要通过使用补贴来发送,而 C2C 的红包发放需要用户去完成支付。B2C 的红包用户领取后需要去提现,而 C2C 的红包用户领取后直接到零钱。因此需要设计一个通用的红包系统来支持多种红包类型。
另外对于红包系统本身而言,除了发领红包外,还涉及到一些红包信息的查询,以及各种状态机的推进,这些功能模块之间如何划分也是需要考虑的一个点。
大流量补贴的发放处理
前面提到过,B2C 红包玩法会先进行补贴的发放。在春节活动期间,每场红包雨都会有大量的用户进入参与,如果将这些流量直接打到数据库,将需要大量的数据库资源,而春节期间数据库的资源是非常稀缺的,如何减少这部分的资源消耗也是一个需要考虑的问题。
红包领取方案的选型
在红包业务中,领取是一个高频的操作,在领取方式的设计中,需要业务场景考虑一个红包是否会被多个用户同时领取。多个用户同时去领取同一个红包可能会导致热点账户问题,成为系统性能的瓶颈。解决热点账户问题也有多个方案,我们需要结合视频红包的业务场景特点来选取合适的方案。
稳定性容灾
在本次春节活动中,包括 B2C 和 C2C 两种业务流程,其中每个业务流量链路都依赖很多的下游服务和基础服务。在这种大型活动中,如果出现黑天鹅事件时,如何快速止损,减少对系统的整体影响,是一个必须要考虑的问题。
资金安全保证
在春节活动期间,B2C 会发放大量的红包补贴,如果补贴发生超发,或者补贴的核销出现问题,一个补贴被多次核销,将会造成大量的资损。另外 C2C 也涉及到用户的资金流入流出,如果用户领取红包后如果发现钱变少了,也可能会造成大量的客诉和资损。因此资金安全这块需要做好充足的准备。
红包系统的压测
在传统的压测方式中,我们一般会对某个大流量接口进行压测从而得到系统的瓶颈。然而在红包系统中,用户的发领和查都是同时进行的,并且这几个接口之间也是相互依赖的,比如需要先发红包,有了红包后才能触发多个人的领取,领取完成后才可以查看领取详情。如果使用传统的单接口的压测方式,首先 mock 数据会非常困难,和支付相应的压测数据因为涉及实名还