快捷搜索:  test

而且由于尾部更快的衰减

  概况:2014年微信红包使用数据库硬抗整个流量,2015年使用cache抗流量。

  微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储。采取实时计算金额的考虑:预算需要占存储,实时效率很高,预算才效率低。

  算法很简单,因为微信不会将红包的算法开源,所以,这是基于部分样本提取出的特征以及网上的资源猜测出的算法。

  这种产生机理不好的地方在于:大多数人得到的钱非常少,而极少数人得到的钱却非常多,而这可能会对抽取人的积极性产生影响。截尾正态分布能够更好地避免这样的问题,因为更多人的红包大小会聚集在平均值附近,而且由于尾部更快的衰减,因此获得特别大的红包的概率也会相应减小,有助于增加公平性与参与的积极性。尽管具体截尾的范围可能需要获取更多的数据才有可能有一个准确的预测。

  微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储。

  2015年的红包的拆和抢是分离的,需要点两次,因此会出现抢到红包了,但点开后告知红包已经被领完的状况。进入到第一个页面不代表抢到,只表示当时红包还有。

  例如:发100块钱,总共10个红包,那么平均值是10块钱一个,那么发出来的红包的额度在0.01元~20元之间波动。

  当前面3个红包总共被领了40块钱时,剩下60块钱,总共7个红包,那么这7个红包的额度在:0.01~(60/7*2)=17.14之间。

  这样算下去,会超过最开始的全部金额,因此到了最后面如果不够这么算,那么会采取如下算法:保证剩余用户能拿到最低1分钱即可。

  如果前面的人手气不好,那么后面的余额越多,红包额度也就越多,因此实际概率一样的。

  微信从财付通拉取金额数据郭莱,生成个数/红包类型/金额放到redis集群里,app端将红包ID的请求放入请求队列中,如果发现超过红包的个数,直接返回。根据红包的裸祭(逻辑)处理成功得到令牌请求,则由财付通进行一致性调用,通过像比特币一样,两边保存交易记录,交易后交给第三方服务审计,如果交易过程中出现不一致就强制回归。

  cache会抵抗无效请求,将无效的请求过滤掉,实际进入到后台的量不大。cache记录红包个数,原子操作进行个数递减,到0表示被抢光。财付通按照20万笔每秒入账准备,但实际还不到8万每秒。

  数据库会累加已经领取的个数与金额,插入一条领取记录。入账则是后台异步操作。

声明:本文图片、文章来源于网络,不代表红包之意见及观点,如有侵权,请与我联系删除。转载请注明出处: http://www.shxiteng.com/weixinhongbao/10354.html

您可能还会对下面的文章感兴趣: