在春节活动期间,抖音将视频和春节红包相结合,用户可以通过拍视频发红包的方式来给粉丝和好友送祝福。
业务玩法整个活动玩法分为 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 数据会非常困难,和支付相应的压测数据因为涉及实名还需要特殊生成,而且单个接口单个接口的压测很难得到系统的真实瓶颈,因此如何对系统进行全链路的压测从而得到系统准确的瓶颈也是我们需要解决的一个问题。
我们怎么做的通用红包系统的设计对于红包系统,核心操作包括红包发送,领取,以及未领取的退款这三个操作。另外我们还会需要去查一些红包的信息和领取的信息等。同时对于发送,领取和退款这三个核心操作,我们需要对它们的状态进行一个维护。同时在我们的业务场景中,还存在 B2C 特有的补贴的发放,我们也需要维护补贴的状态。
在上面初步介绍红包系统后,可以看到红包的几个功能模块,有发放,领取,退款,补贴发放以及各种信息查询,另外还有状态机的维护等,对红包的功能进行梳理后,我们开始对红包的模块进行划分。
划分原则- 功能内聚,每个系统只处理一个任务,方便之后系统的开发和迭代,以及问题的排查
- API 网关层只进行简单的 proxy 处理
- 异步任务拆解
- 读写分离,将红包的核心操作和红包的查询分成两个服务
- 红包网关服务
- HTTP API 网关,对外对接客户端和 h5,对内封装各个系统 rpc 接口,限流,权限控制、降级等功能
- 红包核心服务
- 主要承载红包核心功能,包括红包的发放、领取、退款,以及红包补贴的发放,维护红包状态机,红包的状态推进
- 红包查询服务
- 主要承载红包查询功能,包括红包详情、红包发送状态、红包领取状态、红包领取详情、红包补贴信息
- 红包异步服务
- 主要承载红包异步任务,保证状态机的流转,包括红包的转账,红包的退款,以及红包补贴的状态推进
- 红包基础服务
- 主要承载红包各个系统的公共调用,例如对 DB,redis、tcc 的操作,公共常量和工具类,相当于红包的基础工具包
- 红包对账服务
- 主要承载红包和财经的对账逻辑,按天和财经对账
最后整个视频红包的系统架构如图所示