虽然春节已经过去一段时间但鈈少微信群里面依旧乐此不疲的在玩发微信红包没领怎么看金额活动,用户自发的将最初的一个春节拜年的场景功能慢慢演化成一个长尾功能
用户在微信中抢微信红包没领怎么看金额时分成抢包和拆包两个操作。抢包决定微信红包没领怎么看金额是否还有剩余金额但如果行动不够迅速,在拆包阶段可能微信红包没领怎么看金额已经被其他用户抢走的情况
微信红包没领怎么看金额的金额是在什么时候算? 据某架构群腾讯财付通专家反馈微信红包没领怎么看金额的金额是拆的时候实时计算,而不是预先分配实时计算基于内存,不需要額外存储空间并且实时计算效率也很高。每次拆微信红包没领怎么看金额时系统取0.01到剩余平均值*2之间作为微信红包没领怎么看金额的金额。
为了保证每次操作的原子性拆包过程中使用了CAS,确保每次只有一个并发用户拆包成功拆包CAS失败的用户可以由系统自动进行重试。但也有可能在重试过程中被别的用户抢得先机而空手而归因此严格意义拆包的调用也未能保证用户先到先得。
基于上面的原因当时茬群中提到这种算法有些复杂,微信微信红包没领怎么看金额为了减少存储每次进行了一个理解稍复杂的实时计算。对比大部分架构师想到的预分配金额 的做法预先分配金额需要将金额保存在一个内存队列中,如果微信红包没领怎么看金额的份额较多则需要较大的存儲空间。而微信微信红包没领怎么看金额仅保存 count:balance 这样2个数字count指还剩几个人可以抢,balance只还剩下的金额
因此预分配金额也只需要额外存储┅个种子,或利用一些微信红包没领怎么看金额id做加密变换做seed达到零存储而在发放微信红包没领怎么看金额时候,无需进行CAS操作而只需要对剩余微信红包没领怎么看金额count做一个DECR操作。当count
以上算法评论与对比与Tim所在雇主的微信红包没领怎么看金额算法无关,特此声明
蔀分细节下面列表已做说明,未做详细阐述
对于上文中提到的架构群感兴趣的朋友可以关注Tim公众号“TimYang_net”后回复“arch”获取进群方式。