QQ 红包技术方案全解密 (二)

作者:许灵锋

接上文 《QQ红包技术方案全解密 (一) 》

三、红包创新玩法挑战

春节红包大战,从企业红包演变到刷一刷红包、个性化红包和AR红包,玩法不断创新,用户体验更好,活跃度提升,参与人数也从2亿增长到17年春节的3.42亿。

  1. 个性化红包

QQ个性红包是在红包外观上的一次大胆尝试,借助该功能,用户可使用霸气的书法体将自己的姓氏/或其他文字(提供自动简繁体转换)镌刻在红包封皮上。此外,我们还提供了具有新年氛围的贺岁红包、与腾讯IP紧密结合的QQ family、游戏形象、动漫形象等卡通红包,大大提高了QQ红包的趣味性与观赏性。个性红包功能上线后,有超过30%的红包用户选择使用个性红包。在2016年春节期间共有1500万用户使用该功能,2016年除夕当晚突破8千万的个性红包发送量。

个性红包在普通基础上,允许用户修改红包封皮,展示个性,应合场景,因此设计的要点是使用户操作顺畅,既保持发、抢红包的流畅体验,又能显示个性和有趣好玩。

个性化红包流程架构如下图所示:

从上图可以看出,简化后的红包的发放过程经历红包终端->财付通->红包后台->手QAIO(聊天交互窗口)->拆(抢)红包页面等过程,流程较长(忽略了一些细节,实际流程更复杂),在这些步骤过程中如果每一步都走后台判断个性化红包状态,必然影响到红包的发放流畅性。

为了尽量不影响用户发红包体验,个性化红包在架构和运营上作了很多解藕和柔性设计。包括个性字体提前绘制,资源预加载,功能开关和容灾柔性处理等。

字体提前绘制

个性化红包支持所有简体与繁体汉字,并支持部分简体汉字转换成繁体汉字,为了改善使用“姓氏红包”用户的体验,我们把常用的300个姓氏,使用预生成的方式,在用户手Q空闲的时候生成常用的姓氏图片保存到本地。其他的非常用姓氏,在展示的时候合成,合成一次保存在本地,下次在本地读取。

手Q终端在空闲时绘制好字体贴图,支持定时更新背景图和字体库,对非常用字,则启动个性化字体引擎生成对应的个性化贴图。

用户在发放或收到红包时,个性化背景和字体贴图已经生成好,不需要再生成,收发红包流畅体验无损。

资源预加载

个性化红包封素材提前制作好,上传到CDN网络,手Q在空闲时提前从CDN下载素材文件,并定时检查素材更新情况,及时更新。

功能开关

用户是否设置个性红包,选择的个性红包贴图样式,是否启用个性红包等信息,如果每次判断都从后台拉取,势必增加后台压力。用户对个性红包的设置信息,其实变化不大,并且访问红包商场实时设置的状态的结果在手Q终端是存在的。因此我们设计将这些用户状态FLAG在手Q登录时,从后台拉取一次后保存在手Q终端,在发红包的过程中将FLAG信息传递到下游服务中,通过红包商城设置的个性化红包标志,实时更新手Q本地配置。

这样的设计有几个好处:

  • 用户的个性化设置不再依赖于后台,发红包过程完全本地操作,没有任何延时,不影响红包的发放。
  • FLAG标志可以作为容灾开关,如果临时取消个性红包,或后台故障,可以临时屏蔽个性红包功能,恢复为默认红包样式,保障任何时刻红包功能正常可用。
  • FLAG标志可支持扩展,在红包后台可以根据扩展,支持付费红包样式(付费购买)、特权红包样式(如超会专享)等,支持红包商城扩展各种各样的个性化红包。
  • 除了从后台拉取FLAG,当业务有调整导致FLAG变化,红包后台可以向手Q终端主动push FLAG状态,使得用户及时感知变化,进一步增强用户使用体验。

容灾柔性处理

相对于手Q平台功能,个性红包系统相对独立,运营和更新很快,系统各功能组件出现问题的几率可能较多,如果个性红包业务出现问题,而影响到正常红包发放或手Q功能的使用,会对QQ口碑造成很大负面影响。我们在系统中设计了多处容灾和柔性处理措施,在个性红包业务异常时,能降级提供服务,最差时取消个性红包功能。

柔性措施一:用户登录时拉取个性红包FLAG失败时,采用默认红包样式。 柔性措施二:红包后台向个性化红包后台拉取个性化设置鉴权详情(是否付费、是否会员专享等)时,如果拉取异常,采用默认红包样式。 柔性措施三:个性化红包由用户输入姓氏,指定显示文字,可能遇到敏感字或需要临时下线,可以通过向手Q下发FLAG标志,临时取消个性红包功能,恢复到默认红包样式。

  1. AR红包

AR红包是“LBS+AR天降红包”的简称,这个创新的玩法得到了用户的一致好评,参与用户2.57亿次,共计领取红包和礼券20.5亿个,获得了口碑和活跃的双丰收。

缓存设计

LBS+AR红包与以往的红包最大的不同在于多了一重地理位置关联,全国有上千万的地理位置信息,结合活动的任务奖品数据产生了海量的配置数据,而这些数据都需要快速实时读取。这是系统设计的一大挑战。

配置数据有以下特点:

  • 数据量很大(亿级),数据间有紧密的关联,我们采用MySQL数据库集群存储,并构建有Web可视化配置投放平台,实现自动容灾和备份的功能;
  • “一次配好,到处使用”,配置读量远高于写量,基本思想是设计开发一种缓存,放弃写性能,将读性能优化到极致。

