CN116128493A - 基于分布式锁的业务处理方法、系统、装置及介质 - Google Patents
基于分布式锁的业务处理方法、系统、装置及介质 Download PDFInfo
- Publication number
- CN116128493A CN116128493A CN202211684559.1A CN202211684559A CN116128493A CN 116128493 A CN116128493 A CN 116128493A CN 202211684559 A CN202211684559 A CN 202211684559A CN 116128493 A CN116128493 A CN 116128493A
- Authority
- CN
- China
- Prior art keywords
- service
- distributed lock
- lock
- distributed
- expiration time
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/08—Payment architectures
- G06Q20/10—Payment architectures specially adapted for electronic funds transfer [EFT] systems; specially adapted for home banking systems
- G06Q20/102—Bill distribution or payments
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Accounting & Taxation (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Finance (AREA)
- General Engineering & Computer Science (AREA)
- General Business, Economics & Management (AREA)
- Strategic Management (AREA)
- Economics (AREA)
- Software Systems (AREA)
- Development Economics (AREA)
- Computing Systems (AREA)
- Multi Processors (AREA)
- Computer And Data Communications (AREA)
- Hardware Redundancy (AREA)
Abstract
一种基于分布式锁的业务处理方法、系统、装置及介质,包括:基于业务的业务类型,确定分布式锁的类型;在所述业务中需要加锁的方法或者类上加上定义的注解并进行加锁;在业务系统中增加定时任务;按照预设周期获取数据并判断分布式锁表中所有所述分布式锁的过期时间;响应于所述业务停止且所述分布式锁的过期时间达到指定的时间,删除所述分布式锁对应的数据。
Description
技术领域
本发明涉及分布式架构领域,具体涉及一种基于分布式锁的业务处理方法、系统、装置及介质。
背景技术
随着业务的不断发展,原先的单体应用被拆分为多个微服务,每个微服务又会部署多个实例,于是就形成了当下的微服务架构。处理共享资源的请求来自不同的服务实例,也就是在不同的JVM进程中。原先的单体服务中的加锁方式在分布式场景下不能满足共享资源的并发访问要求。因此我们需要一种适用于分布式场景下的共享资源安全的处理机制,此时应对这种问题的分布式锁就应运而生了。
目前在JAVA项目中使用到的分布式锁,大多是引入其它的第三方框架实现,例如:redis,zookeeper等。引入第三方框架使得系统整体架构变得复杂;如果引入的框架在部署上不能达到高可用,那么分布式锁就会不可靠。
在中小型项目中,往往也有分布式的概念,那么又没有引入第三方框架,或者第三方框架不能高可用的部署,那么在这种系统架构下需要保证业务正常可靠,就必须使用一种锁技术。现有的处理方案大部分都是妥协引入第三方框架。
因此,需要提供一种可以不需要引入第三方框架的基于分布式锁的业务处理方法、系统及介质。
发明内容
本发明的目的在于提供一种基于分布式锁的业务处理方法、系统及装置。以期解决上述技术问题。
为了实现前述目的,本发明采用以下技术方案:
一种基于分布式锁的业务处理方法,包括:
基于业务的业务类型,确定分布式锁的类型;
在所述业务中需要加锁的方法或者类上加上定义的注解并进行加锁;
在业务系统中增加定时任务;
按照预设周期获取数据并判断分布式锁表中所有所述分布式锁的过期时间;
响应于所述业务停止且所述分布式锁的过期时间达到指定的时间,删除所述分布式锁对应的数据。
在一些实施例中,所述方法还包括:
响应于所述分布式锁的过期时间达到指定的时间,所述业务未停止,则启动定时续期任务。
在一些实施例中,所述定时续期任务包括将所述分布式锁的过期时间延长,且在所述业务停止时,所述定时续期任务结束。
在一些实施例中,所述分布式锁基于mysql表以及java语言实现,所述分布式锁包括锁名称、锁唯一标识、加锁次数、过期时间。
同时,本发明还公开了一种基于分布式锁的业务处理系统,包括:
确定模块,用于基于业务的业务类型,确定分布式锁的类型;
第一处理模块,用于在所述业务中需要加锁的方法或者类上加上定义的注解并进行加锁;
第二处理模块,用于在业务系统中增加定时任务;
判断模块,用于按照预设周期获取数据并判断分布式锁表中所有所述分布式锁的过期时间;
删除模块,用于响应于所述业务停止且所述分布式锁的过期时间达到指定的时间,删除所述分布式锁对应的数据。
在一些实施例中,所述系统还包括:
启动模块,用于响应于所述分布式锁的过期时间达到指定的时间,所述业务未停止,则启动定时续期任务。
在一些实施例中,所述定时续期任务包括将所述分布式锁的过期时间延长,且在所述业务停止时,所述定时续期任务结束。
在一些实施例中,所述分布式锁基于mysql表以及java语言实现,所述分布式锁包括锁名称、锁唯一标识、加锁次数、过期时间。
同时,本发明还公开了一种基于分布式锁的业务处理装置,所述装置包括至少一个处理器以及至少一个存储器;所述至少一个存储器用于存储计算机指令;所述至少一个处理器用于执行所述计算机指令中的至少部分指令以实现前述的基于分布式锁的业务处理方法。
同时,本发明还公开了一种计算机可读存储介质,所述存储介质存储计算机指令,当计算机读取所述计算机指令时,所述计算机执行前述的所述的基于分布式锁的业务处理方法。
有益效果
本发明与现有技术相比,其显著优点是:
本方法引入mysql+java程序的方式实现分布式锁,不仅不需要引入第三方框架,而且如果数据库和java业务程序不出问题那么分布式锁就不会出问题。大大保证了业务系统的可用性。达到了去第三方框架的架构下实现分布式锁;增强了业务系统的健壮性。
附图说明
图1是本实施例涉及一种基于分布式锁的业务处理系统的示意图;
图2是本实施例涉及的一种基于分布式锁的业务处理方法的流程示意图;
图3是本实施例涉及的分布式锁的应用场景示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
相反,本申请涵盖任何由权利要求定义的在本申请的精髓和范围上做的替代、修改、等效方法以及方案。进一步,为了使公众对本申请有更好的了解,在下文对本申请的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本申请。
以下将结合图1-3对本申请实施例所涉及的一种基于分布式锁的业务处理方法及系统进行详细说明。值得注意的是,以下实施例仅仅用于解释本申请,并不构成对本申请的限定。
实施例1
如图1所示为基于分布式锁的业务处理系统100的示意图,一种基于分布式锁的业务处理系统100,包括:
确定模块110,用于基于业务的业务类型,确定分布式锁的类型;
第一处理模块120,用于在所述业务中需要加锁的方法或者类上加上定义的注解并进行加锁;
第二处理模块130,用于在业务系统中增加定时任务;
判断模块140,用于按照预设周期获取数据并判断分布式锁表中所有所述分布式锁的过期时间;
删除模块150,用于响应于所述业务停止且所述分布式锁的过期时间达到指定的时间,删除所述分布式锁对应的数据。
在一些实施例中,所述系统还包括:
启动模块160,用于响应于所述分布式锁的过期时间达到指定的时间,所述业务未停止,则启动定时续期任务。
在一些实施例中,所述定时续期任务包括将所述分布式锁的过期时间延长,且在所述业务停止时,所述定时续期任务结束。
在一些实施例中,所述分布式锁基于mysql表以及java语言实现,所述分布式锁包括锁名称、锁唯一标识、加锁次数、过期时间。在通常使用的分布式锁中,往往是基于第三方框架本身的特征实现,例如Redis分布式锁是基于redis命令、redis过期策略等。在本发明中是完全摒弃这些为了实现分布式锁而引入的第三方框架,整体采用mysql表以及业务开发语言java来实现分布式锁。
在一些实施例中,在数据库中,在Mysql数据库中设计了分布式锁的专用表结构,包含了锁名称、锁唯一标识、加锁次数、过期时间。其中锁名称主要用于标识加了什么锁,对应表示执行什么业务;锁唯一标识和加锁次数用于标识是谁加了这个锁、加了几次;这两个字段的使用在释放锁的时候防止了释放别人的锁的情况。最后一个过期时间字段则是用于在业务系统异常、业务机器突然断电等突发情况下保障锁的正常释放,为业务正常运行后正常加解锁提供又一层的保障。
实施例2
如图2所示,一种基于分布式锁的业务处理方法,包括:
步骤210,基于业务的业务类型,确定分布式锁的类型。
首先为了满足不同业务的加锁需求,需要定义锁的类型,每一种类型都代表了需要加锁的不同业务。如图3所示是分布式锁的具体应用场景。
在一些实施例中,所述分布式锁基于mysql表以及java语言实现,所述分布式锁包括锁名称、锁唯一标识、加锁次数、过期时间。
步骤220,在所述业务中需要加锁的方法或者类上加上定义的注解并进行加锁。
在一些实施例中,为了灵活的在业务方法、业务处理服务类上加锁,定义了注解加切面的方式来提高灵活性,在需要加锁的方法或者类上加上定义的注解,然后在切面中实现加锁的业务即可。
例如,在业务程序中,可以定义账户锁类型并且实现加锁注解;在充值、支付的业务方法上加上加锁注解,并且锁名称定义为账户锁。那么在注解切面中,当监听到加锁业务执行的时候,在业务执行之前,可以在分布式表锁中添加一行该账户锁的数据并添加过期时间,标识加锁成功。
步骤230,在业务系统中增加定时任务。
步骤240,按照预设周期获取数据并判断分布式锁表中所有所述分布式锁的过期时间。
步骤250,响应于所述业务停止且所述分布式锁的过期时间达到指定的时间,删除所述分布式锁对应的数据。
在一些实施例中,在计算机应用中往往会出现不可预知的情况,例如系统死机等情况;那么为了应对这异常情况,由于这些异常情况一般是认为处理,例如重启服务;所以在业务系统中定义了定时任务,每隔一定的时间(默认1秒),判断分布式锁表中所有锁的过期时间,一旦出现业务已经停止且锁过期时间达到指定的时间时,直接删除该锁对应的数据,达到释放锁的目的。
例如,在对应业务方法执行完成之后,删除分布式锁表中的账户锁对应的数据,标识解锁成功。这样在充值、支付同时进行的时候,保证了只有一个请求能修改到账户余额,其它请求直接返回“请稍后重试”的提示。那么当另一个请求进入程序时,就会看到新的余额。从而保证了余额的正常处理。
在一些实施例中,所述方法还包括:
步骤260,响应于所述分布式锁的过期时间达到指定的时间,所述业务未停止,则启动定时续期任务。
在一些实施例中,所述定时续期任务包括将所述分布式锁的过期时间延长,且在所述业务停止时,所述定时续期任务结束。
在一些实施例中,在计算机网络应用中,业务执行过程中往往因为网络的原因造成了业务执行的比预期时间更长,那么在锁业务中,锁释放的时机必须在业务执行完成之后,不能出现业务没有执行完成,锁已经释放的错误步骤。那么为了应对这种网络异常,本发明引进了锁续期技术;通过定时任务,在业务加锁后,当锁已经到达过期时间后,如果程序判断业务仍然在执行过程中,则启动定时续期任务,将锁的过期时间延长为原来过期时间加三分之一,锁续期定时任务将在业务执行结束后停止,达到业务正常处理的目的。
例如,如果在充值、支付过程中由于网络原因造成业务处理时间过长,那么实现的锁续期定时任务就会启动,不断延长数据库的过期时间,直到业务处理完成。
在一些实施例中,在充值、支付业务过程中如果程序机器突然断电,那么重启程序之后,锁过期检测定时任务也会重新,当判断业务没有执行时,会从数据库直接删除账户锁数据。从而保证新的充值-支付业务正常扭转。
同时,本发明还公开了一种基于分布式锁的业务处理装置,所述装置包括至少一个处理器以及至少一个存储器;所述至少一个存储器用于存储计算机指令;所述至少一个处理器用于执行所述计算机指令中的至少部分指令以实现前述的基于分布式锁的业务处理方法。
同时,本发明还公开了一种计算机可读存储介质,所述存储介质存储计算机指令,当计算机读取所述计算机指令时,所述计算机执行前述的所述的基于分布式锁的业务处理方法。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于分布式锁的业务处理方法,其特征在于,包括:
基于业务的业务类型,确定分布式锁的类型;
在所述业务中需要加锁的方法或者类上加上定义的注解并进行加锁;
在业务系统中增加定时任务;
按照预设周期获取数据并判断分布式锁表中所有所述分布式锁的过期时间;
响应于所述业务停止且所述分布式锁的过期时间达到指定的时间,删除所述分布式锁对应的数据。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于所述分布式锁的过期时间达到指定的时间,所述业务未停止,则启动定时续期任务。
3.根据权利要求2所述的方法,其特征在于,所述定时续期任务包括将所述分布式锁的过期时间延长,且在所述业务停止时,所述定时续期任务结束。
4.根据权利要求1所述的方法,其特征在于,所述分布式锁基于mysql表以及java语言实现,所述分布式锁包括锁名称、锁唯一标识、加锁次数、过期时间。
5.一种基于分布式锁的业务处理系统,其特征在于,包括:
确定模块,用于基于业务的业务类型,确定分布式锁的类型;
第一处理模块,用于在所述业务中需要加锁的方法或者类上加上定义的注解并进行加锁;
第二处理模块,用于在业务系统中增加定时任务;
判断模块,用于按照预设周期获取数据并判断分布式锁表中所有所述分布式锁的过期时间;
删除模块,用于响应于所述业务停止且所述分布式锁的过期时间达到指定的时间,删除所述分布式锁对应的数据。
6.根据权利要求5所述的系统,其特征在于,所述系统还包括:
启动模块,用于响应于所述分布式锁的过期时间达到指定的时间,所述业务未停止,则启动定时续期任务。
7.根据权利要求6所述的系统,其特征在于,
所述定时续期任务包括将所述分布式锁的过期时间延长,且在所述业务停止时,所述定时续期任务结束。
8.根据权利要求5所述的系统,其特征在于,所述分布式锁基于mysql表以及java语言实现,所述分布式锁包括锁名称、锁唯一标识、加锁次数、过期时间。
9.一种基于分布式锁的业务处理装置,其特征在于,所述装置包括至少一个处理器以及至少一个存储器;
所述至少一个存储器用于存储计算机指令;
所述至少一个处理器用于执行所述计算机指令中的至少部分指令以实现如权利要求1~4中任意一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述存储介质存储计算机指令,当计算机读取存储介质中的计算机指令后,计算机运行如权利要求1~4中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211684559.1A CN116128493A (zh) | 2022-12-27 | 2022-12-27 | 基于分布式锁的业务处理方法、系统、装置及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211684559.1A CN116128493A (zh) | 2022-12-27 | 2022-12-27 | 基于分布式锁的业务处理方法、系统、装置及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116128493A true CN116128493A (zh) | 2023-05-16 |
Family
ID=86305781
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211684559.1A Pending CN116128493A (zh) | 2022-12-27 | 2022-12-27 | 基于分布式锁的业务处理方法、系统、装置及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116128493A (zh) |
-
2022
- 2022-12-27 CN CN202211684559.1A patent/CN116128493A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7058950B2 (en) | Callback event listener mechanism for resource adapter work executions performed by an application server thread | |
US8418191B2 (en) | Application flow control apparatus | |
EP1696611A1 (en) | Server data queuing system and method | |
CN109064327B (zh) | 一种智能合约处理方法、装置及设备 | |
CN105700939A (zh) | 一种分布式系统中多线程同步的方法和系统 | |
US6928585B2 (en) | Method for mutual computer process monitoring and restart | |
JPH04308961A (ja) | 占有されたプロセスの同期ロックの状態を通知するための手段及び装置 | |
US20160335135A1 (en) | Method for minimizing lock contention among threads when tasks are distributed in multithreaded system and appratus using the same | |
US20140173583A1 (en) | Dynamically updating code without requiring processes to restart | |
CN107861715B (zh) | 一种业务组建系统及方法 | |
CN112148480A (zh) | 基于多线程的任务处理方法、装置、设备及存储介质 | |
CN107766131B (zh) | 任务调度方法和装置 | |
CN112015563A (zh) | 消息队列切换方法、装置、电子设备及存储介质 | |
CN116128493A (zh) | 基于分布式锁的业务处理方法、系统、装置及介质 | |
CN115499493A (zh) | 异步事务处理方法、装置、存储介质及计算机设备 | |
CN107632893B (zh) | 消息队列处理方法及装置 | |
CN112464176B (zh) | 一种权限管理方法、装置、电子设备及存储介质 | |
CN115269136A (zh) | 一种异构多核平台分区操作系统安全调度方法及系统 | |
CN113703831A (zh) | 一种实现业务幂等的方法、装置、设备和介质 | |
CN112596915A (zh) | 一种分布式锁调度方法、装置、设备及介质 | |
CN112612582B (zh) | 信号量功能实现方法和装置 | |
EP3070610B1 (en) | Information processing device, control method thereof, and recording medium | |
CN110879747B (zh) | 资源管理方法及装置 | |
CN113220495B (zh) | 一种进程异常事件处理方法、装置、电子设备及存储介质 | |
CN115202884B (zh) | 基于轮询的高性能系统的加解读写锁的方法及应用 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |