超级面试题 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

原文地址:https://blog.51cto.com/14264571/2375018

时间: 2024-10-31 16:26:56

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

超级面试题2019年5月第1次发布

超级面试题2019年5月第1次发布.本次发布,将题库的553道题按照关键字分成45个章节,方便对比复习查阅综合训练.题库包括阿里巴巴.好未来.平安好医生.美团.百度.饿了么.有赞.陆金所.今日头条.携程.阿里.百词斩.招商银行等公司的面试题.http://www.chaojimianshiti.com 原文地址:https://blog.51cto.com/14264571/2398333

超级面试题2019年7月第2次发布

超级面试题2019年7月第2次发布.本次发布后,全题库包括阿里巴巴.好未来.平安好医生.美团.百度.饿了么.有赞.陆金所.今日头条.携程.阿里.百词斩.招商银行.竹间智能.腾讯.商汤科技.三角兽.360.某医疗大数据公司.某香港公司.图糖.朗讯科技.京东云.华为.唯品会.字节跳动.多益网络.映客等公司的面试题, 47套,总计738道题.全题库包括Java开发.机器学习(AI和算法)等类型试题. http://www.chaojimianshiti.com 原文地址:https://blog.51

解决微信内嵌浏览器无法响应上传文件(图片)的思路(2种办法)

进园一年多来,第一次写博客,好激动.原因主要是自己平时都是有写笔记,不习惯写博客,这次想写博客的原因是,这个问题确实我做了很久,已经做了近两周才解决了这个问题,,而且两周时间里尝试过了很多种办法,然后由于网上又没有多少人分享这个,决定自己写一下. 先自我介绍下,我是惠州学院大二(准大三)的学生,在去年暑假时候加了一个工作室开始写代码,也是在那个时候加入博客园,最近因为工作室要做微信端网页的开发需要一个上传图片功能,然后编码的时候发现用平时的方法做的上传功能在Android的微信端上实现不了,百度

利用gulp解决微信浏览器缓存问题

做了好多项目,这次终于要解决微信浏览器缓存这个令人头疼的问题了.每次上传新的文件,在微信浏览器中访问时,总要先清除微信的缓存,实在麻烦,在网上搜罗了很多解决办法,终于找到了方法:利用gulp解决缓存问题.关于gulp大家可以去gulp官网去详细了解. 这篇文章主要参考于Gulp解决发布线上文件(CSS和JS)缓存问题和Gulp.js----比Grunt更易用的前端构建工具两篇文章,在这里先谢过原作者. 本文主要记录安装gulp以及使用.解决缓存问题的过程,以便日后方便查阅. 1.安装NodeJS

解决微信公众平台接口配置信息配置失败问题

填写好URL及TOKEN后,点“提交”时,总是提示“配置失败”或其他错误 确认URL指向的后台页面代码没有问题 确认TOKEN配置没有问题 这时请察看一下你的INDEX页面的编码格式,改成GB2312试试吧,也许会令你的问题迎刃而解. 谨以此文献给浮躁的自己. 解决微信公众平台接口配置信息配置失败问题,布布扣,bubuko.com

完美解决微信下拉上拉

转http://note.youdao.com/share/?id=f13df2c846cac5d4f0e24a715d8372a6&type=note#/ 完美解决微信下拉上拉回弹 1.使用jroll.js完美解决,下载jroll.js. 2.DOM结构为: class container 为滑动页面 3.添加css #wrapper { position: absolute; top: 44px; bottom: 0; width: 100%; } 4.编写js <script src=

java压缩去除html空格和换行解决微信域名下不兼容

直接贴代码. java压缩去除html空格和换行解决微信域名下不兼容 调用:content = HtmlCompressor.compress(content); import java.io.StringReader;import java.io.StringWriter;import java.util.*;import java.util.regex.*; /******************************************* * 压缩jsp,html中的代码,去掉所有空

使用CryptoJS解决微信小程序用户信息解密

使用CryptoJS解决微信小程序用户信息解密 问题描述: wx.getUserInfo(OBJECT)微信官方的这个获取用户信息的方法,需要对接口返回的加密数据( encryptedData )进行对称解密. 微信官方有提供加密数据解密算法 接口如果涉及敏感数据(如wx.getUserInfo当中的 openId 和unionId ),接口的明文内容将不包含这些敏感数据.开发者如需要获取敏感数据,需要对接口返回的加密数据( encryptedData )进行对称解密. 解密算法如下: 对称解密

用NiceTool工具解决微信内链接或二维码可直接用外部浏览器打开

很多朋友问我怎么解决微信内点击链接或扫描二维码可以直接跳出微信在外部浏览器打开网页链接,其实这并不难,只要我们实现微信跳转功能即可. 下面给大家推荐NiceTool工具(http://www.nicejump.cn/) 使用步骤 1. 用浏览器打开我们的工具地址 2. 将你的推广链接输入工具框,点击生成 3. 复制新生成的跳转链接和二维码 4. 微信内打开跳转链接或扫码识别二维码 功能效果功能实现后, 苹果用户即可在微信内直接下载app也可以跳转浏览器下载,安卓用户则自动打开手机浏览器下载app