首家大数据培训挂牌机构 股票代码:837906 | EN CN
阿里巴巴菜鸟级数据产品经理半年回顾总结篇
干货教程:如何绘制业务流程图(二)
干货教程:如何绘制业务流程图(一)
技术贴:如何在数据库中秘密地查询隐私数据
攻略教程:信息图(infographic)是怎么做出来的?
分析师一定要看!用数据讲故事的五个步骤
技术篇:怎样玩转千万级别的数据?
北漂书生:大数据时代SEO数据如何搜集和分析
干货,从十大问题重新认识并读懂互联网
相似图片搜索、算法、识别的原理解析(下)
相似图片搜索、算法、识别的原理解析(上)
制作信息图时请遵循这10条原则
提高表格可读性的一些技巧,适用于Excel、PPT等数据报表
实用教程:如何让Excel图表更具“商务气质”?
一张数据信息图是这样制作完成的
菜鸟读财报,如何从上市公司财报中挖情报?
北大数据分析老鸟写给学弟们一封信
如何一步一步制作出高品质数据信息图?
总结:海量数据分析处理的十个方法
【实战经验】数据分析师如何了解老板真正想法?
零售业数据分析那些事儿
数据分析时l常用电子表格公式【大全】
用数据来告诉你 上市公司财报的秘密
这12个数据能 帮你搞定淘宝店铺
首席工程师揭秘:LinkedIn大数据后台是如何运作的?(四)
首席工程师揭秘:LinkedIn大数据后台是如何运作的?(三)
首席工程师揭秘:LinkedIn大数据后台是如何运作的?(二)
首席工程师揭秘:LinkedIn大数据后台是如何运作的?(一)
淘宝网店从激活到挽留,4步走玩转数据营销
文案怎样写才有意思、不空洞、打动人?
入门级扫盲贴:数据分析的步骤有哪些?
关系即数据,论社交媒体的关系转换
数据的力量,苹果教你用数据鄙视竞争对手
谁说文科生不能做数据分析?数据分析入行→技能提升→优势
产品运营数据分析——SPSS数据分组案例
如何追踪iPhone和iPad等移动设备的用户行为数据?
阿里巴巴中国站:用户满意度指标权重计算方法
广告中的AdNetwork、AdExchange、DSP、SSP、RTB和DMP是什么?
信息图制作教程:关于数值的表现
为什么大数据会如此轰动?(值得深度的文章)
多图技术贴:深入浅出解析大数据平台架构
面板数据分析中标准误的估计修正——根据Peterson (2009)的归纳
财务官、投资人、CIO看过来:给企业数据定价
推荐系统中常用算法 以及优点缺点对比
探索Weotta搜索引擎背后的大数据技术
如何识别虚假数据?
为什么我们像驯化小狗那样驯化算法
程序员必须知道的10大基础实用算法及其讲解
电子商务:最影响转化率的九大要素
如何迅速成为一名数据分析师?
想从事大数据、海量数据处理相关的工作,如何自学打基础?
如何用亚马逊弹性MapReduce分析大数据?
译文:机器学习算法基础知识
给hadoop新手的一封信:Hadoop入门自学及对就业的帮助
从入门到精通,我是这样学习算法的
小商家,从老客户身上获取的数据才更有意义
13页PPT讲述:大数据下网站数据分析应用
40页PPT详解:京东大数据基础构架与创新应用
67页PPT解密搜索引擎背后的大技术:知识图谱,大数据语义链接的基石
营销洞察力——10个营销度量指标
技术篇:前端数据之美如何展示?
董飞:美国大数据工程师面试攻略【PPT】
easel:如何制作好的信息图——来自专家的顶级技巧
大数据实操:以3D打印机为例,如何知道卖点有没有市场需求?
大数据建模 需要了解的九大形式
用户画像数据建模方法
从规划开始,公司or企业如何入手和实施大数据?
干货:商品信息数据分析和展现系统的设计与开发
高手教你用Excel制作百度迁徙数据地图
50篇干货:淘宝店/电子商务如何玩转数据分析?
精华索引:大数据实际应用案例50篇
验证最小化可行产品 (MVP) 的 15 种方法
干货:数据分析师的完整知识结构
大数据技术Hadoop面试题,看看你能答对多少?答案在后面
用SPSS做数据分析?先弄懂SPSS的基础知识吧
怎样做出优秀的扁平化设计风格PPT? 扁平化PPT设计手册#3
解答│做大数据过程中遇到的13个问题
40页PPT│社交网络发展的新动力:大数据与众包
以Amazon、豆瓣网为例,探索推荐引擎内部的秘密#1
怎样做出优秀的扁平化设计风格PPT?#2
怎样做出优秀的扁平化设计风格PPT?#1
36页PPT│大数据分析关键技术在腾讯的应用服务创新
如何丰满地做SWOT分析?
【35页PPT】TalkingData研发副总阎志涛:移动互联网大数据处理系统架构
27页PPT|以珍爱网为例,如何构建有业务价值的数据分析系统?
国外数据新闻资源分享
21页PPT重磅发布:Mariana——腾讯深度学习平台的进展与应用
从0到100——知乎架构变迁史
PPT解读:百度大数据质量保障方案探索
45页PPT|大数据环境下实现一个O2O通用推荐引擎的实践
从数据看豆瓣兴衰
深度学习系列:解密最接近人脑的智能学习机器——深度学习及并行化实现(四)
重磅推荐:129页PPT讲述移动时代创业黄金法则 via:腾讯企鹅智酷
重磅推荐:大数据工程师飞林沙的年终总结&算法数据的思考
OpenKN——网络大数据时代的知识计算引擎
大数据下城市计算的典型应用
技术贴:大数据告诉你,如何给微信公众号文章取标题?
你的QQ暴露了你的心——QQ大数据及其应用介绍PPT
如何从企业报表看企业的生存能力?
实用的大数据技巧合集
技术帝揭秘:充电宝是如何盗取你的个人隐私的?
重磅!50页PPT揭秘腾讯大数据平台与推荐应用架构
原创教程:饼图之复合饼图与双层饼图(1)
PPT:大数据时代的设计特点——不了解这个你做不了今天的设计
教程贴:如何用方程式写春联?
原创教程:如何用Excel制作简易动态对比图
深度译文:机器学习那些事
教程帖:数学之美——手把手教你用Excel画心(动态图)
董老师走进斯坦福,聊聊硅谷创业公司和大数据的事儿(附课件PPT下载)
【限时】年度钜献,108个大数据文档PDF开放下载
董飞专栏:大数据入门——大数据相关技术、Hadoop生态、LinkedIn内部实战
亿级用户下的新浪微博平台架构
一张图了解磁盘里的数据结构
浅析数据化设计思维在阿里系产品的应用
美团推荐算法实践
一个P2P创业公司有哪些部门,都是做什么的?
一个P2P平台的详细运营框架是怎样的?
机器学习中的算法——决策树模型组合之随机森林与GBDT
神经网络简史
58页PPT看懂互联网趋势,大数据/物联网/云计算/4G都有了
广点通背后的大数据技术秘密——大规模主题模型建模及其在腾讯业务中的应用(附PPT)
微信红包之CBA实践PPT——移动互联网海量访问系统设计
一文读懂机器学习,大数据/自然语言处理/算法全有了……
搜狐新闻客户端的背后大数据技术原理——推荐系统(PPT)
原创教程:用Excel做动态双层饼图
半小时读懂PMP私有广告交易市场
怎样分析样本调研数据(译)
PPT:支付宝背后的大数据技术——DataLab、Higo的实践及应用
大数据技术人员的工具包——开源大数据处理工具list(限时下载)
计算机视觉:随机森林算法在人体识别中的应用
24页PPT:机器学习——支持向量机SVM简介(附下载)
互联网高手教你如何搜集你想要的信息
深度:对地观测大数据处理、挑战与思考
原创教程:用Excel做饼图之复合饼图与双层饼图(2)
移动大数据时代: 无线网络的挑战与机遇(附pdf下载)
Excel使用技巧——25招必学秘技
【年度热门】加上这些 Excel 技能点,秒杀众人(多图)
原创教程:用Excel做纵向折线图
知识图谱——机器大脑中的知识库
何明科专栏:用数据化的方式解析投资条款
DT时代,如何用大数据分析创造商业价值(23页PPT)
MIT牛人梳理脉络详解宏伟现代数据体系
你的老婆是怎么算出来的?揭秘佳缘用户推荐系统
飞林沙:商品推荐算法&推荐解释
PPT:如何成为真正的数据架构师?(附下载)
开源大数据查询分析引擎现状
董飞专栏:打造数据产品必知秘籍
译文:如何做强大又漂亮的信息图
如何使用Amazon Machine Learning构建机器学习预测模型
如何运用数据协助货架管理(内附26张PPT)
SVM算法
主流大数据系统在后台的层次角色及数据流向
PPT:阿里全息大数据构建与应用
人脸识别技术大总结——Face Detection & Alignment
教程:用Excel制作成对条形图
易观智库:大数据下的用户分析及用户画像(18页PPT附下载)
技术向:如何设计企业级大数据分析平台?
电商数据分析基础指标体系
IBM SPSS Modeler 决策树之银行行销预测应用分析
拓扑数据分析与机器学习的相互促进
基于 R 语言和 SPSS 的决策树算法介绍及应用
用php做爬虫 百万级别知乎用户数据爬取与分析
另类新浪微博基本数据采集方法
以10万+阅读的文章为例 教你做微信公众号的运营数据分析
破解数据三大难题:变现?交易?隐私?
微店的大数据平台建设实践与探讨
阿里巴巴PPT:大数据基础建议及产品应用之道
基于社会媒体的预测技术
人工智能简史
技巧:演讲中怎样用数据说话
马云和小贝选谁做老公?写给非数据人的数据世界入门指南
掘金大数据产业链:上游资源+中游技术+下游应用
原创教程:手把手教你用Excel做多层折线图
销售分析:如何从数据指标发现背后的故事
如何一步步从数据产品菜鸟走到骨干数据产品
也来谈谈微博的用户画像
行走在网格之间:微博用户关系模型
如何拍出和明星一样美爆的自拍照?斯坦福大学用卷积神经网络建模告诉你
运营商如何玩转大数据? 浙江移动云计算和大数据实践(PPT附下载)
大数据分析的集中化之路 建设银行大数据应用实践PPT
腾讯防刷负责人:基于用户画像大数据的电商防刷架构
创业提案的逻辑
友盟分享 | 移动大数据平台架构思想以及实践经验
寻路推荐 豆瓣推荐系统实践之路
“小数据”的统计学
重磅!8大策略让你对抗机器学习数据集里的不均衡数据
小团队撬动大数据——当当推荐团队的机器学习实践
微博推荐架构的演进
科普文 手把手教你微信公众号数据分析
信息图制作的六个注意点
【权利的游戏】剧透新玩法:情理之中?意料之外
推荐系统(Recommender System)的技术基础
核心算法 谷歌如何从网络的大海里捞到针
Quora数据科学家和机器学习工程师是如何合作的
阿里巴巴PPT:大数据下的数据安全
数据建模那点事儿
全民拥抱Docker云–Lhotse系统经验分享
实时股票分析系统的架构与算法
架构师必看 京东咚咚架构演进
什么叫对数据敏感?怎样做数据分析?
推荐系统基础知识储备
刘德寰:数据科学的整合与细分 数据科学的七个危险趋势(视频)
实际工作中,如何做简单的数据分析?
分布式前置机器学习在威胁情报中的应用(附PPT下载)
数据科学 怎样进行大数据的入门级学习?
扛住100亿次请求 如何做一个“有把握”的春晚红包系统?(PPT下载)
从 LinkedIn 的数据处理机制学习数据架构
大数据会如何改变管理咨询公司(I)
优秀大数据GitHub项目一览
生硬的数字和数据新闻:这么近,那么远
经典大数据架构案例:酷狗音乐的大数据平台重构(长文)
揭秘中兴大数据在银行领域的系统部署
基于大数据的用户画像构建(理论篇)
【R】支持向量机模型实现
数据图处处有陷阱?五个例子教你辨真伪
如何用R绘制地图
你确定你真的懂用户画像?
数据模型需要多少训练数据?
【接地气】01 数据报表的颜色怎么配
游戏价值和数据分析新思路
【R】异常值检测
快的打车架构实践
豆瓣还是朋友圈:大数据、新方法和日常问
PPT数据图表,怎么做才好看?
大道至简的数据体系构建方法论
数据的误区及自身业务
新浪微博的用户画像是怎样构建的?
面试干货!21个必知数据科学面试题和答案part1(1-11)
易观智库:中国大数据产业生态图谱2016(附下载)
Airbnb的数据基础架构
50PB海量数据排序,谷歌是这么做的
大数据时代工程师如何应对–今日头条走进硅谷技术讲座
D3.js教学记(下)
D3.js教学记(上)
飞林沙:企业级服务公司如何赚钱?只有平台级产品才有大数据的理论
一个母婴电子商务网站的大数据平台及机器学习实践
7大板块 组成数据分析师的完整知识结构
干货:SaaS领域如何分析收入增长?
学术 | 词嵌入的类比特性有实用意义吗?
6个用好大数据的秘诀
一个数据库外行眼中的微信优化 (附专家补充)
大数据调研,如何实现快全准?
数据大师Olivier Grisel给志向高远的数据科学家的指引
数据堂肖永红:数据交易的是使用权或数据的增值,而不是数据本身(PPT附下载)
淘宝商品详情平台化思考与实践
刘译璟:百分点大数据理念和实践(图文+PPT下载)
如何快速搞定一份看起来还不错的演示文档?
【BABY夜谈大数据】决策树
数据驱动设计:数据处理流程、分析方法和实战案例
美图数据总监:Facebook的法宝,我们在产品中怎么用?
树的内核:量化树结构化数据之间的相似性
拿到用户数据之后,LinkedIn怎么赚钱?
GrowingIO张溪梦:增长黑客的核心 企业应该重视产品留存率(附PPT下载)
[译]Airbnb是如何使用数据理解用户旅行体验的?
微博推荐数据服务代理: hyper_proxy的设计和实现
星图数据谷熠:消费领域DaaS 大数据重构未来商业游戏规则(附PPT下载)
鲍忠铁:TalkingData大数据技术与应用实践(PPT下载)
【干货教材】数据分析VS业务分析需求
九枝兰专访:数字营销的核心—企业如何使用数据管理平台(DMP)进行精准营销
我们的应用系统是如何支撑千万级别用户的
R应用空间数据科学
Excel进行高级数据分析(上)
Excel进行高级数据分析(下)
国内各大互联网公司2.0版技术站点收集
网站数据分析思路导图
大数据分析报表设计开发要素
大数据需要的12个工具 推荐
YARN/MRv2 Resource Manager深入剖析—NM管理
YARN/MRv2 Resource Manager深入剖析—RMApp状态机分析
Hadoop 1.0与Hadoop 2.0资源管理方案对比
Hadoop 2.0中单点故障解决方案总结
Hadoop 2.0 (YARN)中的安全机制概述
Hadoop 新特性、改进、优化和Bug分析系列1:YARN-378
Hadoop 新特性、改进、优化和Bug分析系列2:YARN-45
Hadoop 新特性、改进、优化和Bug分析系列3:YARN-392
Hadoop版本选择探讨
探究提高Hadoop稳定性与性能的方法
《Effective C++》读书笔记(第一部分)
Hadoop分布式环境下的数据抽样
Hadoop计算能力调度器算法解析
如何编写Hadoop调度器
数据结构之红黑树
Hadoop pipes设计原理
《C++ Primer plus》学习笔记之”类”
《C++ Primer plus》学习笔记之”类继承”
《C++ Primer plus》学习笔记之”C++中的代码重用”
《C++ Primer plus》学习笔记之”异常”
《C++ Primer plus》学习笔记之”RTTI”
Hadoop pipes编程
Hadoop Streaming高级编程
《C++ Primer plus》学习笔记之”标准模板库”
《C++ Primer plus》学习笔记之”输入输出库”
Linux Shell 命令总结
算法之图搜索算法(一)
awk使用总结
素数判定算法
《C++ Primer plus》学习笔记之“函数探幽”
使用Thrift RPC编写程序
如何在Hadoop上编写MapReduce程序
怎样从10亿查询词找出出现频率最高的10个

