超级面试题 Q342-一文彻底解决微信红包问题

微信红包架构是一个高频题,在面试中经常问到。经常问表明很重要,重要在两块:微信用户多,2018年用户量突破10亿,大家都是用户,对红包很熟悉;微信红包是典型的秒杀场景,是用户量最大的秒杀系统之一, 2017年1月除夕当天收发微信红包142亿个,收发峰值每秒76万个。跟微信红包类似的产品也比较多,比如QQ红包、微博红包、支付宝红包等等,红包功能逐渐成为一种标配。超级面试题的Q342、Q2、Q320都是微信红包架构问题,本文对后两个问题同样适用。

讨论微信红包架构之前,先讨论架构设计的原则。架构设计有两个原则最重要:第一个是抽象出原子业务,原子业务就是最小的不可分割的业务; 第二个是扩展,对原子业务进行继承和组合,实现不可预知的与时如流的具体需求,但原子业务本身(尽量)不做修改。

微信红包的原子业务是这样的:苏大强给小蔡发了一个红包,小蔡看到红包,看了下,然后拆红包。抽象表述,A给B发了一个数额为X的红包,A账户扣掉X元。24小时内,B可以查看红包,并决定是否拆红包,如果拆红包,B的账户增加X元。超过24小时B没有拆红包,红包失效,X元退还到A的账户。

对原子业务进行扩展:A在群里发红包,每人都可以拆一个X元红包; A在群里发红包,红包总额X元,每人拆红包得到随机金额。微信红包的人数上限是100人,每个微信群的上限是500人,因此每个红包最多有500人同时进行查看和拆包,这个量级单机能很好地处理。如果微信红包的人数没有上限,可能会出现A给十亿人发红包的场景,如果微信群的人数没有上限,可能会出现十亿人查看和拆红包,这个量级单机无法处理,需要分布式处理。红包人数上限和微信群人数上限是关键约束,它们决定架构设计。

因此,微信红包的本质,是若干个相互独立的任务,在每个任务里一个人给最多不超过100人发红包,最多不超过500人查看并拆红包。任务总数可能很大,比如每秒近百万并发。解决方案的核心,是构造出相互独立的任务,然后分布式在多台机器上执行。
… …
更多内容 http://www.chaojimianshiti.com

猜你喜欢

转载自blog.51cto.com/14264571/2375018