红包是现在即时通讯工具必不可少的附属功能之一,用户点击“红包”按钮,填上金额,再点击发送,就能给亲朋好友,员工下属发送红包。2014年微信推出“红包”功能后,如何抢到“手气最佳”成为一种经验甚至是玄学。
但就是这么一个简简单单的功能,其背后的逻辑却出奇地复杂。
复杂的算法如果你参透微信红包的算法,就很有可能抢到更多的金额。虽然微信官方没有公布算法,但加不过网友们的数据样本分析。通过100份样本的调查抽样,可以得出一些基本的结论:
1.满足截尾正态随机数分布
大致为在截尾正态分布中取随机数,并用这个随机数求和初一红包总价值,获得修正隐私,再用修正因子乘以所有的随机数,得到拼手气红包的具体数额。
这样一来,随机的红包就会呈现一些规律,低于平均值的红包多,但不会偏离平均值太远;高于平均值的红包少,但远大于平均值的红包偏多。
2.越后面,红包价值普遍更高
将1000元分成100份,均值为10,根据调查抽样我们发现,在最后一个红包出现之前,普遍平均值低于10,也就是说,一开始的红包价值偏低的多,后续的红包会不断拉升红包的平均值。
复杂的逻辑除了算法,红包的逻辑也相当复杂,我们举几个例子。
1.保证时效性
2014年的红包,用户看到红包后,立即点击就能看到金额。2015年抢红包进行了功能升级,抢红包分为拆和抢两个步骤。用户看到红包后打开后,需要再次点击才能查看到红包金额。
这样设计的原因是加一个判断,第一个步骤能完成表明,当前红包还有,只有完成第二个步骤才算成功,避免用户能打开红包,却没有真的抢到红包。
2.红包“超卖”设计
我们经常看到一些电商平台会有秒*活动,例如限时秒*5件,在高并发场景下,极有可能出现明明限制5件,却出现用户秒*了6件的情况,这种现象叫超卖现象。对商家而言,属于超出预算的情况,如果商品单价低还好,如果过高显然是非常致命的。
红包可能也容易发生类似的情况,明明只发了10个红包,却有11个人领取。为了防止这一现象的发生,还要采取相应的技术手段加以应对。
3.确保交易一致性
发红包整个完整的步骤是:用户点击发送红包,扣除账户余额,对方收取红包,存到余额中。这个过程很容易发生中间人攻击,比如用户发送1元红包,扣除余额后,领取方变成200元并存到余额里。
为了防止这一现象的出现,接收方和发送方两边都会保存交易记录,交易后交给第三方服务审计,确保交易过程的一致性。
除以上三点,红包功能还有很多逻辑,比如退款逻辑、红包过期逻辑、网络丢包的处理等等。许许多多的逻辑才构成了一个看似很小的红包功能。