微信工程师为你讲述春晚红包的系统设计和优化

  羊年春晚,微信收发总数为10.1亿次红包,高峰期出现在00:00~00:02,瞬间峰值达到每分钟55万个红包被发出,165万个红包被拆开(更多数据请参考羊年春节微信数据大解析),这么大的数据量几乎没有出现宕机的情况发生,他们是如何做到的?让微信工程师为你讲述春晚红包的系统设计和优化。

  讲师:jeri

核心功能&目标

首先,了解下微信红包的4个逻辑:摇/发/抢/拆。看似简单,实现可不简单再review下微信红包要实现目标:

摇:摇的流畅

快:抢的要快

爽:拆的爽

稳:能分享出去

系统难点

1.中国运营商网络环境复杂,覆盖面广,春节期间网络吃紧,容易出现网络故障

2.在尖峰摇时如何避免服务雪崩

3.在服务资源有限时,如何提供柔性服务

4.如何构造有损服务

5.如何构造set模型

6.如何解决并发抢

7.如何实现实现数据一致性

系统整体架构图

跨区域网络解决方案

微信客户端分布全球,接入点较多,用户资料靠近接入点,可以加速用户资料访问,但是红包的业务逻辑层并不全网分布,业务逻辑层访问数据层比较多,数据层有状态强一致性问题,只能同用一个数据副本,比如上海用户与深圳用户在同个群里,抢同一个红包,如果订单数据在上海与深圳都有,在抢的时候,无法保证数据同步,可用性低,所以,设计系统时,一定要梳理清楚系统间的调用关系,优化接入层的业务逻辑,把网络耗时降到最小,系统吞吐量才能提升。

跨区域网络问题,在物理实施上,也需要有备份绕行的能力,这个可以在系统的底层框架中实现,当指定专线出现故障时,快速切换网络,恢复服务

如何构建有损服务

什么是有损服务?选择性牺牲一部分数据一致性和完整性从而保证核心功能绝大多数运行,经过一段时间窗口,数据一致性与完整性能得以恢复,这也是腾讯的一直运营策略,在有限资源前提下,量力而为,满足用户的核心需求

比如,春晚摇一摇,我们的核心点是摇/拆/分享,那系统的资源优先需要保证这些服务的响应,任何关联系统出现异常的时候马上进行系统降级,防止引起系统雪崩。

系统降级可以分为两个方面,一是把核心功能调用链路简化,减少依赖,通过辅助轻量化的服务实现,确保最短关键路径的可行,比方说在接入层置入摇红包逻辑,将每秒千万级请求转化为每秒万级的红包请求,再传到红包服务的后端逻辑,降低雪崩的可能性。

柔性服务.打造好的产品体验

柔性可用是在有损服务价值观支持下的方法,重点在于实际上会结合用户使用场景,根据资源消耗,调整产品策略,设计几个级别不同的用户体验场景,保证尽可能成功返回关键数据,并正常接受请求,绝不轻易倒下。

比如,红包的核心功能拆,拆完需要记录用户头像昵称,转帐资金划转,同时输出同个订单下其它拆记录,拆过程这些操作都可能失败,但是核心操作获取红包是成功的,此时,我们至少可以告诉用户抢到金额,不至于让用户焦急等待,不断重试,未完成的操作(头像补全与资金转帐),可以通异步补尝方式重试。这样解决了用户的问题,也缓解了系统压力。

如果构造set模型

Set模块就像一个集装箱,把各模块标准化,模块化,规模化,它为海量服务运营,特别是设备管理、网络架构,提供了宏观运营支撑框架,从而极大提高了海量服务运营效率。

微信红包的set模块,以拆服务为例,从接入层开始,数据开始sticky,按订单号路由,即按单号分set,同一个set尽可能在一个IDC 里,减少模块间调用的耗时,在同一个set内,逻辑层任何一台机器,调用方可实时摘除,如果是数据层发生故障,先在接入层,把新产生的红包订单号屏蔽有故障对应的set编号,比如,set1 数据库出现故障,为了避免在故障的set1 上继续产生新的支付请求,在订单生成器直接跳过set1的单号规则,把新请求导致其它set, 只有未抢完的部分红包,会提示故障,稍后恢复,阻止了故障引发的进一步恶化,在故障db上的数据,通过备机与业务逻辑层的数据核对,完成数据一致性的修复。