扛住100亿次请求 如何做一个“有把握”的春晚红包系统?(PPT下载)

于2017-04-01由小牛君创建

分享到:


羊年春晚摇一摇活动已经落下帷幕,现在回过头来看看这一全民参与的有趣的活动背后,有着怎样的后台系统?这个系统又是如何被设计与实现出来的?

微信红包

作者:张文瑞 iotazhang  腾讯 WXG 技术架构部,本文提供PPT下载,下载请看末尾链接。

微信红包

1.   春晚摇一摇活动形式

在了解这个系统之前,先看看羊年春晚有哪些活动形式?春晚摇一摇复用了摇一摇入口,但提供了全新的界面和交互内容。

微信红包

在羊年春晚摇一摇界面里,用户摇动手机后,可以看到明星拜年、全家福、好友贺卡等精彩纷呈的活动页;也会有温馨的“休息一下”,或让很多误以为中奖的“挂服务器”等特殊用途的页面。

大家最期待的肯定是摇红包,摇中红包的幸运用户除了自己领到一份红包(种子红包)外,还可以领到若干份用于分享给其他好友的红包(分裂红包)。

围绕这些活动,下面将会通过4个处于项目不同阶段的里程碑版本来介绍我们设计、实现这一系统过程中的一些思考和做法,特别是标题里提到的“有把握”是由何而来。

