CN114036164A - 一种乐观锁和悲观锁组合的高并发交易加锁方法及*** - Google Patents
一种乐观锁和悲观锁组合的高并发交易加锁方法及*** Download PDFInfo
- Publication number
- CN114036164A CN114036164A CN202111322477.8A CN202111322477A CN114036164A CN 114036164 A CN114036164 A CN 114036164A CN 202111322477 A CN202111322477 A CN 202111322477A CN 114036164 A CN114036164 A CN 114036164A
- Authority
- CN
- China
- Prior art keywords
- distributed
- lock
- pessimistic
- pessimistic lock
- transaction request
- 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
- 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/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种乐观锁和悲观锁组合的高并发交易加锁方法及***,包括建立分布式悲观锁配置文件并根据配置文件判断分布式悲观锁的启用状态,根据检查状态适时的对交易请求添加分布式悲观锁,在数据库乐观锁基础之上,额外增加一个分布式悲观锁,并动态的调整加锁时间,在业务逻辑准入之前进行悲观锁的逻辑控制,避免了资源的浪、减少了对组件的压力,可以实现更优的性能且非功能的***消耗更小;通过乐观锁与悲观锁的组合,充分发挥两者的优点,并避免了两者的缺陷,在保证数据一致性的同时提高了***的稳定性和可用性。
Description
技术领域
本发明涉及分布式数据处理及自动程序设计技术领域,尤其涉及一种乐观锁和悲观锁组合的高并发交易加锁方法及***。
背景技术
近年来,双十一等各种促销节日,导致消费还款等交易量激增,同一个客户的同一时刻交易量存在高并发的问题,为了处理高并发交易,大部分B2C***采用的是分布式***缓解机器的处理压力,在数据库操作层面往往采用的是分库分表,不同的数据根据不同的分区键(shardingkey)和哈希算法对交易进行路由区分,将不同的数据分别对应到不同的数据库和不同的数据库表中,这样解决了数据过于集中单一数据库压力太大的情况。另外,由于数据库的处理速度有限,对于同一条记录如果并发量太大可能会导致脏数据问题,因此通常采用数据库的乐观锁去防止脏数据问题。但是这样也会引入新的问题,当消费交易并发量特别大的时候,交易成功率(时间段内,交易成功的笔数除以交易总共笔数)会下降,即***交易可用性会降低,并且没有一种等待机制,让客户的请求能够在***空闲的时候再继续处理请求,而是直接报错,这样客户的体验往往会降低。
悲观锁,是指具有强烈排他性独占性,对数据被外界修改持有保守态度,使得数据在处理过程中一直处于锁定状态,直到数据修改完毕才会释放锁。乐观锁,相对于悲观锁,其采取了更加乐观和宽松的加锁机制,只在事务修改数据时对数据进行校验和判断,不会对数据和资源一直加锁。目前,在处理高并发维护交易,在数据库操作层面上使用乐观锁是常用的控制维护交易一致性的方式之一,这种方式采用的是使用更新后的版本号进行对比。目前采用的服务框架或者其他技术框架,大部分在处理维护交易的时候,为了保证维护操作的一致性,通常会使用面向切面编程技术,对某些特定命名的方法作为一个事务统一处理,当处理客户维护的一条请求记录A时,该条记录的版本号会加一,***并没有提交任务,此时另外一个维护请求同样可能会维护记录A。版本号控制方法,在维护之前,会校验将要维护的版本号和数据库中已存在的版本号是否是相同,如果相同就允许维护,否则会抛异常,通过这种方式来控制高并发下数据库提交的脏数据问题。除此之外,对于单体***的高并发***,还有利用多线程的方式进行加锁,比如说采用同步锁、信号量、特殊域的变量、阻塞队列等常用的多线程中的方式对并发信号进行加锁,这样也能解决单体***高并发的问题。
另外,在其他公司或者业界,在处理高并发的时候,也有采用其他的悲观锁方案。比如有数据库操作层面上设置一个信号量来进行加锁,但是这种加锁方式增加了数据库的读写次数;还有通过其他开源框架如zookeeper或者redission来进行分布式锁,这些方式往往过于依赖框架不够灵活。其他业界的悲观锁方案,比如单体***的高并发***,利用多线程工具进行加锁这种方式有一定的限制,也就是只能对于单体***使用比较方便,但是对于分布式***该方式无法采用。
另一种解决方案时采用交易失败重试机制,在数据库事务已经回滚,交易返回后处理逻辑中,增加对返回异常的判断,尝试重新执行交易的全部处理逻辑。优点是无需引入第三方中间件,绝大部分交易处理效率不会受到影响,缺点是交易整体处理流程变得复杂,交易链变长,如果交易并发度变大时,容易造成***资源过度浪费。
如果采用数据库层面的加锁,对于一些特定应用场景,如金融交易来说,由于要对其他组件或者第三方进行调用,所以往往已经进入业务逻辑而且已经做了各种校验和远程处理操作。因此,如果在数据库层面进行悲观锁控制,这样对己方组件和对方组件***的数据库会造成大量的压力,甚至当冲突量太大的时候会出现数据库崩溃,所以该方法不是个很好的方式。其他的悲观锁方案,比如其他开源框架zookeeper和reddision,由于参数无法很好的调节,缺失了动态灵活性,所以并不能适应高并发交易的验证处理。
发明内容
为解决现有技术的不足,本发明提出一种乐观锁和悲观锁组合的高并发交易加锁方法及***,在数据库乐观锁基础之上,额外增加一个分布式悲观锁,并动态的调整加锁时间,在业务逻辑准入之前进行悲观锁的逻辑控制,避免了资源的浪费、减少了对组件的压力,可以实现更优的性能且非功能的***消耗更小;通过乐观锁与悲观锁的组合,充分发挥两者的优点,并避免了两者的缺陷,在保证数据一致性的同时提高了***的稳定性和可用性。
为实现以上目的,本发明所采用的技术方案包括:
一种乐观锁和悲观锁组合的高并发交易加锁方法,其特征在于,包括:
S1、建立分布式悲观锁配置文件,所述分布式悲观锁配置文件至少包括分布式悲观锁总开关和对应各交易码的分布式悲观锁标志位;
S2、获取交易请求,所述交易请求至少包括该交易对应的交易码和客户号;
S3、检查当前分布式悲观锁总开关状态;当分布式悲观锁总开关状态为关闭时,不对交易请求添加分布式悲观锁,并将交易请求标记为待处理;
S4、当分布式悲观锁总开关状态为开启时,继续检查交易请求对应的交易码的分布式悲观锁标志位状态;当分布式悲观锁标志位状态为不启用时,不对交易请求添加分布式悲观锁,并将交易请求标记为待处理;
S5、当分布式悲观锁标志位状态为启用时,继续对当前分布式缓存进行流控判断,当判断分布式缓存存在故障时,不对交易请求添加分布式悲观锁,并将交易请求标记为待处理;
S6、当判断分布式缓存不存在故障时,执行对交易请求添加分布式悲观锁的操作;
S7、检查分布式悲观锁是否添加成功;当分布式悲观锁添加成功时,将交易请求标记为已加锁;当分布式悲观锁添加不成功时,将交易请求标记为待处理;
S8、标记后的交易请求继续进行交易业务处理逻辑;当交易请求标记为已加锁时,对交易请求执行悲观锁处理逻辑;当交易请求标记为待处理时,对交易请求添加乐观锁,并执行乐观锁处理逻辑。
进一步地,所述方法还包括:
S9、当标记为已加锁的交易请求反馈处理完成后,对该交易请求添加的分布式悲观锁进行解锁操作。
进一步地,所述对当前分布式缓存进行流控判断包括:
验证连续访问分布式缓存的失败次数是否超过预设阈值,当连续访问分布式缓存的失败次数超过预设阈值时判断分布式缓存存在故障。
进一步地,所述步骤S6还包括:
当判断分布式缓存存在故障时,任选一个交易请求作为试探请求,并对试探请求执行添加分布式悲观锁的操作;
当对试探请求的分布式悲观锁添加成功时,清空连续访问分布式缓存的失败次数。
进一步地,所述执行对交易请求添加分布式悲观锁的操作包括:
获取交易请求对应的客户号,调用分布式缓存的put方法对该交易请求对应的客户号添加分布式悲观锁,并设置分布式悲观锁的存活时间。
进一步地,所述检查分布式悲观锁是否添加成功包括:
验证分布式缓存的put方法是否调用成功,当调用成功时,分布式悲观锁添加成功,否则添加不成功。
进一步地,所述步骤S7还包括:
当分布式悲观锁添加不成功时,根据预设的等待间隔和最大重试次数重新执行对交易请求添加分布式悲观锁的操作;
在最大重试次数内成功添加分布式悲观锁时,将交易请求标记为已加锁;当超过最大重试次数分布式悲观锁仍然添加不成功时,将交易请求标记为待处理。
本发明还涉及一种乐观锁和悲观锁组合的高并发交易加锁***,其特征在于,包括:
配置文件管理模块,用于建立分布式悲观锁配置文件;
分布式悲观锁状态控制模块,用于检查当前分布式悲观锁总开关状态和交易请求对应的交易码的分布式悲观锁标志位状态;
分布式缓存验证模块,用于对当前分布式缓存进行流控判断;
分布式悲观锁添加模块,用于执行对交易请求添加分布式悲观锁的操作并检查分布式悲观锁是否添加成功。
本发明还涉及一种计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述的方法。
本发明还涉及一种电子设备,其特征在于,包括处理器和存储器;
所述存储器,用于存储分布式悲观锁配置文件和交易请求;
所述处理器,用于通过调用分布式悲观锁配置文件和交易请求,执行上述的方法。
本发明的有益效果为:
采用本发明所述乐观锁和悲观锁组合的高并发交易加锁方法及***,在数据库乐观锁基础之上,通过配置文件进行多种验证,额外增加一个分布式悲观锁,并动态的调整加锁时间,在业务逻辑准入之前进行悲观锁的逻辑控制,避免了资源的浪费、减少了对组件的压力,可以实现更优的性能且非功能的***消耗更小;通过乐观锁与悲观锁的组合,充分发挥两者的优点,并避免了两者的缺陷,在保证数据一致性的同时提高了***的稳定性和可用性。
附图说明
图1为本发明乐观锁和悲观锁组合的高并发交易加锁方法流程示意图。
图2为本发明乐观锁和悲观锁组合的高并发交易加锁***结构示意图。
具体实施方式
为了更清楚的理解本发明的内容,将结合附图和实施例详细说明。
对于数据库部分,本发明技术方案采用了乐观锁的方式对同一个分区键shardingkey的记录进行加锁。由于数据库的处理速度比较慢,当***处于并发情况时,很可能两条修改请求同时到达数据库,这时候,我们需要针对两条修改请求依次去更新或者修改记录,所以可以对数据库的记录设计一个版本号,每次修改这条记录的时候都会对该版本号数值加一,每次提交修改或者更新请求的时候,都应该校验该版本号,如果版本号不是数据库里最大(最新)的,则表示该次更新请求更新的不是数据库里最新的数据,就会对该次请求拒绝;如果校验此时的版本号是数据库里最大(最新)的,则表示更新请求更新的是数据库里最新的数据,更新成功。通过数据库的乐观锁,***可以控制并发时产生的脏数据问题,从而解决了数据库层的数据不一致,但是仅仅通过数据库层的乐观锁,在并发量很大的场景下,***的失败率会比较高,因为乐观锁会根据版本号拒绝不是最新记录的提交请求,虽然保证了提交数据一致性,但是对客户的体验并不是很好。
在数据库乐观锁基础之上,本发明还增加一个分布式悲观锁,并动态的调整加锁时间。对于交易服务应用***,可以优选的设计前处理的处理链,通过配置文件来动态配置需要进行在业务逻辑之前的处理逻辑。例如可以把处理链设计为java类的对象,在处理栈文件中增加交易处理链,将交易对应的分布式悲观锁控制处理栈配置在处理栈中。交易请求到达应用***后,通过交易的前处理逻辑获取分布式悲观锁,执行悲观锁处理逻辑。悲观锁处于授权业务逻辑处理之前的前处理链中,成功获取悲观锁之后,进行后续处理;如果没有获取悲观锁或者超过等待时间、重试次数,则仍然可以不使用悲观锁进行后续处理。
具体的,本发明第一方面涉及一种步骤流程如图1所示的乐观锁和悲观锁组合的高并发交易加锁方法,包括:
S1、建立分布式悲观锁配置文件,所述分布式悲观锁配置文件至少包括分布式悲观锁总开关和对应各交易码的分布式悲观锁标志位。根据配置文件中分布式悲观锁总开关和交易码的分布式悲观锁标志位,来决定是否执行分布式悲观锁加锁处理逻辑,只有在总开关打开且标志位启用情况下才会执行悲观锁的加锁处理逻辑,且配置参数能够动态生效。一种典型的配置文件和参数可以包括:
基于redis分布式锁的相关属性参数
命名为envvariables.properties
#悲观锁最长等待时间:
pessimisticLockMaxWaitSecond=1000
#悲观锁最长超时时间:
pessimisticLockMaxExpireSecond=3000
#悲观锁总开关:
pessimisticLockSwitch=False
#分布式悲观锁标志位:
pessimisticLockOdaSwitch=True
#RedisMaster名称:
redisMasterName=mymaster
#悲观锁最大连续异常笔数:
pessimisticLockMaxContinueFailNum=10
#悲观锁最大尝试获取笔数:
pessimisticLockMaxAttemptNum=20
#悲观锁控制交易码列表----针对希望进行锁控制的交易进行开关设置:
pessimisticLockService.A02XXXXX=True
pessimisticLockService.A02XXXXX=True
pessimisticLockService.XXXXX=True
AP部署集群机器redis配置情况:
命名为redis.properties:
by18cisauap1001.srvInfoList=${redis.ip}
by18cisauap1002.srvInfoList=${redis.ip}
…
S2、获取交易请求,所述交易请求至少包括该交易对应的交易码和客户号。
S3、检查当前分布式悲观锁总开关状态;当分布式悲观锁总开关状态为关闭时,不对交易请求添加分布式悲观锁,并将交易请求标记为待处理。其中,标记为待处理的交易请求即为不执行分布式悲观锁添加逻辑的请求,但仍然可以正常执行乐观锁的业务处理逻辑。
S4、当分布式悲观锁总开关状态为开启时,继续检查交易请求对应的交易码的分布式悲观锁标志位状态;当分布式悲观锁标志位状态为不启用时,不对交易请求添加分布式悲观锁,并将交易请求标记为待处理。
S5、当分布式悲观锁标志位状态为启用时,继续对当前分布式缓存进行流控判断,包括验证连续访问分布式缓存的失败次数是否超过预设阈值,当连续访问分布式缓存的失败次数超过预设阈值时判断分布式缓存存在故障,不对交易请求添加分布式悲观锁,并将交易请求标记为待处理。如果分布式缓存出现故障,可以依靠动态流控进行动态隔离和恢复对分布式缓存的访问,防止由于分布式缓存故障而导致整体交易处理时间变长。上述的分布式缓存,优选的采用redis连接访问。当redis连接访问出现故障,分布式缓存出现大面积地访问失败异常后,需要开启流控控制开关,动态地隔离分布式锁加锁及解锁机制,将相应地分布式缓存访问逻辑剔除掉,直接执行交易的处理逻辑,防止由于分布式缓存的故障,而导致交易服务器出现故障、出现故障蔓延、交易整体响应时间变长等现象。
S6、当判断分布式缓存不存在故障时,执行对交易请求添加分布式悲观锁的操作,包括获取交易请求对应的客户号,调用分布式缓存的put方法对该交易请求对应的客户号添加分布式悲观锁,并设置分布式悲观锁的存活时间;当判断分布式缓存存在故障时,任选一个交易请求作为试探请求,并对试探请求执行添加分布式悲观锁的操作;当对试探请求的分布式悲观锁添加成功时,清空连续访问分布式缓存的失败次数。可采取连续失败策略对分布式缓存进行动态隔离,比如连续访问分布式缓存失败笔数超过20笔,将隔离接下来访问分布式缓存的2000笔请求,2000笔请求过后,再尝试使用分布式缓存进行加锁;或可以采用其他策略,如尝试访问获得分布式锁发生异常超过10次,则发生熔断处理,既之后获取的交易请求不再尝试获得分布式悲观锁,但会选择一笔试探交易尝试添加悲观锁,检查确认分布式缓存是否恢复正常。分布式缓存能够保证对于同一个客户的添加悲观锁请求,只有一个线程能够操作成功。
S7、检查分布式悲观锁是否添加成功,特别是验证分布式缓存的put方法是否调用成功;当分布式悲观锁添加成功时,将交易请求标记为已加锁,对于加锁成功的交易请求,可以采用在内部数据交换区设置加锁成功标志位的方式将交易请求标记为已加锁,并更新相应地监控数据,执行交易的处理逻辑;当分布式悲观锁添加不成功时,根据预设的等待间隔和最大重试次数重新执行对交易请求添加分布式悲观锁的操作;在最大重试次数内成功添加分布式悲观锁时,将交易请求标记为已加锁;当超过最大重试次数分布式悲观锁仍然添加不成功时,将交易请求标记为待处理,如果加锁失败,可以优选的判断是否有相应的分布式缓存访问异常抛出,如果有异常抛出,进行异常捕获,更新监控数据,再执行后续的交易处理逻辑。优选的,可以将预设的等待间隔(线程等待的时间)设置为不等的,例如第一次等待200ms,第二次等待150ms,第三次等待100ms,可以降低等待线程‘饿死’现象发生的概率。在访问分布式缓存的过程中,做好相应的连接超时、读超时控制等超时控制,并做好多个分布式缓存集群的路由工作。
S8、标记后的交易请求继续进行交易业务处理逻辑;当交易请求标记为已加锁时,对交易请求执行悲观锁处理逻辑;当交易请求标记为待处理时,对交易请求添加乐观锁,并执行乐观锁处理逻辑。
S9、当标记为已加锁的交易请求反馈处理完成后,对该交易请求添加的分布式悲观锁进行解锁操作。交易后处理分布式悲观锁解锁处理流程是常规的技术手段,如果在交易前处理中对交易请求进行了加锁,无论交易成功或者失败,都需进行相应地解锁操作,即删除对应的客户号缓存数据。
分布式缓存的服务器优选的采用master-slave模式,一台master服务器,n台slave服务器,master服务器负责接收相应地读写请求,当master服务器宕机后,其中的一台slave服务器接管master的工作,接收相应的读写请求。
不同语言对redis访问控制类不尽相同,本发明技术方案并不做具体限制。但是可以优选的对redis的连接对象和数据收集对象进行封装,实现一个RedisAccessor的接口或者类,提供如下特征:1)提供对redis的访问方法putIfNotExist(key,value)的方法,该方法目的是将key-value键值对***redis,假如制定的key已经存在则不作操作,返回0;否则指定的key***redis并且返回1;2)提供replace等方法,将key-value更新入redis;3)提供remove_data方法,将key-value从redis中删除,成功删除返回1,删除失败或者异常返回0。
本发明对于分布式悲观锁的添加,实现了动态尝试获取的效果,具体可执行下列步骤:
1.通过putIfNotExist(key,value)的方法***键值对,并且尝试获取悲观锁,如果获取成功则在交换区中设置悲观锁获取标志位;
2.获取失败情况下,计算***时间,计算每次尝试获取悲观锁的基准时间,这里计算基准时间的方法和标准因人而异,大致上每次休眠时间越来越短,并且让线程休眠计算出的基准时间;
3.计算获取悲观锁的尝试次数和总共的等待时间,如果获取锁尝试次数超过预设最大次数,或者总共等待时间超过预设的等待时间则跳出循环。如果在循环的过程中成功获取则继续执行成功逻辑。
对于同一个客户号的交易请求,往往具有相同key值,在这种并发交易线程,并没有采用队列排队模式按照先到先服务原则依次获取到分布式悲观锁,新老交易请求同一个时间点的加锁请求,获取到分布式锁的概率是相同的,如果同一个客户的交易请求并发量很大,部分线程会产生“饿死”现象,即获取到的锁的时间会变长。如果引用排队机制,依次来获取分布式锁,可以引用分布式缓存的队列缓存数据结构来实现,但是技术复杂度和对分布式缓存的依赖度会更高,根据现有的使用数据来看,同一个客户的交易请求并发度并不是大到不能容忍,引用排队机制并非完全必要。
采用分布式缓存多集群多活模式来提高分布式悲观锁的整体高可用性,保证处理效率。假设存在有两套分布式缓存集群同时对外提供服务,可以基于交易请求客户号对应的篮子号,将客户号均匀地分布在两套集群中,第一套集群保存客户号对应的篮子号%2=0的客户号列表,第二套集群保存客户号对应的篮子号%2=1的客户号列表。分布式锁在进行分布式缓存访问时,根据数据的分配规则,访问对应的分布式缓存集群。
在其中的一套分布式缓存集群失效时,可采用人工干预,或者事件通知模式,将所有的访问请求转移到另外一套集群上去。在分布式缓存集群迁移的过程中,由于缓存存放的数据都是些临时数据,而无需做数据迁移工作。
本发明另一方面还涉及一种乐观锁和悲观锁组合的高并发交易加锁***,其结构如图2所示,包括:
配置文件管理模块,用于建立分布式悲观锁配置文件;
分布式悲观锁状态控制模块,用于检查当前分布式悲观锁总开关状态和交易请求对应的交易码的分布式悲观锁标志位状态;
分布式缓存验证模块,用于对当前分布式缓存进行流控判断;
分布式悲观锁添加模块,用于执行对交易请求添加分布式悲观锁的操作并检查分布式悲观锁是否添加成功。
通过使用该***,能够执行上述的运算处理方法并实现对应的技术效果。
本发明的实施例还提供能够实现上述实施例中的方法中全部步骤的一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的方法的全部步骤。
本发明的实施例还提供一种用于执行上述方法的电子设备,作为该方法的实现装置,所述电子设备至少具备有处理器和存储器,特别是该存储器上存储有执行方法所需的数据和相关的计算机程序,例如分布式悲观锁配置文件和交易请求等,并通过由处理器调用存储器中的数据、程序执行实现方法的全部步骤,并获得对应的技术效果。
优选的,该电子设备可以包含有总线架构,总线可以包括任意数量的互联的总线和桥,总线将包括由一个或多个处理器和存储器的各种电路链接在一起。总线还可以将诸如***设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和接收器和发送器之间提供接口。接收器和发送器可以是同一个元件,即收发机,提供用于在传输介质上与各种其他***通信的单元。处理器负责管理总线和通常的处理,而存储器可以被用于存储处理器在执行操作时所使用的数据。
额外的,所述电子设备还可以进一步包括通信模块、输入单元、音频处理器、显示器、电源等部件。其所采用的处理器(或称为控制器、操作控件)可以包括微处理器或其他处理器装置和/或逻辑装置,该处理器接收输入并控制电子设备的各个部件的操作;存储器可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种,可储存上述有关的数据信息,此外还可存储执行有关信息的程序,并且处理器可执行该存储器存储的该程序,以实现信息存储或处理等;输入单元用于向处理器提供输入,例如可以为按键或触摸输入装置;电源用于向电子设备提供电力;显示器用于进行图像和文字等显示对象的显示,例如可为LCD显示器。通信模块即为经由天线发送和接收信号的发送机/接收机。通信模块(发送机/接收机)耦合到处理器,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)还经由音频处理器耦合到扬声器和麦克风,以经由扬声器提供音频输出,并接收来自麦克风的音频输入,从而实现通常的电信功能。音频处理器可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器还耦合到中央处理器,从而使得可以通过麦克风能够在本机上录音,且使得可以通过扬声器来播放本机上存储的声音。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的***。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令***的制造品,该指令***实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
以上所述仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换等都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。
Claims (10)
1.一种乐观锁和悲观锁组合的高并发交易加锁方法,其特征在于,包括:
S1、建立分布式悲观锁配置文件,所述分布式悲观锁配置文件至少包括分布式悲观锁总开关和对应各交易码的分布式悲观锁标志位;
S2、获取交易请求,所述交易请求至少包括该交易对应的交易码和客户号;
S3、检查当前分布式悲观锁总开关状态;当分布式悲观锁总开关状态为关闭时,不对交易请求添加分布式悲观锁,并将交易请求标记为待处理;
S4、当分布式悲观锁总开关状态为开启时,继续检查交易请求对应的交易码的分布式悲观锁标志位状态;当分布式悲观锁标志位状态为不启用时,不对交易请求添加分布式悲观锁,并将交易请求标记为待处理;
S5、当分布式悲观锁标志位状态为启用时,继续对当前分布式缓存进行流控判断,当判断分布式缓存存在故障时,不对交易请求添加分布式悲观锁,并将交易请求标记为待处理;
S6、当判断分布式缓存不存在故障时,执行对交易请求添加分布式悲观锁的操作;
S7、检查分布式悲观锁是否添加成功;当分布式悲观锁添加成功时,将交易请求标记为已加锁;当分布式悲观锁添加不成功时,将交易请求标记为待处理;
S8、标记后的交易请求继续进行交易业务处理逻辑;当交易请求标记为已加锁时,对交易请求执行悲观锁处理逻辑;当交易请求标记为待处理时,对交易请求添加乐观锁,并执行乐观锁处理逻辑。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
S9、当标记为已加锁的交易请求反馈处理完成后,对该交易请求添加的分布式悲观锁进行解锁操作。
3.如权利要求1所述的方法,其特征在于,所述对当前分布式缓存进行流控判断包括:
验证连续访问分布式缓存的失败次数是否超过预设阈值,当连续访问分布式缓存的失败次数超过预设阈值时判断分布式缓存存在故障。
4.如权利要求3所述的方法,其特征在于,所述步骤S6还包括:
当判断分布式缓存存在故障时,任选一个交易请求作为试探请求,并对试探请求执行添加分布式悲观锁的操作;
当对试探请求的分布式悲观锁添加成功时,清空连续访问分布式缓存的失败次数。
5.如权利要求1所述的方法,其特征在于,所述执行对交易请求添加分布式悲观锁的操作包括:
获取交易请求对应的客户号,调用分布式缓存的put方法对该交易请求对应的客户号添加分布式悲观锁,并设置分布式悲观锁的存活时间。
6.如权利要求5所述的方法,其特征在于,所述检查分布式悲观锁是否添加成功包括:
验证分布式缓存的put方法是否调用成功,当调用成功时,分布式悲观锁添加成功,否则添加不成功。
7.如权利要求6所述的方法,其特征在于,所述步骤S7还包括:
当分布式悲观锁添加不成功时,根据预设的等待间隔和最大重试次数重新执行对交易请求添加分布式悲观锁的操作;
在最大重试次数内成功添加分布式悲观锁时,将交易请求标记为已加锁;当超过最大重试次数分布式悲观锁仍然添加不成功时,将交易请求标记为待处理。
8.一种乐观锁和悲观锁组合的高并发交易加锁***,其特征在于,包括:
配置文件管理模块,用于建立分布式悲观锁配置文件;
分布式悲观锁状态控制模块,用于检查当前分布式悲观锁总开关状态和交易请求对应的交易码的分布式悲观锁标志位状态;
分布式缓存验证模块,用于对当前分布式缓存进行流控判断;
分布式悲观锁添加模块,用于执行对交易请求添加分布式悲观锁的操作并检查分布式悲观锁是否添加成功。
9.一种计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法。
10.一种电子设备,其特征在于,包括处理器和存储器;
所述存储器,用于存储分布式悲观锁配置文件和交易请求;
所述处理器,用于通过调用分布式悲观锁配置文件和交易请求,执行权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111322477.8A CN114036164A (zh) | 2021-11-09 | 2021-11-09 | 一种乐观锁和悲观锁组合的高并发交易加锁方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111322477.8A CN114036164A (zh) | 2021-11-09 | 2021-11-09 | 一种乐观锁和悲观锁组合的高并发交易加锁方法及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114036164A true CN114036164A (zh) | 2022-02-11 |
Family
ID=80137019
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111322477.8A Pending CN114036164A (zh) | 2021-11-09 | 2021-11-09 | 一种乐观锁和悲观锁组合的高并发交易加锁方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114036164A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115168341A (zh) * | 2022-06-17 | 2022-10-11 | 北京结慧科技有限公司 | 一种业务处理方法、***、介质及设备 |
-
2021
- 2021-11-09 CN CN202111322477.8A patent/CN114036164A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115168341A (zh) * | 2022-06-17 | 2022-10-11 | 北京结慧科技有限公司 | 一种业务处理方法、***、介质及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11321303B2 (en) | Conflict resolution for multi-master distributed databases | |
JP7142152B2 (ja) | トランザクション処理方法、装置、機器並びにコンピュータプログラム | |
US11899684B2 (en) | System and method for maintaining a master replica for reads and writes in a data store | |
CN111338766B (zh) | 事务处理方法、装置、计算机设备及存储介质 | |
US10360113B2 (en) | Transaction recovery in a transaction processing computer system employing multiple transaction managers | |
CN107077382B (zh) | 在多租户应用服务器环境中进行事务恢复的***和方法 | |
WO2018103318A1 (zh) | 分布式事务处理方法和*** | |
US9116862B1 (en) | System and method for data replication using a single master failover protocol | |
US8510334B2 (en) | Lock manager on disk | |
US8676760B2 (en) | Maintaining data integrity in data servers across data centers | |
US20100023564A1 (en) | Synchronous replication for fault tolerance | |
CN108932338B (zh) | 数据更新方法、装置、设备和介质 | |
CN104793988A (zh) | 跨数据库分布式事务的实现方法和装置 | |
US20190220361A1 (en) | Monitoring Containers In A Distributed Computing System | |
US20140081927A1 (en) | Data node fencing in a distributed file system | |
CN110597910A (zh) | 一种异地数据同步方法、装置和*** | |
US7996360B2 (en) | Coordinating updates to replicated data | |
US8843581B2 (en) | Live object pattern for use with a distributed cache | |
WO2021103499A1 (zh) | 一种基于多活数据中心的流量切换方法及装置 | |
EP4213038A1 (en) | Data processing method and apparatus based on distributed storage, device, and medium | |
CN112039970B (zh) | 一种分布式业务锁服务方法、服务端、***及存储介质 | |
CN110413687B (zh) | 基于节点互证校验的分布式事务故障处理方法及相关设备 | |
CN114925084B (zh) | 分布式事务处理方法、***、设备及可读存储介质 | |
WO2022111188A1 (zh) | 事务处理方法、***、装置、设备、存储介质及程序产品 | |
US11449241B2 (en) | Customizable lock management for distributed resources |
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 |