学习
实践
活动
专区
工具
TVP
写文章
专栏首页服务端技术杂谈如何搭建一个红包架构?

如何搭建一个红包架构?

做技术将来想做架构师,就要多见多想,大家都有过使用微信红包的经验,如何做一个能够承受高并发的红包架构是一个值得探讨的问题。

微信金额什么时候算?

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

注:京东金融的红包是预先算出来放到CDN上,后期抢红包的行为主要是分配红包ID的行为。所以这样看来京东红包还是取巧了。

实时性:明明抢到了红包,点开后发现没有?

2015年以后红包的拆和抢是分离的,需要点两次,会出现抢到红包,点开之后红包领完的情况。

注:每个业务逻辑的拆分都可以很大程度上缓解一些技术的压力与问题。

红包金额如何分配?为什么出现红包金额相差较大问题?

随机分配的。额度在0.01和剩余平均值*2之间。

例如:发100块钱,总共10个红包,平均值是10元,发出的红包额度在0.01----102之间波动。 当前面红包总共被领了40块钱的时候,剩下的60块钱,总共7个红包,这7个额度在0.01-(60/7)=17.17之间。

每被抢一次红包重复一下上面的计算。

注:不知道为啥这样随机。

红包的设计

微信系统从财付通拉取金额数据,生成个数/红包类型/金额放到redis集群中,app端将红包id的请求放入请求队列中,如果发现请求个数超过红包个数,直接返回。

依据红包逻辑处理成功得到令牌请求,供财付通进行一致性调用,类似于比特币两边保存交易记录,交易后交给第三方服务审计,如果交易过程中出现不一致情况会强制回归。

主:这里类似于秒杀系统的设计,通过redis前端的原子计数过滤无效请求,通过队列排队用户请求,阈值以redis库存为主。

红包如何计算被抢完?

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

注:这里处理类似于秒杀系统用户请求,仓储库存处理的解决方案。

如何保持8w每秒写入?

多主sharding,水平扩展机器。

数据容量多少?

一个红包只占一条记录,有效期只有几天,一次不需要太多空间。

询红包分配的压力

抢到红包的人数和红包都记录在一条cache记录上,没有太大的查询压力。

一个红包一个队列?

没有队列,一个红包一条数据,数据上有一个计数器字段。

注:上面到这里笔者提到过很多次redis原子计数器操作,所以大家要了解一下这个,目前看来这种解决方案可以出现在很多秒杀,高并发场景下解决问题。

有没有从数据上证明每个红包的概率是不是均等?

不是绝对均等,就是一个简单的拍脑袋算法。

注:有的时候产品经理提出是随机场景,最后的方案大多是拍脑袋的算法,笔者有过这个经验。

拍脑袋算法,会不会出现两个最佳?

会出现金额相同的,但是手气最佳只有一个,按照时间来。

每领一个红包就更新数据吗?

每抢到一个红包,就cas更新剩余金额和红包个数。

注:cas在计算机体系下常有两个意思: Central Authentication Service中央认证服务, 另一个compare and swap比较并交换,比较常用在多线程并发场景下的计数操作,属于原子性。

红包如何入口入账?

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

注:还是标准的流水做对账,异步处理。

入账出错怎么办?比如红包个数没了,但是余额还有?

最后会有一个talk all操作。另外还有对账来保护。

注:还需要一个对账验证最终一致性。

文章分享自微信公众号:
春哥talk

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

