关闭

微信红包实现原理

663人阅读 评论(0) 收藏 举报
分类:

以下内容来源于QCon某高可用架构群聊天记录整理背景:有某个朋友咨询微信红包的架构,在官方或非官方同学的解释和讨论中得出以下讨论内容,在此期间有多个同学发红包做现网算法测试。

抢红包过程

当有人在群里发了一个N人的红包,总金额M元,后台大概发生的事情如下:

一、发红包后台操作:

  1. 在数据库中增加一条红包记录,存储到CKV,设置过期时间;

  2. Cache(可能是腾讯内部kv数据库,基于内存,有落地,有内核态网络处理模块,以内核模块形式提供服务))中增加一条记录,存储抢红包的人数N

二、抢红包后台操作:

  1. 抢红包分为抢和拆,抢操作在Cache层完成,通过原子减操作进行红包数递减,到0 就说明抢光了,最终实际进入后台拆操作的量不大,通过操作的分离将无效请求直接挡在Cache层外面。这里的原子减操作并不是真正意义上的原子减操作,是 Cache层提供的CAS,通过比较版本号不断尝试,存在一定程度上的冲突,冲突的用户会放行,让其进入下一步拆的操作,这也解释了为啥有用户抢到了拆 开发现领完了的情况。

  2. 拆红包在数据库完成,通过数据库的事务操作累加已经领取的个数和金额,插入一条领取 流水,入账为异步操作,这也解释了为啥在春节期间红包领取后在余额中看不到。拆的时候会实时计算金额,其金额为1分到剩余平均值2倍之间随机数,一个总金 额为M元的红包,最大的红包为 M * 2 /N(且不会超过M),当拆了红包后会更新剩余金额和个数。财付通按20万笔每秒入账准备,实际只到8万每秒。

FAQ

  1. 既然在抢的时候有原子减了就不应该出现抢到了拆开没有的情况?
    这里的原子减并不是真正意义上的原子操作,是Cache层提供的CAS,通过比较版本号不断尝试。

  2. cachedb挂了怎么办?
    主备 +对账

  3. 有没有红包个数没了,但余额还有情况?
    没有,程序最后会有一个take all操作以及一个异步对账保障。

  4. 为什么要分离抢和拆?
    总思路是设置多层过滤网,层层筛选,层层减少流量和压力。这个设计最初是因为抢操作是业务层,拆是入账操作,一个操作太重了,而且中断率高。 从接口层面看,第一个接口纯缓存操作,搞压能力强,一个简单查询Cache挡住了绝大部分用户,做了第一道筛选,所以大部分人会看到已经抢完了的提示。

  5. 抢到红包后再发红包或者提现,这里有什么策略吗?
    大额优先入账策略

  6. 有没有从数据上证明每个红包的概率是不是均等?
    不是绝对均等,就是一个简单的拍脑袋算法。

  7. 拍脑袋算法,会不会出现两个最佳?
    会出现金额一样的,但是手气最佳只有一个,先抢到的那个最佳。

  8. 发红包人的钱会不会冻结?
    是直接实时扣掉,不是冻结。

  9. 采用实时算出金额是出于什么考虑?
    实时效率更高,预算才效率低下。预算还要占额外存储。因为红包只占一条记录而且有效期就几天,所以不需要多大空间。就算压力大时,水平扩展机器是。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Android之微信抢红包实现原理分析

微信抢红包主要用到AccessibilityService,该服务需要用户手动到辅助功能里面授权,下面直接粘贴源码,先看Activity,主要是跳转到辅助功能界面,让用户开启辅助功能的服务: publ...
  • zhangyongfeiyong
  • zhangyongfeiyong
  • 2016-08-28 20:57
  • 2132

Android中微信抢红包插件原理解析和开发实现

自从去年中微信添加抢红包的功能,微信的电商之旅开启。但是作为Android开发者来说,我们在抢红包的同时意识到了很多问题,就是手动去抢红包的速度慢了,当然这些有很多原因导致了。或许是网络的原因,而且这...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2015-10-04 22:14
  • 79563

有没有挂可以控制微信红包埋雷尾数规律

【微/信:app36678】微信红包尾数软件控制器,扫雷埋雷排雷设置尾数软件。红包控制尾数软件作弊器 可以装挂        加 微信 ----->       ...
  • baidu_38823939
  • baidu_38823939
  • 2017-05-17 15:05
  • 1145

浅谈《微信抢红包原理》

现在很多人手机可能都安装了抢红包软件,为了过年抢红包不错过,当然会下载来用用,其实,现在的抢红包软件,基本都是通过监听通知栏消息“[微信红包]”字样,作为识别是红包的依据的,可能大多数人都会想,and...
  • WMH_HZX
  • WMH_HZX
  • 2016-03-30 17:33
  • 1713

微信红包实现原理

微信红包实现原理 以下内容来源于QCon某高可用架构群聊天记录整理 背景:有某个朋友咨询微信红包的架构,在官方或非官方同学的解释和讨论中得出以下讨论内容,在此期间有多个同学发红包做现网算法测试。 ...
  • ws891033655
  • ws891033655
  • 2015-05-05 14:37
  • 2896

微信红包算法?

作者:匿名用户 链接:https://www.zhihu.com/question/22625187/answer/40041558 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 ...
  • z69183787
  • z69183787
  • 2016-08-31 21:54
  • 1425

微信自动回复和自动抢红包实现原理(三):自动抢红包

微信自动抢红包实现原理
  • Leo_eight
  • Leo_eight
  • 2016-08-13 16:39
  • 5774

微信红包接口实现

应用场景:        网站某一类型注册类型会员通过微信公众账号进入其账号中心时,可以获取一次领取红包资格,红包资格在某一个特定范围内。 微信红包调用流程:        后台API调用:待进...
  • u011203602
  • u011203602
  • 2015-11-25 11:41
  • 263

PHP实现微信发红包程序

微信发红包是比较流行的一件事情,老老少少都会使用微信发红包,接下来,小编给大家分享在生活中常碰到的一个php实现微信发红包程序的算法,希望这个程序对大家在做微信卡发的朋友有所帮助  使用PHP发红包...
  • zhanghao143lina
  • zhanghao143lina
  • 2016-12-27 12:33
  • 551

揭秘微信红包:架构、抢红包算法、高并发和降级方案

编者按 与传统意义上的红包相比,近两年火起来的“红包”,似乎才是如今春节的一大重头戏。历经上千年时代传承与变迁,春节发红包早已成为历史沉淀的文化习俗,融入了民族的血脉。按照各家公布的数据,除夕全...
  • starsliu
  • starsliu
  • 2016-04-12 16:21
  • 2514
    个人资料
    • 访问:204933次
    • 积分:3828
    • 等级:
    • 排名:第9738名
    • 原创:145篇
    • 转载:96篇
    • 译文:11篇
    • 评论:69条
    博客专栏
    最新评论