上千兆的配置数据,如何供抽奖系统快速检索?考虑到业务使用场景、配置数据大小及MySQL性能,可以采用预先构建全量缓存并进行有序组织,由同步模块负责将构建好的配置数据同步到抽奖系统,供业务进程直接使用。为保证配置数据完整性,构建缓存采用双Buffer设计,只有构建或同步完成后才切换到最新配置。

地图打点与查点

基于LBS的红包活动离不开地理位置相关的业务交互。在AR红包中,用户打开地图会定期向后台上报坐标,后台需要根据坐标获取周围可用的活动任务投放点,投放点事先都会进行安全筛查,去掉具有安全隐患的区域,避免给用户带来人身安全问题,本节主要介绍如何管理这些投放点。

地图格子

将整个二维平面根据坐标分成边长相等的正方形格子,根据用户的坐标用简单的数学运算即可获取相应的格子ID,时间复杂度O(1)。一个格子是一次查询的最小粒度。每次查询会返回以用户为中心周围5*5共计25个格子的任务点。

打点

红包是以任务维度投放的,每个任务关联一个POI集合,每个POI集合中包含几个到上百万不等的POI点,每个POI点都有一个经纬度信息。

打点即是事先建立格子到任务列表的映射。所有格子数据有序组织并存储在共享内存里,使用二分查找提升读性能。

查点流程

(1) 客户端上报经纬度。

(2) 根据经纬度计算中心格子ID。

(3) 根据中心格子ID及半径配置,获取周围格子列表。

(4) 在打点系统中获得此片区域全部POI和任务信息。

(5) 检查任务状态后返回给客户端。

采集系统

采集系统主要负责汇总各行政区红包发放状态数据,主要提供以下功能:

(1)实时返回区级行政区红包计数;

(2)实时接受主逻辑的查询,返回奖品发放状态;

(3)返回活动预告以及参数配置等辅助信息。

由于红包是按行政区进行投放的,每个行政区约投放10个任务,每个任务又关联多种类型的红包,如果每次查询区级红包余量时,都实时计算和汇总红包状态数据,扩散带来的包量开销会比较大,为此,我们还是采用双Buffer缓存来解决该问题,一个进程负责将采集到的数据写到缓存,另一组进程提供查询服务。另外,还可以根据存储层的压力,适当地调整采集的频率,使得统计数据尽可能实时。

四、总结

自2015年起,历年除夕当天QQ红包收发情况如下表所示,可以看出,参与人数和红包首发总个数都是节节升高。

QQ红包业务复杂,海量访问,涉及业务多,流程长,项目的成功离不开相关兄弟部门的大力支持和能力合作,特别感谢即通产品部、财付通、即通平台部、SNG市场部、SNG商业广告中心、增值渠道部、社交用户体验设计部、集团市场与公关部、增值产品部、社交与效果广告部、网络质量部、即通综合部、架构平台部、社交平台部、网络运营部等15个兄弟部门相关同事的付出和给力支持。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏日志易的专栏

日志易:IT 运维分析及海量日志搜索的实践之路(上)

IT运维分析(IT Operation Analytics, ITOA)是近年兴起的把大数据技术应用于分析IT运维产生的大量数据,数据来源主要有日志、网络流量、...

69410
来自专栏日志易的专栏

(案例篇)日志易:IT运维分析及海量日志搜索的实践之路(下)

本篇分享了日志易在金融、运营商及电网等行业的应用案例。

36800
来自专栏社区的朋友们

吴林松:运维没有 out of control一说

当我们邀请林松在运维日下午茶跟伙伴们聊聊运维职业成长的经验,他很爽快的答应了,又很谦虚的说希望别把兄弟们带沟里去了。事实究竟如何,来不及解释了,一起看看吧。

47000
来自专栏织云平台团队的专栏

腾讯赵建春:AI浪潮下的高效运维思考及实践

腾讯 SNG 助理总经理、GOPS 金牌讲师赵建春老师受邀出席大会,并带来精彩演讲《AI 浪潮下的高效运维思考与实践》。

79810
来自专栏织云平台团队的专栏

运维的难题 : 800 万用户,救 or 不救?

本文主要从三个部分介绍了手机QQ运维团队在一次业务被动迁移过程中遇到的挑战,在面对挑战的时候团队是如何坚守一切以用户价值为依归的价值观。

85730
来自专栏织云平台团队的专栏

凤凰涅槃,浴火重生

本文以一个故事的形式讲述了一个IT项目从即将“流产“、IT运维部门面临被拆分的囧境到逐步的通过一系列举措取得项目成功并实现业务价值的过程, 浅显易懂,结合自己曾...

26120
来自专栏织云平台团队的专栏

从鹿晗关晓彤恋情事件看运维的节假日准备工作

鹿晗关晓彤公布恋情,微博服务短暂不可用。那么,面对这种突如其来的节(sa)假 (gou)日(liang)热点,该如何才能做到有条不紊,高效运维呢?

1.9K10
来自专栏QQ会员技术团队的专栏

请拿数据说质量

前面我们从被动角度发现质量改进点,今天我们聊聊主动发现,即如何建立一个产品质量度量指标?如何监控?

11720
来自专栏织云平台团队的专栏

自动化运维之架构设计六要点

运维自动化是我们所渴望获得的,但是我们在一味强调自动化能力时,却忽略了影响自动化落地的一个关键因素。那便是跟运维朝夕相处,让人又爱又恨的业务架构。因为业务架构是...

1.5K10
来自专栏日志易的专栏

@三斗室 饶琛琳“大话”运维安全

运维安全是企业安全保障的基石,不同于Web安全、移动安全或者业务安全,运维安全环节出现问题往往会比较严重。

38010

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励