前言
自2015年春节以来,QQ春节红包经历了企业红包(2015年)、刷一刷红包(2016年)和AR红包(2017年)几个阶段,通过不断创新玩法,活跃度节节攀升,成为春节一大玩点,给火红的春节带来一抹亮色。2017年除夕,AR红包、刷一刷红包再创新高,抢红包用户数达 3.42 亿,共刷出红包 37.77 亿个。
那么,QQ红包的技术方案究竟是怎样的?其整体架构如何?重要的系统是如何设计的?为了保证用户的体验,手Q终端做了哪些优化?今年的QQ红包又做了哪些新的尝试,遇到的问题是如何解决的呢?本文将从架构开始,到手Q终端优化,再到个性化红包和AR新玩法,为大家全面解密QQ红包技术方案。
一、QQ红包整体架构及重要系统
QQ春节红包以一个又一个的整点刷红包活动贯穿年三十,在除夕夜达到顶峰,是典型的海量用户秒杀场景,如何应对海量的用户刷红包洪流,保证刷得爽,红包安全到账,是QQ红包设计要解决的关键技术难点。另外,红包项目涉及手Q终端、手Q后台、QQ钱包(财付通)系统、礼券系统、公众号等诸多业务系统,流程长且多,各系统性能吞吐量差异很大,如何保证各系统形成一个有机整体,协调高效提供服务,也是难点之一。
下图为简化后QQ红包的架构,包括接入层、抽奖系统、存储系统、发货系统、公众号消息通知和CDN资源等几部分,请大家先有一个整体的认知,便于阅读下文。

本文将重点讲解接入层、抽奖系统和发货系统。
1.接入层
接入层是红包后台服务的大门,负责抽奖请求预处理,确保有效的请求才透传给后端服务。为保证自身高可用、高稳定,接入层还可实时控制手Q请求频率,避免海量请求压垮接入层,出现不可控局面。
在海量服务场景下,为避免网络开销,方便后端服务使用cache提升性能,接入层采用了一致性Hash寻址,保证同一个用户的请求只会落在同一台红包抽奖逻辑机器处理。
2.抽奖系统
抽奖系统作为QQ红包的核心系统,在承接用户抽奖请求,按设计合理的几率完成抽奖操作,将抽奖结果安全落地保存,并顺利发货等过程中,起到了关键作用。面对海量抽奖请求,如何及时作出响应,是抽奖系统面临的难题。
为了解决这些问题,我们采用了一些设计方法:
- 在接入层采用一致性Hash算法,同一用户的抽奖请求只会转发到相同的抽奖系统处理;
- 抽奖系统采用缓存机制,在加快抽奖过程的同时也减少了对存储层的访问压力; 奖品配额机制,平滑抽奖过程,各类奖品按比例有序抽中;
流水和对账机制,保证抽奖数据最终无差错发放到用户账户中;
抽奖系统的架构如下图所示: