批处理相关技术在支付业务系统中的应用
mhr18 2024-12-24 12:24 23 浏览 0 评论
批处理相关技术在支付业务系统中的应用
对于任何未明、处理中的订单,作为异步系统,都需要进行补偿处理
而实现补偿处理最传统的方式就是跑批处理。大部分情况下,批处理任务会被安排,并在预先设定好的事件间隔来执行。例如:一年、一个月、一天的特定时间。大部分情况下,批处理的输出数据和输入数据都是有边界数据。为了处理不同量级的数据,可以从不同角度可以分成不同的各类,按批处理系统可以分为单道批处理系统和多道批处理系统。按应用支持角度划分,可以分为单应用系统、分布式应用系统;按状态持久化角度可以分为基于内存系统、基于中间件系统、基于数据库系统等。在实时处理数据量超过上万次的支付系统中我们使用了以下几种技术来应对该场景。
分片技术的应用
业务迅速发展带来了跑批数据量的急剧增加。单机处理跑批数据已不能满足需要,另考虑到企业处理数据的扩展能力,多机跑批势在必行。多机跑批是指将跑批任务分发到多台服务器上执行,多机跑批的前提是“数据分片”。
分片的维度通常有状态(state)、类型(accountType)、id分区等,需要按照业务匹配选取。具体的分片方法有以下几种:
1、数据库层面,对业务主键进行取模。
where mod(id, 4) in (1, 2)
这种方式的问题是,在主键或者索引字段外套了一个函数,索引失效、全表扫描。改进方案是查询条件中再增加一个索引字段。
where mod(id, 4) in (1, 2) and create_date > sysdate - 1
- 数据库层面,增加字段,在生成数据时,就为该行数据生成一个mod值。
做分片的初衷就是跑批数据量越来越大、单台机器处理能力有限,通过扩展机器数来提升系统处理的能力。该mod值建议不要太小,至少要比分片项大。例如,生成的1000条数据的mod值只有0和1,而机器数加到了10,那最终只有两台机器在运行,造成资源浪费。当然,我们可以及时调整生成数据时的取模值,新生成的数据还是会分散到不同的机器上。
3、业务层面,选取状态(state)、类型(accountType)等字段作为分区维度。
通过进行分片的方式达到多线程处理数据,从而加快批处理的速度,满足业务系统的需要。
分片技术使得任务可以在分布式的环境下运行,每台任务服务器只运行分配给该服务器的分片。 随着服务器的增加或宕机,分片技术会近乎实时的感知服务器数量的变更,从而重新为分布式的任务服务器分配更加合理的任务分片项,使得任务可以随着资源的增加而提升效率。
步进式算法的应用
根据业务场景,使用算法,减少查询次数,从而降低系统负载。在被补偿状态的初始化时,同时给定该订单一个下次补偿查询时间和查询次数(0)定时跑批,仅处理较小一段范围,
约束公式:订单.下次补偿时间 >= 定时任务心跳系统时间 - N次心跳间隔。
如满足以上条件即为本次处理范围,进行业务处理。假设业务补偿成功,此订单无需继续补偿,则进行订单处理(如修改状态)后,不更新下次补偿时间,不累计补偿次数。假设业务补偿失败,此订单仍需继续补偿,则修改下次补偿时间,补偿次数加1。通过该算法的应用使得补偿次数越多,补偿间隔越长,跳过的批次越多,这样就完成了减少查询次数,从而降低系统负载。
分页处理的应用
在算法领域有一很经典的思想,分治法也称为分解法、分治策略等。将一个复杂的问题进行分隔处理。从而起到“大事化小,小事化了”的作用。在支付场景中都以oracle数据库作持久化的中间件。
第一种逻辑分页,将数据全部查询取,然后返回需要的部分:
select * from (select rownum a, ARTICLEW.XMLDOC from ARTICLEW ) t where t.a between 1 and 200 ;
第二种临时表分布:
select * from (select rownum, t.* from (select xmldoc from articlew) t where t.rownum<=200) where rownum >=1
对于第一个分页查询的语句,Oracle内部,首先会做全表扫描,把所有符合条件的数据,全部返回,而真正的我们分页所需要的数据,仅仅是在Between 和and之后才进行过滤筛选。对于第二个查询语句,第二层的查询条件WHERE ROWNUM <= 200就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就立即终止查询,仅仅把我们所需要的数据拿出来,是真正的按需所取。
总结
在不同的应用场景中可以有不同的实现方案,我们需要根据业务场景各种限制条件选择相对适合的批处理技术进行实现。分片技术、分页技术、步进式算法在当下微服务架构的系统中都有着举足轻重的作用。正所谓没有最好的批处理技术,只有最适合当前场景的技术。
- 上一篇:hadoop
- 下一篇:一款接口快速开发框架
相关推荐
- Dubai's AI Boom Lures Global Tech as Emirate Reinvents Itself as Middle East's Silicon Gateway
-
AI-generatedimageAsianFin--Dubaiisrapidlytransformingitselffromadesertoilhubintoaglob...
- OpenAI Releases o3-pro, Cuts o3 Prices by 80% as Deal with Google Cloud Reported to Make for Compute Needs
-
TMTPOST--OpenAIisescalatingthepricewarinlargelanguagemodel(LLM)whileseekingpartnershi...
- 黄仁勋说AI Agent才是未来!但究竟有些啥影响?
-
,抓住风口(iOS用户请用电脑端打开小程序)本期要点:详解2025年大热点你好,我是王煜全,这里是王煜全要闻评论。最近,有个词被各个科技大佬反复提及——AIAgent,智能体。黄仁勋在CES展的发布...
- 商城微服务项目组件搭建(五)——Kafka、Tomcat等安装部署
-
1、本文属于mini商城系列文档的第0章,由于篇幅原因,这篇文章拆成了6部分,本文属于第5部分2、mini商城项目详细文档及代码见CSDN:https://blog.csdn.net/Eclipse_...
- Python+Appium环境搭建与自动化教程
-
以下是保姆级教程,手把手教你搭建Python+Appium环境并实现简单的APP自动化测试:一、环境搭建(Windows系统)1.安装Python访问Python官网下载最新版(建议...
- 零配置入门:用VSCode写Java代码的正确姿
-
一、环境准备:安装JDK,让电脑“听懂”Java目标:安装Java开发工具包(JDK),配置环境变量下载JDKJava程序需要JDK(JavaDevelopmentKit)才能运行和编译。以下是两...
- Mycat的搭建以及配置与启动(mycat2)
-
1、首先开启服务器相关端口firewall-cmd--permanent--add-port=9066/tcpfirewall-cmd--permanent--add-port=80...
- kubernetes 部署mysql应用(k8s mysql部署)
-
这边仅用于测试环境,一般生产环境mysql不建议使用容器部署。这里假设安装mysql版本为mysql8.0.33一、创建MySQL配置(ConfigMap)#mysql-config.yaml...
- Spring Data Jpa 介绍和详细入门案例搭建
-
1.SpringDataJPA的概念在介绍SpringDataJPA的时候,我们首先认识下Hibernate。Hibernate是数据访问解决技术的绝对霸主,使用O/R映射(Object-Re...
- 量子点格棋上线!“天衍”邀您执子入局
-
你是否能在策略上战胜量子智能?这不仅是一场博弈更是一次量子智力的较量——量子点格棋正式上线!试试你能否赢下这场量子智局!游戏玩法详解一笔一画间的策略博弈游戏目标:封闭格子、争夺领地点格棋的基本目标是利...
- 美国将与阿联酋合作建立海外最大的人工智能数据中心
-
当地时间5月15日,美国白宫宣布与阿联酋合作建立人工智能数据中心园区,据称这是美国以外最大的人工智能园区。阿布扎比政府支持的阿联酋公司G42及多家美国公司将在阿布扎比合作建造容量为5GW的数据中心,占...
- 盘后股价大涨近8%!甲骨文的业绩及指引超预期?
-
近期,美股的AI概念股迎来了一波上升行情,微软(MSFT.US)频创新高,英伟达(NVDA.US)、台积电(TSM.US)、博通(AVGO.US)、甲骨文(ORCL.US)等多股亦出现显著上涨。而从基...
- 甲骨文预计新财年云基础设施营收将涨超70%,盘后一度涨8% | 财报见闻
-
甲骨文(Oracle)周三盘后公布财报显示,该公司第四财季业绩超预期,虽然云基建略微逊于预期,但管理层预计2026财年云基础设施营收预计将增长超过70%,同时资本支出继上年猛增三倍后,新财年将继续增至...
- Springboot数据访问(整合MongoDB)
-
SpringBoot整合MongoDB基本概念MongoDB与我们之前熟知的关系型数据库(MySQL、Oracle)不同,MongoDB是一个文档数据库,它具有所需的可伸缩性和灵活性,以及所需的查询和...
- Linux环境下,Jmeter压力测试的搭建及报错解决方法
-
概述 Jmeter最早是为了测试Tomcat的前身JServ的执行效率而诞生的。到目前为止,它的最新版本是5.3,其测试能力也不再仅仅只局限于对于Web服务器的测试,而是涵盖了数据库、JM...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- Dubai's AI Boom Lures Global Tech as Emirate Reinvents Itself as Middle East's Silicon Gateway
- OpenAI Releases o3-pro, Cuts o3 Prices by 80% as Deal with Google Cloud Reported to Make for Compute Needs
- 黄仁勋说AI Agent才是未来!但究竟有些啥影响?
- 商城微服务项目组件搭建(五)——Kafka、Tomcat等安装部署
- Python+Appium环境搭建与自动化教程
- 零配置入门:用VSCode写Java代码的正确姿
- Mycat的搭建以及配置与启动(mycat2)
- kubernetes 部署mysql应用(k8s mysql部署)
- Spring Data Jpa 介绍和详细入门案例搭建
- 量子点格棋上线!“天衍”邀您执子入局
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle 空为0 (51)
- oracle主从同步 (56)
- oracle 乐观锁 (53)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)