红包场景的系统设计和实践

简介: 红包场景的系统设计和实践

一、红包系统的业务场景

红包场景的业务处理流程:

  1. 包红包:需要查询用户账户金额,需要调用账户查询服务
  2. 发红包:需要红包服务生成红包订单id
  3. 抢红包:通过红包订单id实时生成单笔金额凭证
  4. 拆红包:有两条处理主线,一个是实时计算抢购红包金额,一个是发送方和接收方的转账操作

image-20231018002114849

二、红包系统的技术和架构特点

  1. 红包系统的数据读写特点是:写多读少

  2. 瞬时对DB和cache的请求并发量非常大,需要解决的是高并发的问题

  3. 对于涉及资金的业务,需要考虑资损和异常处理的方案,即需要较高的可靠性保障
  4. 在拆红包时,红包金额显示和转账操作可以异步化,即信息流和资金流可以分离

三、整体方案设计

1.业务逻辑层

  • 多实例服务和负载均衡策略

部署多实例的红包服务,提升服务的处理能力,有状态的信息抽取到分布式缓存中,在进行服务路由的时候,可以选择红包订单号进行路由,便于后期红包算法的实现。

  • 双缓存策略

选择构建本地缓存和分布式缓存双缓存的方案,redis做分布式缓存,主要用来保存全局缓存数据,包括用户信息和群组信息等,本地缓存主要用来保存中间值或状态信息,在红包系统中保存发出的红信息、抢购的红包信息等;

抢红包环节是流量最大的环节,将红包信息预先加载到cache中来,这样就不用再请求DB,降低对DB的压力;

  • 异步处理

由于在拆红包的时候并发量肯定非常大,但其实用户首先关注的只是抢到红包的金额等信息,实际钱包中的到账金额不会实时关注,所以抢购的红包信息,比如抢购金额等呈现是同步计算的,但钱包金额转账操作可以异步操作;

2.数据存储层

  • 分布分表方案

红包服务需要重点解决的问题就是并发请求量过大,分库是常见的解决方案,可以按照订单号进行分库,将原集中在一个数据库的数据分散到多个数据库,势必会降低对单库的访问压力;

在设计分库的时候需要考虑分片键,在红包场景下可以使用红包订单号来做分片键。

3.异常处理方案

  • 流控和降级策略

在发红包的时候处理好流量控制,流量过大需要有流量降级的策略。

  • 异常记录入库,后续人工补偿

数据写入失败记录入库,后期人工核查和补账;

  • 风控措施

涉及到资金的业务,可能就存在黑产等风险,需要引入风控措施;

4.部署方案

  • 集群部署

按照上述的方案,业务服务需要做集群部署,同样数据库服务也需要做集群部署;一方面是提升并发处理的性能,另一份方面是避免单点故障,提高可靠性。

四、重点问题的解决方案

红包生成算法

本地缓存做拆红包的实时处理,红包订单做key,利用redis的原子性做红包分拆的实时处理;红包金额在0.01~剩余用户平局值*2之间

故障处理思路

缓存故障则降级到访问数据库;

实时处理出问题则异步补偿,异步补偿出问题则记录问题,后续凭记录手动补账

五、总结

  1. 红包的业务场景主要是:包红包-->发红包-->抢红包-->拆红包
  2. 技术和架构特点:多写少读的场景,瞬时并发量比较大,拆红包和转账可以异步执行,可以实现双缓存操作
  3. 解决高并发的方案:服务多实例,按照订单号进行动态路由;实现双缓存设计,热点数据可以提前预热;红包算法在内存中进行实时计算;
  4. 提升高可用的方案:利用异步机制将拆红包和转账操作异步化;利用流控和降级措施避免服务不可用的场景出现;人工干预有问题的记录;对计划内风险因素做好规划和定时处理,计划外风险因素做好演练和预案;
目录
相关文章
|
6月前
|
数据挖掘 黑灰产治理
排队免单商城系统开发详细案例/方案项目/源码指南
排队免单商城系统开发设计是指开发一种商城系统,其中用户可以通过排队活动获得商品免单的机会。
|
6月前
|
安全
线下陪玩游戏系统开发功能需求/步骤设计/详细流程/源码指南
rience design, and security assurance. Here is a possible detailed development process: 1. * * Requirements Analysis: * * Firstly, the development team needs to communicate with customers to understand their needs and expectations. This may include requirements such as determining the supported game
|
6月前
|
新零售 人工智能 供应链
多人拼团奖励系统开发小程序软件案例
新零售以互联网技术为基础,通过利用数字化信息处理、人工智能等先进技术
|
安全
dapp互助预约排单抢单项目系统开发规则玩法/逻辑说明/案例介绍/方案设计/源码程序
The development of DApp appointment and scheduling mutual assistance system refers to the development of a mutual assistance system based on blockchain technology and decentralized application programs (DApp). This system is usually designed as a mutual aid or sharing economy model, aimed at providi
|
存储 NoSQL 安全
红包系统架构设计
红包系统架构设计
1751 0
红包系统架构设计
|
Java 测试技术 Spring
把优惠券系统设计的炉火纯青!(1)
把优惠券系统设计的炉火纯青!
143 0
把优惠券系统设计的炉火纯青!(1)
|
SQL NoSQL Java
把优惠券系统设计的炉火纯青!(2)
公司新来一个同事,把优惠券系统设计的炉火纯青!
157 0
把优惠券系统设计的炉火纯青!(2)
|
缓存 NoSQL 安全
优惠券系统架构设计与实践
优惠券系统架构设计与实践
2302 0
|
缓存 NoSQL 前端开发
秒杀系统设计的5个要点
比如有10件商品要秒杀,可以放到缓存中,读写时不要加锁。 当并发量大的时候,可能有25个人秒杀成功,这样后面的就可以直接抛秒杀结束的静态页面。进去的25个人中有15个人是不可能获得商品的。所以可以根据进入的先后顺序只能前10个人购买成功。后面15个人就抛商品已秒杀完。
342 0