2.   V0.1原型系统

原型系统很简单,但已经基本实现了春晚摇一摇的需求。原型系统的架构见下图。

微信红包

相关的处理流程如下:

  • 用户摇动手机后,客户端产生摇一摇请求,请求发到接入服务后,会被转发到摇一摇服务;
  • 摇一摇服务会根据现场节目的流程,经过一系列的逻辑判断,给客户端返回一个结果:明星拜年、红包或者其他活动;
  • 假设是摇到了红包,由于红包都是企业赞助的,需要对企业形象进行展示,客户端会从CDN拉回这个企业的LOGO等资源,最终展示出一个完整的红包;
  • 随后用户拆红包时,请求会进入红包系统,再到支付系统,最后到财付通系统完成一系列复杂的账务处理,最终拿到红包;
  • 用户还可以分享红包,被分享的红包通过消息系统发给好友或群,其他人可以再抢一轮;在这一过程中,安全系统保障红包活动的业务安全。
  • 上述数据的流动可以分下类:资源流、信息流、业务流和资金流。本文将主要聚焦在资源流和信息流。

3.   面临的挑战

原型系统看起来已经足够简单,功能也基本完备,是不是可以稍加修改后直接用在春晚现场呢?答案肯定是不行。那么问题来了:为什么不行?

