百度红包架构分析与推测

本文是笔者根据百度今年红包活动运行状况,对于红包内部架构的推测,并非百度具体架构。

2019年百度春晚期间请求量总计在209亿次,其中峰值主要集中在春晚期间四次互动红包活动,预估四次请求总量在160亿次,单次请求量在40亿次。
请求量分布状况假设以标准正态分布计算,超时时间按照3s计算,而整个互动时间大约在2分钟,瞬时最高QPS 1.97 亿次。

CDN加速

百度此次红包的主要形式为应用内直接组件+h5页面+微信小程序。对于cdn要求比较高的地方在于h5页面资源和微信小程序的资源。考虑到第一波参与抢红包用户实际上属于提前缓存好的用户,在第一波之后的应用商店全挂的情况,实际上新用户的涌入并未参与到第一波应用,这时对于cdn服务来说在一定层面上是通过应用商店实现了“服务降级”,实际上从百度app装机量考虑,如果是类似微信第一年红包活动大多数用户首次缓存,则很难应对如此请求量。

从百度云提供的信息来说,百度现在的cdn服务标准单台服务最高50GB,cdn服务一般资源响应在50ms以内。假设单个页面所需要资源在MB级别,按照资源命中70%计算,实际瞬时资源最大请求量应该在TB级别,百度如果要完全承载峰值在CDN加速方面提供的服务器应该需要200台~300台这个级别。

同样也不排除百度在这次活动中使用lvs方案。

网关层

百度使用了自研的网关技术BFE(Baidu Front-End),基于golang 开发。根据李炳毅在16年公开数据来看,单台服务可以承接50w连接数。目前百度主要还是基于http请求,而单台机器http响应不可能超过百万级别。实际上由于使用golang,在gc方面还是存在一定的压力,虽然百度使用了可控的多线程gc回收机制,取消默认gc机制,而通过线程状态改变主动调用gc回收器。在瞬时大量请求的场景,这种形式的优化实际上并不能正真提高吞吐量,相反在峰值附近还会降低吞吐。不排除百度在这两年间对于gc层面有更细粒度的优化,但总体能承担的连接数应该变化不大。

详细可以参考
go在百度bfe的应用 pdf
go在百度bfe的应用 视频

单独考虑此次红包场景来说,由于基于短链接,实际上吞吐量基本应该可以保证在50w。根据峰值计算,实际上需要的机器在400~500台。

服务降级与熔断机制

相较于阿里与腾讯,今年百度最大的提升并不是真正提高了请求的处理效率,而是使用了服务降级和熔断机制。
实际上在今年百度的抢红包峰值有很大概率存在机器不可用状况,由于对于业务流程的优化,在业务层面采用了服务降级和熔断机制的方案,这才得以保证百度此次红包故障无感知。

百度此次的红包前端主要抽取流程如下:

采用这种方案最大的好处在于,实际上后端服务已经处于不可用状态或超时,前端直接显示未抽中红包,但对于用户来说是无感知的,并且对于整体红包分配规则造成的影响非常小。这也是这次百度红包相较于腾讯和阿里红包活动中最大的不同。

服务端的熔断机制相信是这次百度红包重要的背后力量,在很大程度上体现了百度在自动化运维所达成的成就。实际上应对如此流量洪峰必然会有模块出现问题,出现问题之后如果没有熔断机制很容易导致服务雪崩。
从此次红包活动来看,百度应该在内部建立了自己的服务熔断机制和监督机制。对于后端服务,在监督服务发现服务异常之后,主要的策略是快速失败,防止由于失败导致大量重复请求继续涌入,如果服务可用性降低到一定水平,则进行服务熔断。服务熔断后可能造成其他服务请求量增加,有可能会造成其他服务超出负载。因此在监督机制在熔断后,可以自动化服务恢复,保证服务回弹性。

这里来看,百度在自动化运维,服务治理方面已经有了较为成熟的探索与实践。

预分配与缓存

由于红包属于金融相关,必须要求数据一致性,因此在最终数据写入必然要求串行化。不同于阿里和腾讯的红包,百度今年的红包只是单向发放红包,在具体实现方面相较于双向红包,单向红包可以通过预分配和缓存进行优化。

