简介

虽然红包雨复杂度低,但是是 C 端典型(或者说少有)的大流量写业务场景,且需要保障资金安全,根据业务形态和宣传资源,QPS 可达数万至数千万不等,可借由方案的推敲和设计一窥 C 端大流量核心场景系统设计的原则,和互联网后端工程师的核心能力模型 —— 大流量高并发下的系统设计和稳定性与容灾保障。

本文不会涉及具体的方案设计,只能泛泛而谈,希望能给读者一些启发。

需求概述

活动期内,每天定时领取红包。

业务价值

通过玩法将用户导量到入口和出口的场景。

比如免登录态参与玩法引导用户注册。比如玩完红包雨后跳转到春节活动主会场引导用户玩其他玩法。比如在聊天玩红包雨提升群聊活跃度。

流量预估

峰值流量取决于入口流量和玩法漏斗转化率,进而取决于:

  • 宣传入口:如春晚口播、全局弹窗、feed 流强插、挂件等,其中最有效的是春晚口播和全局弹窗
  • 用户数量:一般按高峰活跃用户数量估计,如有往年数据可以直接以 DAU 比例计算,如果定向圈人则需考虑圈人比例
  • 是否打散:打散是削峰的关键,需要除以打散时长,一般推崇向前打散
  • 玩法转化:如有往年数据可直接参考,如无则需依赖产品估算各级漏斗转化率给口径

流量预估会进行多次,一般是需求评审后 RD 会拍个粗估的峰值去做技术方案,开发期间 RD 和产品经过多轮讨论才能给出细化的预估,最终会通过演练场次算出精确的流量预估。此外对于红包雨这种玩法,在初期是无法确定真实的流量范围的,是否有春晚口播、是否使用全局弹窗,这些都不是前期能定下来的,所以初期技术方案设计上得按高估计。

不过如果产品往年做过类似玩法,可以参考往年数据进行粗估。

如有春晚口播,初期流量预估可以直接按该玩法普通导流方式的流量乘以十倍。

技术方案

技术挑战

大流量与高并发

应对挑战:

  • 开始时会瞬间涌入大量用户
  • 配置下发、玩法产生大量请求,对机房带宽产生压力
  • 与秒杀不同,红包雨需要尽量保证用户能领取到奖励,大量请求能走完领奖的完整流程

解决方案:

  • 入口打散
  • 减少网络交互,接口简单
  • 限流
  • 提前建连保活

稳定性与容灾

应对挑战:

  • 高并发下的玩法体验,保证服务稳定性
  • 故障时的快速止损,恢复玩法体验

解决方案:

  • 简化玩法,链路尽可能短,强依赖尽可能少
  • 合理的重试、超时、限流配置
  • 热备异构存储,设计合理的存储一致性维护方案

资金安全保障

应对挑战:

  • 预算充足时正常发放,预算不足时发放兜底
  • 每个用户的奖励需由策略算出,不能提前拆红包
  • 保证各种情况下,不超发

解决方案:

  • 合理设计预算控制模块抗超高流量的预算检查和扣除
  • 梳理各种异常情况的兜底表现
  • 幂等入账
  • 对账、熔断、一致性校验

决策分歧点

附加需求

不展开

边缘机房 or 核心机房

机房分为核心机房和边缘机房,流量一般由边缘机房流向核心机房,边缘机房的特点是离用户更近,带宽承载能力更强,基础设施建设相对不完善。

选择流量终结在边缘机房的原因可能是:

  • 极高稳定性和延迟要求
  • 不希望超高流量打到核心机房影响核心业务
  • 边缘机房到核心机房的带宽建设不足,可能无法承载超高流量

物理机 or 容器

在极端性能敏感或极致服务设计的情况下可以使用物理机,物理机的好处是:

  • 无容器带来的开销,对 CPU 调度器更友好
  • 无在离线混部、容器超卖的影响,服务更稳定不容易抖动
  • 容易在单机内部署多个进程,做本地基于共享内存的本地调用,省去网络开销
  • 容易实现有状态服务
  • 流量终结在物理机单机,符合超高流量服务的实践经验(关键路径无 RPC / 减少 RPC)

物理机的坏处是:

  • 技术栈相对不通用
  • 一般和有状态服务设计强绑定,无法 scale out
  • 单机丢数据即数据丢失,无法利用底层存储的冗余能力兜底