回答这一问题前,我们先看一下看似简单的活动背后,面临着哪些挑战?

微信红包

海量用户请求,预计请求峰值1000万/秒

1000万/秒究竟是多大的规模,可以通过下图更直观地感受下:

微信红包

注:抢火车票数据引用自公开数据

春晚全程互动,不确定因素多

这个系统需要跟羊年春晚全程紧密互动,从项目开始到结束,有一系列的不确定因素会加大系统实现的复杂度:在开发阶段,针对节目与活动形式如何配合这个问题的讨论有可能持续到春晚前,如何使系统能服务多变的需求?在春晚现场,节目数量多,节目时长甚至顺序都有可能调整,如何做到现场节目与摇一摇活动无缝衔接?

系统深度定制,成败在此一举

作为专为春晚设计的系统,部署上线后真正能运行的时间就只有几个小时,这几个小时内,常规系统所提倡的灰度发布、先扛住再优化等做法并不是太适用。在这短暂的时间内,只有一次机会:要么成功,要么失败。

全民高度关注,必须成功

春晚会有7亿左右的观众,大家对这一活动抱有很大期望,全民瞩目之下,只能成功,不能失败。

l缺少历史经验,把握不大

如此大型的活动,对我们而言是史无前例的,并没有太大的信心。前边提到的1000万/秒的峰值是如何估算出来?各个环节会有多少用户参与?系统需要预留多少资源?这些问题不会有现成的答案,都需要摸索与思考。

可见,在看似简单的活动背后,隐藏了巨大的挑战,之前假设的原型系统不太可能胜任,需要做更深入的优化。

需要优化哪些环节?比较显而易见的有三个:

微信红包

流量带宽

春晚摇一摇需要用到大量的多媒体资源,这些资源都需要从CDN下载。经过评估,带宽峰值需求是3Tb/s,会带来巨大的带宽压力。即使我们有无限的资源,带宽需求能被满足,客户端在摇一摇后下载资源所需的等待时间也会带来很大的用户体验损害,是不可接受的。

接入质量

接入是后台系统的第一道关,所有请求都会到达接入。预计当晚会有3.5亿的在线,如何尽可能保障外网接入质量?甚至在外网波动时也不受太大影响?

海量请求

1000万/秒的请求从外网涌进来后,都被路由给摇一摇服务,也就是说摇一摇服务也将有1000万/秒的请求量。这意味着需要确保系统内2个1000万/秒的高可用,在分布式系统内,这是个挺大的问题。

如果要对系统能否最终取得成功量化一个信心指数的话,这个原型系统的信心指数是10。这个数字表示如果春晚摇一摇采用这套系统并取得成功,我们认为90%是靠运气。也可以换种说法:拿这个系统到春晚摇一摇,90%的可能会挂掉。

系统肯定不能以运气为基础,这几个问题如何解决?

4.   V0.5 测试版

V0.5的目标就是为了解决V0.1原型系统里的几个问题。

4.1.  资源预下载

春晚使用的资源比较多,也比较大,但基本都是静态资源,是可以提前几天下载到客户端的。保存到本地后,在需要使用的时候,客户端直接从本地加载,从而省去了集中在线下载所需的带宽需求,另外用户摇一摇时不再需要下载资源,可以有更好的用户体验。下图展示了资源预下载过程。