北京时间2月5日凌晨,新年除夕,央视春晚也在互动中发出大量红包。据百度方面发布的信息,作为央视2019春晚独家网络互动平台,百度在今年春晚期间共发出1000万个20.19元的红包,100万个88元红包,10万台小度AI音箱,1万个2019元红包以及若干手气红包。全球观众共同瓜分了9亿现金红包大奖。
http://www.sohu.com/a/293409074_114760

事实上,百度当晚的红包策略是既定策略,每一场根据新闻所述应该每个红包类别数量是固定的。可以根据新闻假定每场有:

  • 250万个 1000个 20.19红包
  • 25万个 88元红包
  • 2.5万个 小度AI音箱
  • 0.25万个 2019红包
  • 若干 手气红包

假设共有N台机器,每台机器在每一场活动开始前写入数据(50万20.19红包| 5万88元红包| 5千台音箱| 500个2019红包|若干手气红包),将具体红包标记已占用,写入的数据放入每台机器的内存数据库中。由于数量既定,每台机器可以平均分配各种类型红包的数量是固定的。为了防止红包行为在这种场景下成为手速游戏,因此可以在红包数据库中插入若干空红包。事实上总量在80万条数据在内存数据库,对于资源的占用和响应时间来说都是可控范围之内。而抢红包在后端具体业务流程方面如下:

  1. 红包请求是否接受,接受进入2,不接受直接返回错误结果
  2. 内存数据库分配红包
  3. 红包分配成功,并行执行以下项目
    3.1 请求返回结果。
    3.2 请求消息队列,同步红包具体分配信息

从根本上来看:

  1. 预分配策略本质上是通过hash,将无可避免的串行化平均分配到500台机器上
  2. 内存数据库的使用是利用资源增吞吐量,解决吞吐瓶颈
  3. 预分配策略遵循最终一致性,通过消息队列完成最终一致

总结

这篇分析到此进入尾声,实际上整个系统的复杂性远比笔者这里分析的更为复杂, 由于今年红包提供的形式多变,其中对于AI、音视频分析等都有较高的要求,这里由于笔者能力有限没有进行分析。

对于此次百度红包从整体来看,最大的成功点其实在于业务和技术的结合。事实上,对于服务降级大家的目标都是实现错误无感知,无论是google doc文档的离线合并还是gmail的离线编辑都是这一目标的落地。而百度此次通过巧妙的将错误逻辑简化并且与技术相结合,避免了生硬的错误提示以及使用了预分配策略解决串行化问题,这一点很值得去学习。并且从背后来看,sre的建设同样是保证服务回弹性的基础,如果没有sre的基础,很难保证如此大规模服务的快速恢复,这是百度业务快速拓展的基础。

从架构的角度来看,百度能把涉及到的所有东西都可以串联起来,并且保证了这次服务的平稳,对于百度这个体量来说确实是非常惊人的。虽然百度这几年用屁股做产品,但单从这次红包活动来说,我想说:你大爷终究还是你大爷。

参考:
知乎–BAT春晚发红包,腾讯、阿里连续宕机3年,为何2019年百度挺住了?
《反应式设计模式》 罗兰·库恩、 布莱恩·哈纳菲、杰米·艾伦
网易新闻–2019春晚红包战报:百度送出9亿现金 互动208亿次
百度云–cdn加速服务
百度云–弹性伸缩
百度云–云服务器BBC

百度红包架构分析与推测相关推荐

  1. 超级 App 手机百度云端架构设计与个性化推荐

    2015 年 6 月 28 日下午,百度与 InfoQ 携手举办了手机百度"云和端技术实践"沙龙活动.这是手机百度首次公开超级 App 背后的技术知识.活动分云端和客户端技术两个会 ...

  2. 转:秒杀系统架构分析与实战

    原文出处: 陶邦仁   欢迎分享原创到伯乐头条 0 系列目录 秒杀系统架构 秒杀系统架构分析与实战 1 秒杀业务分析 正常电子商务流程 (1)查询商品:(2)创建订单:(3)扣减库存:(4)更新订单: ...

  3. 前百度主任架构师创业,两年融资千万美元,他说AI新药研发将迎来黄金十年...

    「AI技术生态论」 人物访谈栏目是CSDN发起的百万人学AI倡议下的重要组成部分.通过对AI生态专家.创业者.行业KOL的访谈,反映其对于行业的思考.未来趋势的判断.技术的实践,以及成长的经历. 20 ...

  4. 大型网站系统架构分析--转

    大型网站系统架构分析 原文地址:http://www.cnblogs.com/Mainz/archive/2009/04/28/1445424.html 千万级的注册用户,千万级的帖子,nTB级的附件 ...

  5. 【转】秒杀系统架构分析与实战

    0 系列目录 秒杀系统架构 秒杀系统架构分析与实战 1 秒杀业务分析 正常电子商务流程 (1)查询商品:(2)创建订单:(3)扣减库存:(4)更新订单:(5)付款:(6)卖家发货 秒杀业务的特性 (1 ...

  6. 前百度主任架构师创业,两年融资千万美元,他说 AI 新药研发将迎来黄金十年...

    「AI技术生态论」 人物访谈栏目是CSDN发起的百万人学AI倡议下的重要组成部分.通过对AI生态专家.创业者.行业KOL的访谈,反映其对于行业的思考.未来趋势的判断.技术的实践,以及成长的经历. 20 ...

  7. 微信封杀百度红包;刘强东新开公司;库克“iPhone 表现不好”| 极客头条

    「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 快讯速知 微 ...

  8. 百度基础架构部马如悦:我的Hadoop…

    马如悦:大家下午好,我是来自百度基础架构部高级工程师.我先自我介绍一下,我是咱们中国第一批用Hadoop,后来转向开源,从开始到现在一直用Hadoop,在这里说一下自己的体会可能会对大家有用. 今天讲 ...

  9. 搬:五大车载操作(VOS)系统优劣对比,车载系统架构分析

    五大车载操作(VOS)系统优劣对比,车载系统架构分析-QNX系统性能分析 2017年08月13日 08:32:28 锋影Q 阅读数:7080 五大车载操作(VOS)系统优劣对比,车载系统架构分析-QN ...

最新文章

  1. redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?...
  2. mysql 查询不为0的数据_查询数据库中所有记录总数不为0的数据表名称
  3. 网站随机背景音乐源码
  4. MATLAB中使用LIBSVM进行SVM参数寻优
  5. mysql与python的交互
  6. Struts2执行流程
  7. 15个实用的管理mysql的MySQLadmin命令
  8. 兵器簿之Alcatraz(插件管理神器)的配置和使用
  9. hdu1536 S-Nim(博弈)
  10. 关于支付宝授权登录获取用户信息
  11. Python大数据分析(一):认识大数据
  12. 关于计算机的病毒案例分析,实例解析蠕虫病毒的原理 -电脑资料
  13. 邱关源电路课后题第二章(第五版)
  14. 在Java中打印金字塔图案
  15. 【ctype.h isdigit】
  16. 为什么linux虚拟机文件78g,linux 磁盘空间被占满但找不到目标文件的问题处理 lsof命令...
  17. 史上最全最新前端面试题(不定期更新,有问题欢迎评论区对线)
  18. new plat (vcam+wifi)项目调试
  19. [转]信息安全相关理论题(二)
  20. 自我介绍 的html页面,html初学者自我介绍网页

热门文章

  1. PAT乙级——1010.月饼
  2. 好嗨呦是谁_好嗨哦是什么梗
  3. Activiti工作流(一):OA 上的那些请假流程如何快速实现呢?
  4. 浏览器控制台输出图片
  5. [USACO 2010 Feb S]Chocolate Eating
  6. RuoYi-Vue项目登录过期的实现
  7. Flume+Kafka+Storm+Redis构建大数据实时处理系统:实时统计网站PV、UV+展示
  8. C语言程序设计——猜数字游戏
  9. PyQt5安装失败总结
  10. linux配置163镜像,修改yum使用163开源镜像升级CentOS