实时征收的两阶段同步:先内存后Oracle
📅 2026/7/15 11:51:36
👁️ 次浏览
实时征收缴费到账的两阶段同步——先内存后Oracle文章目录实时征收缴费到账的两阶段同步——先内存后Oracle一、问题二、两步走三、为什么不用消息队列四、内存库的作用五、同步状态机六、对账兜底七、总结银行说扣款成功只要半秒。但社保核心入库可能要一秒。中间加一层内存库秒变毫秒。一、问题社保缴费的实时征收链路群众在手机或终端上点缴费 → 银行扣款 → 社保系统记账。银行扣款是实时的。但社保系统的 Oracle 入库不一定够快——写缴费记录、更新账户、更新征收状态几张大表的事务提交可能要几百毫秒。几百人在同一秒缴费Oracle 的 IO 就顶不住了。解决方案银行扣款后先写内存库秒级响应再异步同步到 Oracle。二、两步走银行系统 │ ▼ 缴费到账交易 │ ▼ 社保引用服务器 → 写缴费信息到内存数据库 → 成功写入 │ └→ 返回缴费成功给银行半秒不到 异步线程下一秒触发 │ ▼ 查询内存库中未同步的缴费信息 │ ▼ 逐条写入 Oracle缴费记录、到账信息 │ ▼ 更新内存库同步状态 → 标记已同步三、为什么不用消息队列标准做法是银行→Kafka→消费者→Oracle。这套方案的开发量搭建 Kafka 集群写生产者、消费者处理消息丢失、重复消费监控积压这个场景的吞吐量不需要 Kafka。几千人一天缴费峰值每秒十几个。内存库 定时轮询代码量是 Kafka 方案的十分之一。不是所有异步都需要消息队列。量级小、容忍秒级延迟的场景轮询够了。四、内存库的作用内存库不是 Redis。是社保系统自带的内存数据库——一个常驻进程的数据结构响应在微秒级。三个作用缓冲挡住银行的实时请求不让并发压在 Oracle 上去重同一笔交易重复来内存库里已存在的直接返回已处理兜底Oracle 挂了内存库继续收等 Oracle 恢复后批量补写五、同步状态机每笔缴费在内存库里有三个状态待同步 → 同步中 → 已同步 │ │ └─────┬───┘ 失败 → 重试 → 超过N次 → 人工处理伪代码实现// 接收银行缴费反馈实时入口 function 缴费到账(银行交易号, 金额, 人员ID): // 先写内存库 if MemDB.exists(银行交易号): return 已处理 // 去重 record {交易号,金额,人员ID,状态待同步,时间NOW()} MemDB.insert(record) return 缴费成功 // 半秒内返回 // 异步同步线程每30秒执行一次 function 同步到Oracle(): records MemDB.query(状态待同步) for rec in records: MemDB.update(rec.交易号, 状态同步中) try: Oracle.beginTransaction() Oracle.execute(INSERT INTO 缴费记录 ..., rec) Oracle.execute(UPDATE 账户 SET 余额余额? WHERE 人员ID?, rec.金额, rec.人员ID) Oracle.commit() MemDB.update(rec.交易号, 状态已同步) catch Exception as e: Oracle.rollback() rec.重试次数 1 if rec.重试次数 10: MemDB.update(rec.交易号, 状态同步失败-需人工, 错误e.message) else: MemDB.update(rec.交易号, 状态待同步) // 等30秒后重试 // 对账兜底每天凌晨执行 function 日终对账(): bankRecords 解析银行对账文件(d:/recon/bank_20250101.txt) siRecords Oracle.query(SELECT * FROM 缴费记录 WHERE 日期TODAY) memRecords MemDB.queryAll() for bank in bankRecords: si siRecords.find(交易号bank.交易号) if si is None: // 银行扣了、社保没记 → 补记 Oracle.insert(bank) elif si.金额 ! bank.金额: // 金额不一致 → 人工对 alert(对账差异: bank.交易号) for si in siRecords: bank bankRecords.find(交易号si.交易号) if bank is None: // 社保记了、银行没扣 → 冲正 Oracle.update(DELETE FROM 缴费记录 WHERE 交易号?, si.交易号)六、对账兜底银行每天发对账文件过来。系统跑批比对银行扣了、社保没记 → 补记以银行为准社保记了、银行没扣 → 冲正以银行为准两边都有、金额不一致 → 人工对对账是最后一道防线。前面的内存库、异步同步都是为了快。但对账不为快为准。七、总结实时征收的三层设计层作用延迟银行发起扣款实时内存库缓冲 快速响应微秒级Oracle持久化 业务查询秒级异步不是高并发架构是务实架构。量级不需要 Kafka就轮询。对账能兜底就不在实时链路上加过多校验。做政务系统最怕的是用高并发方案解决低并发问题。Kafka 是好的但如果你的峰值就每秒十几个内存库 轮询 对账兜底是最少出事的方案。
如何用OpenArm 7自由度开源机械臂构建你的物理AI研究平台 【免费下载链接】openarm A fully open-source humanoid arm for physical AI research and deployment in contact-rich environments. 项目地址: https://gitcode.com/GitHub_Trending/op/openarm
OpenArm是一…
📅 2026/7/15 11:51:36
1. 项目概述:为什么要在Unity里折腾一个方向盘?如果你是一个模拟驾驶游戏的爱好者,或者正在开发一款赛车、卡车模拟器,那么“手感”绝对是决定沉浸感上限的关键。键盘的“0”和“1”按键逻辑,永远无法模拟出方向盘转动…
📅 2026/7/15 11:51:36
在个人微信API二次开发的高阶实践中,系统往往需要极其频繁地处理各种网络 I/O 和磁盘 I/O。例如:下载微信群里发送的高清图片保存到本地硬盘、调用外部大语言模型(LLM)API 进行文本语义分析、或者读取本地的敏感词配置字典。
很多…
📅 2026/7/15 11:51:36
一、CCC认证制度概述
CCC认证(China Compulsory Certification,中国强制性产品认证)是中国政府为保护国家安全、人身健康和安全、环境保护等目的而实施的强制性产品合格评定制度。笔记本电脑作为信息技术设备,属于CCC认证目录范围…
📅 2026/7/15 12:47:15
1. 51单片机PWM波形生成基础原理PWM(Pulse Width Modulation)脉宽调制技术是嵌入式系统中最常用的控制手段之一。在51单片机中实现PWM输出,本质上是利用定时器中断精确控制IO口高低电平的持续时间。与ARM等高端MCU不同,经典51内核…
📅 2026/7/15 12:47:15
1. 项目概述:为什么“遗传算法第二讲”比第一讲更值得你花时间啃透“遗传算法”这四个字,听上去像生物课和计算机课的混血儿——既带着DNA双螺旋的神秘感,又透着代码里for循环的机械味。但真正让我在工业优化项目里连续三年把它设为默认求解器…
📅 2026/7/15 12:47:15
GEO时代已至,品牌流量逻辑正在重构在AI大模型重构信息入口的当下,传统SEO的“关键词排名”逻辑正在被GEO(生成式引擎优化)的“被AI引用”逻辑替代。当用户向DeepSeek、豆包、Kimi提问“哪个品牌值得选”时,AI的回答直接…
📅 2026/7/15 12:47:15
1. 为什么需要NamedTuple? 在Python中处理结构化数据时,我们通常会面临几种选择:普通元组、字典或自定义类。普通元组虽然轻量高效,但最大的问题是需要通过数字索引访问元素,比如 point[0] 表示x坐标, p…
📅 2026/7/15 12:47:15
Windows和Office激活终极指南:5分钟实现永久激活的完整教程 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO
还在为Windows系统激活而烦恼吗?Office突然变成只读模式让你无…
📅 2026/7/15 12:46:14
1. COM线程模型基础与CoInitializeEx核心作用在Windows平台开发中,组件对象模型(COM)的线程处理机制一直是开发者必须掌握的底层知识。作为COM初始化的门户函数,CoInitializeEx不仅决定了对象在何种线程环境下运行,更影响着整个组件的并发性能…
📅 2026/7/15 0:00:17
1. 为什么M芯片Mac用户需要降级到Monterey? 去年刚拿到M2芯片的MacBook Pro时,我第一时间升级到了Ventura系统。结果第三天就遇到了微信闪退、Final Cut Pro渲染卡顿的问题。后来在开发者论坛发现,不少专业软件对Ventura的适配都存在问题。这…
📅 2026/7/15 0:00:17
1. 背景与核心概念在AI大模型快速发展的今天,许多开发者和研究者都面临一个现实问题:如何在有限的硬件预算下实现高效的本地大模型部署。特别是对于个人开发者和小型团队来说,购买最新的高端显卡成本高昂,而利用现有的或二手硬件资…
📅 2026/7/15 0:00:17
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/14 6:35:02
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/14 12:06:52
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/14 7:15:18
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/14 15:11:56
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/15 2:24:18
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/14 15:11:56