如何解决并发抢

群里红包的规则是金额随机抢,在一个大群发一个红包出去,抢并发请求量高,在同一个资源上操作,需要增加锁操作,避免一个抢总数超过发送红包总数,众所周所,mysql的加锁操作,很多抢在一个锁上等,性能损耗大,吞吐量下降,对于海量服务的操作,是不能满足要求。

在set模块的基础上,我们把发/抢的资源请求都会落到同一个资源set,在最外层,cache红包的状态,如果红包已经被抢完了,即刻返回,如果红包未接完,对于一个红包进去抢环节还有限流,这是第一级保护,通过一致性hash算法,一一个单到dao层都会路由到同一个机器的同一个进程,dao到mysql在现一个连接上完成抢操作,把并发抢修改成串行化,mysql可以无锁等待,性能明显提升。

如何实现数据一致性

谈到分布式系统,先回顾CAP理论

C:Consistency数据一致更新,所有变动都是同步的

A:高可用,好的响应性能

P: 分区容忍,可靠性

在我们的系统设计中,同样碰到这个问题,无法同时满足三个因子,移动互联网系统,高可用性是必要要求,数据分区也是分布式系统的条件,所以,我们设计系统时,只能尽量保证数据一致性,只要一定时间窗口内,完成数据一致,让用户满意。

微信红包的数据有几份,订单数据,用户数据,还有对应的cache数据,

N:数据副本份数红包有三份

R: 一次需读取的副本红包一次从一个副本可以全部读取需要数据

W: 一次写入数据2份实时写,一分异步化

R(1) + W(2) <=N从公式算出,我们的数据模型也是弱一致性

用户数据是异步更新,更新失败,通过消息中心,异步重试,根据DB资源负载设置调用方的调用阀值,除了实时重试,我们还有准实时数据核对,保证数据最终一致性。

时间: 2024-10-03 01:20:19

微信工程师为你讲述春晚红包的系统设计和优化的相关文章

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

转载:原文链接 扛住100亿次请求——如何做一个“有把握”的春晚红包系统? 羊年春晚摇一摇活动已经落下帷幕,现在回过头来看看这一全民参与的有趣的活动背后,有着怎样的后台系统?这个系统又是如何被设计与实现出来的? 1.   春晚摇一摇活动形式 在了解这个系统之前,先看看羊年春晚有哪些活动形式?春晚摇一摇复用了摇一摇入口,但提供了全新的界面和交互内容. 在羊年春晚摇一摇界面里,用户摇动手机后,可以看到明星拜年.全家福.好友贺卡等精彩纷呈的活动页:也会有温馨的“休息一下”,或让很多误以为中奖的“挂服务

2019年春节春晚红包大战战报!30亿!

我正在知识星球「赚钱笔记免费版」和朋友们讨论有趣的话题,你?起来吧?https://t.zsxq.com/ayVvVzB全网已公布的红包累计: 30亿!(1月29日更新)抖音入场,活动启动:集音符,瓜分5亿!(1月28日)百度正式公布红包计划:瓜分10亿,春节当天发9亿!(1月25日)今日头条红包计划启动:发财中国年,抢10亿现金!(1月24日)支付宝集福计划计划启动:集五福,瓜分5亿!支付宝: 5 亿 (集五福)今日头条: 10 亿 (集卡 & 红包雨)百度: 10 亿 (集福气 & 春

微信春晚红包的10亿个红包,到底难在哪儿?

4800倍的挑战 今年微信红包方式与去年用户与用户之间互发红包相比,摇红包的方式对业务量来说是一个极大的爆发,光是除夕10:30送出的一波红包就达到了1.2亿个,已经是2014年除夕夜峰值的4800倍之巨(2014年峰值每分钟被拆开红包数量仅2.5W个)!发10亿红包,难在哪里? 微信团队总结下来有三大难点:快——如何保证用户快速摇到红包?准——如何保证摇到的红包能成功拆开?稳——如何保证拆开的红包能分享出去? 大量用户在同一时间摇红包,瞬间产生每秒千万级的请求,这个量级的请求如果不加以疏导处理

第一家顶住春晚流量的公司

每年三十晚上,边看春晚边抢红包,已成为许多中国家庭团圆时刻的保留节目,也是互联网公司切入移动支付的突破口.值得注意的是,今年在春节联欢晚会上发红包的,不是阿里.腾讯,而是百度. 抢红包造成宕机,成春晚固定节目? 任何小事,乘以十三亿,都是大事,何况还牵涉到钱?百度这回 "摊上大事"了.而观众抢红包的热情,从历年来的春晚红包活动可见一斑. 2015年微信与春晚首次合作发红包,综合数据显示,央视春晚摇一摇次数达110亿次,峰值8.1亿次每分,送出微信红包1.2亿个.不过春晚开始后不久,微信

舍弃支付宝去捧淘宝!这次春晚阿里究竟是怎么想的?

淘宝昨天宣布与2018年中央电视台<春节联欢晚会>达成独家互动合作.从2月11日开始在春节期间每天发放1个亿的现金红包,而春晚直播的2月15日当天将发送价值6个亿的红包和奖品,累计发放总额超过10个亿的现金红包,用户可以边看节目边抢红包. 其实去年支付宝狂砸2.6亿在春晚上,已经让人刮目相看.原本按照惯性,似乎今年春晚应该也被支付宝"承包".但出乎意料的是,阿里今年选择让淘宝"出战"与春晚合作,甚至奖金幅度也大幅提升,达到了10亿! 如果说去年让支付宝与

揭秘央视春晚直播背后的技术硬实力

2020年1月24日晚间8点,一首开年贺岁歌舞<春潮颂>拉开了鼠年春晚的序幕.<这就是街舞>.2019第一神曲<野狼Disco>的改编版本<过年迪斯科>.<风雪饺子情>.<走过场>等众多的节目更是将春晚推向了一波又一波的高潮. 今年的春晚不仅演员阵容庞大,就连主持人阵容进行了"大换血",各种创新的节目更是赢得观众的阵阵喝彩.本届春晚堪称一场科技的视觉盛宴,其中春晚舞台首次打造三层立体舞美,同时运用飞屏技术营造出36

抢红包、摇春晚:微信春节用户大数据揭秘

今年,微信通过春晚“摇一摇”互动.微信红包.摇礼券等丰富的形式陪伴全国人民度过了一个欢乐的羊年春节.数据显示,羊年春晚微信摇一摇互动总次数超过110亿次,央视春晚摇红包创造了全民欢乐互动的历史,让“看春晚”.“抢红包”.“摇一摇”成了2015亿万中国家庭的新年关键词. 而微信红包也成为了今年春节最受欢迎的祝福方式,“有微信红包才是过新年”由此成为更多人的心声.除夕至初五(共六日),微信红包收发总量为32.7亿次,其中除夕当日收发总数达到10.1亿次,创下了历史新高. 全民狂欢:央视春晚微信摇一摇

央视春晚摇一摇最有可能颠覆哪些行业?

昨 晚,全国人民都在跟随着央视春晚摇动着手机.摇啊摇,有的摇出了红包,有的摇出了卡券.开玩笑的说,国家体育总局花了二十年没有搞起来的全民健身运动,微 信只花了一个晚上就达到目的了.其中22:30央视春晚摇一摇送红包这波,微信总摇一摇次数达72亿次,峰值高达一分钟8.1亿次(22:34),送出红 包1.2亿个,背后是牛逼的技术和强大的商业逻辑. 我 必须要为“春晚摇一摇”点32个赞.其一是升级了红包的概念,将微信红包从用户个人行为转向为企业营销行为,商业化才是最有前途的:其二是解放了摇一摇功 能,

如果春晚刷纯在感,阿里腾讯绝对和春晚绑在一起?

如果春晚刷纯在感,阿里腾讯绝对和春晚绑在一起,就是在几年前,微信"红包"借助春晚这个平台,让微信支付用户暴涨,而对于微信支付的竞争对手支付宝来说,已经"包下"春晚三年或者更长的时间,通过春晚和微信争夺用户! 春晚,全称是中央电视台春节联欢晚会,集结了一代人的回忆,春晚也成就了一大批明星.小品.歌曲--而现在这个影响力正在减弱,在五年前,春晚是网友吐槽的对象,而从微信发红包开始,春晚成了互联网巨头发红包,营销的重要阵地,如果没有这"真金白银"的刺激