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

news2025/1/15 16:56:33

一、红包系统的业务场景

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

  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. 提升高可用的方案:利用异步机制将拆红包和转账操作异步化;利用流控和降级措施避免服务不可用的场景出现;人工干预有问题的记录;对计划内风险因素做好规划和定时处理,计划外风险因素做好演练和预案;

    本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1104807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ “引用”究竟是什么?(代码实测)

C的引用是个挺好用的东西,相当于指针的另一种写法,虽然引用有一些约束,比如必须初始化而且不能修改引用目标,但确实非常大地增加了编程的清晰度和灵活性。 引用主要有这些价值: 简化指针访问,“.”比“-&g…

简单方法建立个人网站,不用编程

对于很多没有编程知识的小白来说,建立个人网站似乎是一件困难而遥远的事情。然而,现在有了一个无需编程的方法,小白也能够轻松建立自己的个人网站,让自己的才华和创意得到更好的展示! 首先,你需要登录乔拓云…

【快刊推荐】综合类EI,最新案例29天录用,国人友好!

综合类 • 快刊推荐 01 期刊简介 检索数据库:EI &Scopus &Google Scholar 版面类别:正刊 数据库收录年份:2009年 国人占比:47%,对国人友好 年发文量:20篇左右 02 接收领域 生物&#xff…

常见场景面试题-接口重试策略、二维码扫描原理、幂等性、排行榜(三)

typora-copy-images-to: imgs微信二维码扫描原理: 答:流程: 总的来说,PC 端需要进行扫码登陆的原理是通过二维码绑定移动端的身份信息以及PC端的设备信息,根据这两个信息生成 token 给 PC 端,PC 端就登陆成…

重建大师如何调用GPU?

答:会调用GPU的cuda和显存,不同处理的阶段,占用会不一样。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件,输入倾斜照片,激光点云,POS信息及像控点,输出高精度彩色网格模…

Dreamweaver2019安装教程从零基础入门到精通(非常详细附安装包)看完这一篇就够了

软件介绍 Dreamweaver简称“DW”,是一款专业的网页设计软件,集网页制作和网站管理于一身的即时检索的网页代码编辑器,利用对 HTML、CSS、JavaScript 等内容的支持,设计人员和开发人员可以在几乎任何地方快速制作并发布网页。借助…

Vue小案例(一)

目录 案例一:点击按钮切换图片 案例二:书架 案例三:成绩表 案例一:点击按钮切换图片 现在有5张图片,我想通过点击上一张 / 下一张的按钮来进行图片切换。 使用:v-bind、v-on、v-show 1、首先创建好Vu…

使用FreeMarker导出word文档(支持循环导出实时多张图片)

续上一期的更新内容 ,导出的是单张图片,直接在路径的src 里面填写对应的占位符,就可以了,随着需求的变化,那么今天我们继续往下写一个循环导出多张图片到word里面。 使用FreeMarker导出word文档(支持导出单张图片) …

如何评估大语言模型是否可信?这里总结了七大维度

源自:机器之心发布 作者:刘扬,Kevin Yao 实际部署中,如何 “对齐”(alignment)大型语言模型(LLM,Large Language Model),即让模型行为与人类意图相一致…

荣耀推送服务业务介绍

概述 荣耀推送服务(HONOR Push)是荣耀公司向开发者提供的消息推送服务,通过服务端与客户端建立一条稳定、可靠的长连接通道,向荣耀手机系统上的APP应用客户端实时推送消息的服务。无论应用进程是否存在,均可正常收到消…

【AIFEM案例教程】水轮机活动导叶强度分析

AIFEM是由天洑自主研发的一款通用的智能结构仿真软件,助力用户解决固体结构相关的静力学、动力学、振动、热力学等实际工程问题,软件提供高效的前后处理工具和高精度的有限元求解器,帮助用户快速、深入地评估结构的力学性能,加速产…

LAS Spark+云原生:数据分析全新解决方案

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 随着数据规模的迅速增长和数据处理需求的不断演进,云原生架构和湖仓分析成为了现代数据处理的重要趋势。在这个数字化时代,企业面临着海量数…

leetcode:101.对称二叉树

借用二叉树是否相同的代码改动左右孩子相等对应关系,即为是否对称。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/bool isSameTree(struct TreeNode* p, struct Tr…

纳米软件科普|什么是运放芯片?运放芯片测试方法是什么?

运放芯片是一种电路元件,它可以用于信号放大、滤波、积分、微分等电路中。在多媒体音箱领域,运放芯片主要负责音量、音调和周边效果调节的运算功能。例如,音响中的前级和耳机放大器(耳放)中都会使用集成运算放大器。常见的运放芯片有OPA1612和…

nvm 安装 node 安装不上 npm

遇到一个问题 nvm install 18.18.2 node -v 安装上了 npm -v 发现没有安装上 解决办法 nvm -v 查看到自己的 nvm 版本号是 1.1.7 NVM下载 - NVM中文网 下载最新版本的 nvm .exe 文件 nvm list 查看手里 node 的所有版本 nvm uninstall 各个版本只保留一个最低版本 点…

中文编程开发语言工具编程案例:计时计费管理系统软件连接灯控器编程案例

中文编程开发语言工具编程案例:计时计费管理系统软件连接灯控器编程案例 中文编程开发语言工具编程案例:计时计费管理系统软件连接灯控器编程案例 中文编程系统化教程,不需英语基础。学习链接 https://edu.csdn.net/course/detail/39036

Messari发布Moonbeam简报,每日交易量稳步增长,首次公布利润数据

区块链数据公司Messari首次发布Moonbeam项目分析简报,从项目市值、链上数据表现、质押以及Moonbeam的技术优势XCM使用量等角度全面分析。这个再熊市初期上线的项目一直在默默开发,并在跨链互操作领域拥有了相当的实操成绩。我们翻译了Messari简报中的部分…

分类预测 | Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络的数据多输入分类预测

分类预测 | Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络的数据多输入分类预测 目录 分类预测 | Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络的数据多输入分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-BiLSTM鲸鱼算法…

AirPods Max奇特的关机模式!如何关闭AirPods Max

对于一家专注于让事情变得更简单的公司来说,苹果已经把关闭最高端耳机这样的基本问题过于复杂了。耳机没有电源按钮。别担心;如果你想弄清楚情况,你并不孤单。今天,我们将教你如何关闭AirPods Max。 如何关闭AirPods Max AirPods…

万界星空科技离散型制造企业MES解决方案

MES即制造企业生产过程执行系统,面向制造企业车间执行层的生产信息化管理系统。是精益生产、数字化工厂、智慧工厂的支撑平台。帮助企业对生产全流程进行管控并进行信息追溯,实现柔性化生产、精细化管理。 一、企业生产场景总览: 二、MES系统架构图: 帮助企业实现制造执行自动…