高并发系统架构案例 - 微信红包高并发架构设计 - 学习/实践

1.应用场景

主要用于学习,分析,借鉴 微信红包高并发架构设计 方案,进行技术储备,升级内在技术能力,提升架构设计功力,以后能高效进行架构设计。

2.学习/操作

1.文档阅读

百亿级微信红包的高并发资金交易系统设计方案_语言 & 开发_方乐明_InfoQ精选文章

微信红包后台系统设计 - 云+社区 - 腾讯云

微信红包高并发架构设计 | Leilei's Blog | 磊磊的博客

21 | 高性能负载均衡:算法-极客时间

2.整理输出

TBD

后续补充

...

3.问题/补充

1. 网友评论

肖一林
看完了方乐明的对微信红包架构描述的技术文章,来回答一下问题:

有三个基本动作:发红包,抢红包,拆红包。

发红包就是在数据库插一条红包库存数据,

抢红包就是查询红包库存数据,

拆红包就是插入一条秒杀流水并更新库存数据。

有三个难点:

一是海量的并发,二是资金安全,三是良好的用户体验。

资金安全决定了交易只能直接建立在数据库上,不能建立在缓存上。

良好的用户体验就是要求不能出现不公平的现象,保证先抢先得,先抢的不能失败。

解决方案是:
1.分而治之,分成很多个并行的服务和数据库。相同的红包id总是分到相同的服务和数据库。所以负载均衡算法应该是hash算法
2.相同红包id的所有请求放在一个先进先出队列。然后分配一个独立的线程/进程处理。杜绝抢锁。
3.分离过期数据,减少单表数据量

作者回复: 嗯,要根据具体业务来分析

2. 网友-孙振超

负载均衡算法一共十来种之多,但经过抽取共性归纳之后就变成了4类,不仅容易记忆,即使以后再新增加其他的算法,也不外乎是进行了丰富,种类并没有什么变化,归纳为4类之后遇到类似的问题也可以用这样的方式去予以解决,从中也可以看到高手不只是机械性的记忆,而是带着思考去看待问题。

具体到微信红包的算法选择上,由于并发量特别高,需要有一个简单高效的算法,因而性能优先类算法可以不做考虑。

对于微信这种级别的机房,其容器化技术必然是炉火纯青,每一台vm的配置是可以完全相同的,因而也就无需采用负载均衡类算法和权重轮询算法,剩下来的就是hash类算法和简单轮询算法。

对于红包业务,最主要的操作是发红包和抢红包:不管是发个人红包还是发群红包整体业务相差不大,可以采用简单轮询算法,到任何一台服务器均可。但抢个人红包和抢群红包是不同的,抢群红包是有先后顺序,当有多个人抢同一个群红包时最好是由同一个服务器进行处理,这台服务器在收到抢红包的请求后将请求放到一个队列中,而后按照先进先出的方式进行消费,可以保证先到的人能抢到红包,后到的人后抢到红包。因而对于抢红包业务最好按照红包id进行hash负载。

如果是只选择一个负载算法的话,就是hash负载,发红包按照userid进行hash负载,抢红包按照红包id进行hash负载

作者回复: 分析点基本到位了,详细可以参考微信公开的技术文档

3. 网友-Tom

看到评论说按红包id hash,上亿人抢同一个新年红包,应该只有一个红包id 吧?

作者回复: 你以为是一个红包,实际上是几千上万个红包😂

4. 网友-赵正 Allen

发红包业务应该以红包的生命周期为思考的出发点。

主要经历:发,抢,查询,回收(没抢完,返回给发红包的用户)。

如果按这些细颗粒来看,抢,查询红包的并发要求最高,发红包次之,回收最低。

首先,发红包使用加权轮询,简单适用,成功后返回红包ID给客户端。

其次,抢红包,查询红包都带着ID给服务端,根据ID计算HASH,再利用一致性hash算法,找到最近的一个结点提供服务。

最后,回收应该由服务端定时触发,可以同样按抢红包处理。

作者回复: 分析到位,详细参考微信公开的技术文章,搜 微信红包高并发

4.参考

百亿级微信红包的高并发资金交易系统设计方案_语言 & 开发_方乐明_InfoQ精选文章

微信红包后台系统设计 - 云+社区 - 腾讯云

微信红包高并发架构设计 | Leilei's Blog | 磊磊的博客

后续补充

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值