微信红包

资源推送模块负责将资源上传到CDN,同时推送资源列表给客户端。推送过程基于微信消息系统实现,可以在极短时间内把资源列表推送给几亿的用户。

资源预下载需要解决以下几个问题:

  • 资源交付情况
  • 资源更新
  • 资源下载失败
  • 资源覆盖率
  • 离线资源安全

通过这套资源预下载系统,2015.2.9 – 2015.2.18 期间,下发了资源65个,累计流量3.7PB,其中闲时峰值达到1Tb/s。

4.2.  外网接入梳理

要保证接入质量,除了需要保证接入服务本身的稳定性外,需要做到:

  • 具备在某些外网接入出现波动的时候,能自动切换到正常接入服务的能力;
  • 保障网络与服务具备足够的冗余容量。

微信客户端已经具备了外网自动容灾切换的能力,下边再看一下系统的外网部署情况。

微信红包

我们重新梳理了外网的部署,最终在上海IDC和深圳IDC各设置了9个TGW接入集群。每个IDC都在3个不同的园区分别部署了电信、移动和联通的外网接入线路。

另外,接入服务也进行了临时扩充,两地共有638台接入服务器,最多支持14.6亿的同时在线。

4.3.  接入服务内置“摇一摇”

4.3.1. 架构变动

前面提到,系统需要面对预计1000万/秒从外网的请求,同时还需要在内网转发同样是1000万/秒的请求给摇一摇服务,除此之外,还需要在各种异常情况下确保高可用。在如此海量请求之下,在这个分布式系统中,任何一点网络或服务的波动都可能是灾难性的,这里边的困难程度可想而知。

正面解决这一问题的成本过高,我们选择了去掉摇一摇服务——把摇一摇逻辑集成到了接入服务,从而去掉了1000万/秒的转发请求。

但这样做,有一个前提:不能降低接入服务的稳定性。因为不单是春晚摇一摇请求,微信消息收发等基础功能的请求也需要通过接入服务来中转,假如嵌入的摇一摇逻辑把接入服务拖垮,将得不偿失。

接入服务的架构刚好有助于解决这个问题。

微信红包

如上图所示,接入服务有一个网络IO模块,这个模块维护了来自客户端的TCP连接,收发数据,负责跟客户端通讯。网络IO模块是作为独立的进程组运作的,收到的请求通过本机共享内存发给接入逻辑模块处理。接入逻辑模块也是一组独立运行的进程,通常情况下是由请求中转逻辑通过RPC把请求转发给其他逻辑服务器处理。现在摇一摇逻辑作为嵌入逻辑,整合到了接入逻辑模块。由于网络IO模块与接入逻辑模块相互隔离,可以单独对接入逻辑模块进行升级,不会影响到已有的网络连接,这大大降低了嵌入逻辑带来的风险。

但这样还不够,还可以把嵌入到接入逻辑模块里的摇一摇逻辑尽可能简化,只保留比较简单、稳定、只需要单机计算即可完成的轻量逻辑;把其他较复杂、可能需要经常变更、或需要跨机访问的逻辑独立为摇一摇agent,作为独立运行的进程,通过本机共享内存与嵌入摇一摇逻辑通讯。

4.3.2. 摇一摇逻辑实现

接入服务架构的修改使得内置摇一摇逻辑变得可能,剩下的就是怎样实现春晚摇一摇逻辑?春晚摇一摇逻辑最重要的是摇红包,摇红包则需要重点解决以下问题:

红包如何发放?

微信红包

所有红包都源自红包系统,但为了在运行时不依赖红包系统,红包系统生成的种子红包文件被提前部署到了接入服务。为确保红包文件不会被重复发放,有个文件切分程序完成不同机器的文件切分,每台机只保留自己需要处理的那部分红包;另外,为了确保红包不漏,还有另一个程序完成所有机器红包文件的合并校验。

摇到红包的用户如果选择不分享红包,这些红包会被红包系统回收,一部分作为种子红包经由摇一摇agent回流到接入服务进行发放。

摇一摇agent会根据预设的策略给内置的摇一摇逻辑提供可下发的种子红包。红包是每秒匀速下发的,可以精确控制全局红包下发速度,保持在红包/支付系统能正常处理的范围之内。

 怎样保障安全?

单用户红包个数限制