原始发表时间:2017-05-09
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 如何搭建一个拖垮公司的技术架构?

    架构师虽好,却不是人人都能当的,除了聪明绝顶,还要有扎实的技术功底,经过多年的努力,我做到了一点,我已经绝顶了。

    用户6983566
  • 如何优雅的搭建一个强大的前端项目架构?!

    前俩天在知乎上看到这样一个提问。很多人这么认为前端本来就是按一个个网页天然解耦的,给每个前端工程师分几个页面,干就完了,再说了,现在不是有很多现成的框架吗?

    程序员老鱼
  • 论如何正确收一个新年解谜红包

    注意:题目中出现的链接需要替换后才能访问redpacket.kaaass.net=>redpacket.kaaass.net/archived/2018/。

    KAAAsS
  • 如何搭建高可用redis架构?

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。

    互扯程序
  • 如何用Nginx快速搭建一个安全的微服务架构

    美的让人心动
  • 如何做一个小程序口令红包功能

    作者:张先生 原文:https://segmentfault.com/a/1190000011014127 在做小程序后端支持的过程中遇到不少有意思的功能,有...

    前端教程
  • 如何用Nginx搭建一个安全的、快速的微服务架构

    本文改编自Chris Stetson发表在nginx.conf 上的一个有关如今的微服务以及如何使用Nginx构建一个快速的、安全的网络系统的演讲,

    吴生
  • 如何设计一个架构

    架构不是像平常写代码一样,对就是对,错就是错,它并无对错之分,是一个取舍的过程。当我们从0开始做架构的时候,的确是比较困难。虽然万事开头难,但是一个好的开始相当...

    哲洛不闹
  • SaaS产品如何做好架构搭建?

    来源:小飞哥笔记 |作者:丰宪飞 ---- 我之前的一篇文章中讲到过,一款Saas产品,产品架构搭建的好坏,对结果的影响截然不同。 如果Saas产品架构搭建...

    腾讯SaaS加速器
  • 如何用Nginx搭建一个安全的、快速的微服务架构

    今天我们要谈论微服务以及如何使用Nginx构建一个快速的、安全的网络系统。最后,将向您展示一个使用Fabric模式如何非常快速和轻松地构建一个微服务的demo。

    技术zhai
  • 如何搭建一个网站

    如何搭建一个网站,我估计很多程序员都有这个冲动想去搭建一个属于自己的网络小天地,但是苦于不知道从何下手,或者因为不知道水有多深,而望而却步,其实搭建网站没有你想...

    知识与交流
  • 论如何又收一个新年解谜红包 – 2021 篇

    2021年的新年解谜红包也顺利结束了!所以按照惯例,我也写一篇官方的解题思路来分析分析今年的解谜红包。题目在这里:https://redpacket.kaaas...

    KAAAsS
  • 论如何再收一个新年解谜红包 – 2019篇

    注意:题目中出现的链接需要替换后才能访问redpacket.kaaass.net=>redpacket.kaaass.net/archived/2019/。

    KAAAsS
  • 论如何又收一个新年解谜红包 – 2020篇

    注意:题目中出现的链接需要替换后才能访问 redpacket.kaaass.net=>redpacket.kaaass.net/archived/2020/。

    KAAAsS
  • 论如何又收一个新年解谜红包 – 2022 篇

    各位好,我是KAAAsS。2022年的新年解谜红包也顺利的结束了~和往年一样,我也写了官方题解来解释解释今年的解谜红包。题目依旧在这里:https://redp...

    KAAAsS
  • 如何快速搭建一个wordpress

    如果只是个人网站或者一个访问量很小的可以用虚拟机,当然vps更好一些。国内的话建议腾讯云、国外可以选香港的vps,访问性价比较高。

    笑君日常
  • 如何搭建主从架构的 DNS 服务器

    前面我们介绍了如何搭建 DNS 服务器以及如何往 DNS 服务器添加反向解析记录,本文将在前面的基础上告诉大家如何搭建主从架构的 DNS 服务器。

    9527
  • 大厂是如何搭建大数据平台架构?

    今天我们来看一下淘宝、美团和滴滴的大数据平台,一方面进一步学习大厂大数据平台的架构,另一方面也学习大厂的工程师如何画架构图。通过大厂的这些架构图,你就会发现,不...

    程序员小猿

扫码关注腾讯云开发者

领取腾讯云代金券