业务要求每个用户最多可以领取3个红包,并且每个赞助商最多1个。常规实现里,需要在后台存储用户领取记录,每次摇一摇请求时取出来计算,如果拿到红包还需要更新存储。但这里增加了对存储的依赖,海量请求下,稳定性不易保障。我们借鉴了HTTP协议的COOKIE,在摇一摇协议里也实现了类似的机制:后台可以写入用户的红包领取情况到COOKIE,交由客户端保存,客户端在下次请求时带上来,服务器再取出来判断。这就无需后台存储也可以实现同样的目的。

微信红包

 

破解协议的恶意用户

协议总是有可能被破解的,恶意用户可以制作自动机,绕开COOKIE检测机制。所以COOKIE检测机制只能用于绝大部分使用正常客户端的用户。对于破解协议的恶意用户可以通过在本机存储红包下发记录来打击。

 游击战

虽然接入服务使用长连接,但恶意用户可以不断重连,变换不同的服务器来获取红包,针对这种情况,我们设计了红包发放汇总服务,可以在所有接入服务上同步已经达到红包领取上限的用户。

以上策略依次递进,后一步较前一步更深入一层解决问题,但是在设计上,前一步并不依赖后一步,即使后边的步骤出现故障无法按预期进行,也不会影响前边的结果,在最差的情况下,系统仍然可以保证单用户红包个数限制的需求。

 如何与春晚现场同步互动?

春晚摇一摇系统需要配合春晚现场节目进行互动,春晚切换节目或者主持人进行活动的口播时,系统都需要同步切换活动配置。

这里一是要求快速,二是要求稳定。为此我们设计了这样一个配置系统。

微信红包

春晚现场有一个配置前台,现场人员可以通过这个配置前台发送变更指令到后台。后台有上海和深圳两个接收点,每个接收点由处于不同园区的3组冗余的配置服务构成。配置服务接收到配置后会同步到另一接收点,同时以文件形式下发到所有接入服务。为确保同步成功,使用了RPC/RSYNC/变更系统三个冗余变更通道来同时变更配置。从配置前台发起变更,到接入服务加载配置,全程可以在10秒内完成。

看起来快速和稳定都满足了,是不是就已经足够了?请思考以下异常场景:

  • 春晚前台无法工作或网络故障,指令无法发给配置服务;
  • 所有配置服务均无法工作或网络故障,配置无法同步给接入服务。

这些异常在春晚节目过程中临时出现的话,一般情况下影响并不大,我们可以临时手工变更配置,赢得足够时间去修复系统。但是,如果此时主持人正在号召大家拿起手机抢红包,我们是没有足够的把握可以在极短时间内完成全系统的配置变更的,也就是说极有可能功亏一篑,关键配置变更不了,红包根本出不来。还有一种类似的场景,就是抢红包开始后,也因为配置变更问题,结束不了,没法切回其他活动,损坏用户体验。

微信红包

针对口播抢红包这个关键点,我们采用这样的配置变更策略:使用抢红包倒计时配置,到点后自动开始抢红包时段,经过预设的时间后,又自动结束。另外,由于春晚节目的口播时间点具有不确定性,我们制定了变更策略,在节目过程中可以逐步校正倒计时。于是这一关键配置就只与时间相关,机器时间相对容易保障,通过NTP就可以达到足够精度的时间同步,我们还对机器时间进行集中监控,可以发现并处理机器时间出现异常的机器。

4.4.   预估带来的问题

至此,V0.1原型系统前边提到的三个问题均已解决,1000万/秒的海量请求可以扛住。但是,1000万/秒是预估的,如果最终来了2000万怎么办?4000万呢?看起来数字有点不可思议,但真有1亿甚至几亿用户在不停的摇,也还是有可能出现的。

对于2000万/秒,我们其实并不担心,接入服务经过不断的优化,可以在提供容灾冗余的基础上,仍有2500万/秒的吞吐能力。

但是4000万/秒大大超出了后台服务能力,怎么办?

海量服务之道有个过载保护,如果没法硬扛,可以做到自我保护。简单的说就是前端保护后端,后端拒绝前端。

微信红包

客户端在服务访问不了、服务访问超时和服务限速时主动减少请求。

接入服务可以在发现某个客户端请求过于频繁时,会自动延迟回包,间接达到拉大请求间隔的效果,最终实现在后台把客户端请求频率限制在合理范围内;另外,接入服务会计算机器的CPU使用情况,CPU使用率到达不同预设阈值时,会自动返回不同档次的限速给客户端,通过客户端配合完成限速。

通过这些措施,在请求量超预期时,系统会自动降级,从而实现自保。

综上,可以得到V0.5测试版的架构,信心指数50。

微信红包

5.   V0.8 预览版

5.1.  核心体验是什么?

为什么V0.5测试版的信心指数只有50?还有哪些没做到位?

反思一下,可以发现:V0.5测试版主要聚焦于如何处理海量的摇一摇请求,让用户可以愉快的摇出红包,那摇出红包之后呢?V0.5测试版并未对这个问题作进一步的思考。

先看一下摇一摇的核心体验——摇红包,摇红包涉及摇到红包、拆红包、分享红包、好友抢红包等等步骤。

稍加分析即可发现,前三步是本人操作,后续是好友操作。从本人操作到好友操作之间是有一定时延的,这也就意味着这里其实可以接受一定程度的有损体验——延时。

微信红包

V0.5测试版已经解决摇红包的问题,剩下就看拆红包和分享红包了。

5.2.  如何确保拆红包和分享红包的用户体验?

可以把拆红包和分享红包抽象一下,它们都是由两个部分组成:用户操作(信息流)和后台的红包处理逻辑(业务流)。对用户来说,他关心的是操作是否成功,而不是后台的红包处理逻辑。因此这个问题可以进一步简化为:如何确保拆红包和分享红包的用户操作能成功?微信红包

我们在用户操作和红包处理逻辑之间加入了一个中间层。这个中间层包括红包简化逻辑和红包异步队列,实现了信息流和业务流的异步化和解耦。

红包简化逻辑

通过一些算法设计,红包简化逻辑可以通过本地计算完成对红包请求是否合法的初步判断,合法请求放入异步队列,然后就可以返回客户端处理成功;

红包异步队列

红包异步队列存储来自简化逻辑的请求。在存储上,异步队列使用3机方案,3机写2份成功即算入队成功。异步队列的处理逻辑会从队列取出请求继续发起对红包系统的调用,完成后续的红包逻辑。在红包系统故障时,会有妥善的重试策略,确保在系统恢复后重试成功。

接入服务、红包简化逻辑服务、红包异步队列构成了所谓的“铁三角”,可以在红包系统出现严重问题时,保护用户体验在较长时间内基本不受损,争取到修复故障的宝贵时间。

其实再仔细思考一下,“铁三角”还可以做得更强:把红包简化逻辑再次拆分为基本的业务逻辑和本地透传队列。业务逻辑完成红包合法性校验后,把请求写入本地文件队列,本地文件队列再透传给红包异步队列完成后续处理。这样即使红包异步队列出现意外抖动,也不会影响到用户操作结果。

微信红包

V0.8预览版已经基本成型,信心指数达到70。

微信红包

6.   V1.0 正式版

大家知道设计≠实现,为保证最终实现和线上系统运作符合设计预期,我们还做了:

 

全程压测

未经压测的系统是很危险的,无法真正了解系统在压力下的表现是否符合预期?系统的极限在哪?为此,我们建立一个压测环境,对系统进行不间断的压测。系统部署后,在现网环境也进行了多轮真实压测。

专题CODE REVIEW

多部门联合做了专题CODE REVIEW,在代码层面对关键路径做了仔细的评估。

内部演练

客户端发布流程较长,全面铺开版本需要更长的时间,做不到像服务器一样可以迅速上线fix问题。因此在发布客户端前,除了测试外,一次次的真实演练是非常必要的。

线上预热

在2015.2.12和2015.2.15,最终争取到了两次预热的机会,对系统进行了实战验证。

微信红包

因为预热规模的原因,摇一摇峰值并未达到预估值。但发放红包的速率一直维持在5万/秒的预设值,对后端“铁三角”和其后的红包系统进行了充分的检验。

复盘与调整

每次演练和预热都是难得的机会,不仅那些出异常的模块,那些看起来表现正常的模块,也可以通过复盘和推演,确认是否完全符合预期,挖掘出可能的隐患点,进而解决。

最终,我们发布了V1.0正式版。

微信红包

V1.0正式版架构上与V0.8预览版并无不同,但是信心指数加到了80。

我们认为剩下的20%里,有10%体现在对突发状况的预案与现场处置。系统如此庞大与复杂,是不是还有没想到、未暴露出来、还做得不够或者在有限资源内无法解决的问题?这些问题一旦如果出现了,是不是有可能最终左右了整个局面?所以最后的10%就是靠运气,别出现这些问题。

7.   后记

微信红包

2015.2.18 羊年春晚摇一摇

  • 全程摇动110亿次;
  • 峰值8.1亿/分钟,1400万/秒。

本文PPT下载:张文瑞_如何做一个“有把握”的春晚红包系统?.pdf  >>>

End.