CN113553196A - 业务请求的处理方法、装置、计算机设备和存储介质 - Google Patents
业务请求的处理方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN113553196A CN113553196A CN202110720592.4A CN202110720592A CN113553196A CN 113553196 A CN113553196 A CN 113553196A CN 202110720592 A CN202110720592 A CN 202110720592A CN 113553196 A CN113553196 A CN 113553196A
- Authority
- CN
- China
- Prior art keywords
- lock
- service request
- service
- request
- local
- 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
- 238000003672 processing method Methods 0.000 title abstract description 6
- 238000000034 method Methods 0.000 claims abstract description 59
- 238000012545 processing Methods 0.000 claims abstract description 51
- 230000006870 function Effects 0.000 claims description 20
- 238000004590 computer program Methods 0.000 claims description 12
- 230000003993 interaction Effects 0.000 abstract description 12
- 230000008569 process Effects 0.000 description 16
- 238000010586 diagram Methods 0.000 description 7
- 230000001360 synchronised effect Effects 0.000 description 6
- 230000000694 effects Effects 0.000 description 5
- 238000007726 management method Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/465—Distributed object oriented systems
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请涉及一种业务请求的处理方法、装置、计算机设备和存储介质。所述方法包括:接收用户终端发送的业务请求;根据所述业务请求,获取当前节点对应的本地锁;若获取本地锁成功,则发送命令至第三方组件获取对应的全局锁;若获取全局锁成功,则对所述业务请求进行处理。采用本方法能够极大的减少了与Redis的网络IO交互,从而有效降低了Redis的服务压力。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种业务请求的处理方法、装置、计算机设备和存储介质。
背景技术
随着计算机技术的发展,在分布式环境,高并发请求量的环境下,云服务治理成为运维管理的难点。如何有效缓解大量的请求给服务器带来服务压力成为亟需解决的问题。
然而,目前业务请求的处理方式中,每个用户请求都涉及到与Redis(RemoteDictionary Server,即远程字典服务)进行网络IO交互,网络IO一般都是比较耗时的一个过程,大量的请求容易给Redis带来较高的服务压力。
发明内容
基于此,有必要针对上述技术问题,提供一种能够降低服务压力的业务请求的处理方法、装置、计算机设备和存储介质。
一种业务请求的处理方法,所述方法包括:
接收用户终端发送的业务请求;
根据所述业务请求,获取当前节点对应的本地锁;
若获取本地锁成功,则发送命令至第三方组件获取对应的全局锁;
若获取全局锁成功,则对所述业务请求进行处理。
在其中一个实施例中,所述根据所述业务请求,获取当前节点对应的本地锁之后,所述方法还包括:
若获取本地锁失败,则返回请求失败的结果至所述用户终端。
在其中一个实施例中,所述获取当前节点对应的本地锁的方式包括:
通过调用Lock函数获取当前节点对应的本地锁。
在其中一个实施例中,所述若获取本地锁成功,则发送命令至第三方组件获取对应的全局锁包括:
若获取本地锁成功,则基于所述业务请求调用所述第三方组件中用于获取全局锁命令的接口,所述接口用于返回获取全局锁对应的结果;
所述若获取全局锁成功,则对所述业务请求进行处理,包括:
当接收到所述接口返回的结果为第一预设值,则表示获取全局锁成功,对所述业务请求进行处理。
在其中一个实施例中,所述方法还包括:
当接收到所述接口返回的结果为第二预设值,则表示获取全局锁失败,返回请求失败的结果至所述用户终端。
在其中一个实施例中,所述基于所述业务请求调用所述第三方组件中用于获取全局锁命令的接口包括:
基于所述业务请求调用所述第三方组件中SETNX key val命令的接口。
在其中一个实施例中,所述发送请求至第三方组件获取对应的全局锁之后,所述方法还包括:
若获取全局锁失败,则返回请求失败的结果至所述用户终端。
一种业务请求的处理装置,所述装置包括:
接收模块,用于接收用户终端发送的业务请求;
获取模块,用于根据所述业务请求,获取当前节点对应的本地锁;
发送模块,用于若获取本地锁成功,则发送命令至第三方组件获取对应的全局锁;
处理模块,用于若获取全局锁成功,则对所述业务请求进行处理。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
接收用户终端发送的业务请求;
根据所述业务请求,获取当前节点对应的本地锁;
若获取本地锁成功,则发送命令至第三方组件获取对应的全局锁;
若获取全局锁成功,则对所述业务请求进行处理。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
接收用户终端发送的业务请求;
根据所述业务请求,获取当前节点对应的本地锁;
若获取本地锁成功,则发送命令至第三方组件获取对应的全局锁;
若获取全局锁成功,则对所述业务请求进行处理。
上述业务请求的处理方法、装置、计算机设备和存储介质,通过接收用户终端发送的业务请求,根据业务请求,获取当前节点对应的本地锁,若获取本地锁成功,则发送命令至第三方组件获取对应的全局锁,若获取全局锁成功,则对业务请求进行处理。由此使得,只有本地锁获取成功后,才能获取对应的全局锁。每个节点只有一个成功获取本地锁的请求才会再去获取全局锁,大大减少了到达第三方组件的请求量,有效降低了第三方组件的服务压力。
附图说明
图1为一个实施例中业务请求的处理方法的应用环境图;
图2为一个实施例中业务请求的处理方法的流程示意图;
图3为另一个实施例中业务请求的处理方法的流程示意图;
图4为一个实施例中对用户请求进行处理的流程示意图;
图5为一个实施例中业务请求的处理装置的结构框图;
图6为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的业务请求的处理方法,可以应用于如图1所示的应用环境中。其中,用户终端102通过网络与服务器集群104通过网络进行通信。服务器集群104接收用户终端发送的业务请求,服务器集群104根据业务请求,获取当前节点对应的本地锁,若服务器集群104获取本地锁成功,则发送命令至第三方组件获取对应的全局锁,若服务器集群104获取全局锁成功,则对业务请求进行处理。其中,用户终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器集群104可以用多个服务器组成的服务器集群来实现。
在一个实施例中,如图2所示,提供了一种业务请求的处理方法,以该方法应用于图1中的服务器集群中的服务节点为例进行说明,包括以下步骤:
步骤202,接收用户终端发送的业务请求。
各个企业可以通过采用统一的业务管理信息平台,将企业内部以及企业外部供需链上所有的资源与信息进行统一的管理,这种集成能够消除企业内部因部门分割造成的各种信息隔阂与信息孤岛,例如,利用企业资源计划系统就可以实现对整个供应链的有效管理,ERP即(Enterprise Resource Planning)企业资源计划,是一种主要面向制造行业进行物质资源、资金资源和信息资源集成一体化管理的企业信息管理系统。具体的,在分布式服务、高并发请求量的环境下,服务器集群中的服务节点接收用户终端发送的业务请求,其中,业务请求是指用户根据不同需求在不同业务场景系统中发起的与业务功能对应的业务请求。用户可以通过在手机应用程序中或浏览器网页中输入用户名和密码的方式,登录特定场景的业务系统中,用户可以通过app(Application,应用程序)客户端或web客户端即web浏览器发起特定的业务请求,服务器集群中的服务节点可以接收到客户端通过网关发送的业务请求,业务请求中携带对应的标识信息。例如,在网上购物应用中,用户可以通过触发操作发起创建订单请求,并通过服务网关发送至服务器集群。当服务器集群接收到该客户端通过服务网关发送的创建订单请求时,则服务器集群可以根据创建订单请求中的标识信息,从服务注册中心获取与标识信息对应的可用的服务清单,调用对应的服务节点。
步骤204,根据业务请求,获取当前节点对应的本地锁。
服务器集群中的服务节点接收用户终端发送的业务请求之后,服务器集群中的服务节点可以根据业务请求,获取当前节点对应的本地锁。其中,本地锁是指从分布式系统的某个节点本地中获取锁的过程。本申请中的本地锁基于java语言特性,用于给对象和方法或者代码块加锁的处理逻辑。当锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。例如,基于java语言的功能特性,获取本地锁的方式可以包括关键字synchronized和Lock函数两种加锁方式。其中,synchronized关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。synchronized关键字包括两种用法:synchronized方法和synchronized块。Lock函数确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。例如,本实施中当服务器集群中的服务节点接收用户终端发送的业务请求之后,服务器集群中的服务节点可以根据业务请求,通过调用Lock函数的方式获取当前节点对应的本地锁,若获取本地锁失败,则直接返回请求失败的结果至对应的用户终端;若获取本地锁成功,则执行下一个环节的处理步骤。
步骤206,若获取本地锁成功,则发送命令至第三方组件获取对应的全局锁。
服务器集群中的服务节点可以根据业务请求,通过调用Lock函数的方式获取当前节点对应的本地锁。若服务器集群中的服务节点获取本地锁成功,则发送命令至第三方组件获取对应的全局锁。其中,全局锁是指从第三方组件获取锁的过程,第三方组件可以为Redis。Redis(Dictionary Server),即远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。由于Redis的高性能、使用简单、功能丰富等特点,且Redis本身在分布式服务系统中也是一个很常用的第三方组件,因此本申请中服务节点可以依赖Redis的功能,发送命令至Redis获取对应的全局锁。例如,若服务器集群中的服务节点获取本地锁成功,则发送SETNX keyval命令至Redis获取对应的全局锁,即多个服务节点都从Redis调用SETNX key val的命令API,基于获取锁的特性,只有一个服务节点能得到获取锁成功的结果,其他节点请求得到的结果都是获取锁失败。
步骤208,若获取全局锁成功,则对业务请求进行处理。
若服务器集群中的服务节点获取本地锁成功,则发送命令至第三方组件获取对应的全局锁,若服务器集群中的服务节点获取全局锁成功,则对业务请求进行处理。其中,对业务请求进行处理是指最终只有一个用户请求能成功获取到全局锁,进而处理后续的业务逻辑。例如,服务器集群中的每个服务节点获取本地锁成功之后,每个服务节点可以发送SETNX key val命令至第三方组件Redis获取对应的全局锁,即多个服务节点都从Redis调用SETNX key val的命令API,基于获取锁的特性,只有一个服务节点能得到获取锁成功的结果,其他节点请求得到的结果都是获取锁失败。其中,SETNX key val命令的含义:若给定的key已经存在,则返回0,若给定的key不存在,则把val赋值给key,并返回1。即若服务器集群中的服务节点获取全局锁成功,则对业务请求进行处理;若服务器集群中的服务节点获取全局锁失败,则返回请求失败的结果至对应的用户终端。
传统业务请求的处理方式中,每个用户请求在获取锁的逻辑时,都需要与Redis进行一次交互来获取一个全局锁,即每个业务请求获取锁的过程都涉及到一次与Redis的网络IO交互,网络IO交互是比较耗时的一个过程,所以获取锁不管成功还是失败都是比较耗时的过程,并且所有请求都需要到Redis来获取锁,大量的请求也会给Redis带来较高的服务压力。
而本实施例中,通过接收用户终端发送的业务请求,根据业务请求,获取当前节点对应的本地锁,若获取本地锁成功,则发送命令至第三方组件获取对应的全局锁,若获取全局锁成功,则对业务请求进行处理。由此使得,只有本地锁获取成功后,才能到Redis获取全局锁。这样每个节点只有一个成功获取本地锁的请求,每个节点中成功获取本地锁的请求才会再去获取全局锁,即才会涉及到与Redis的网络IO交互,所以最终需要到Redis获取全局锁的请求数量是等于服务节点数量的,极大的减少了与Redis的网络IO交互,从而有效降低了Redis的服务压力。
在一个实施例中,根据业务请求,获取当前节点对应的本地锁之后,该方法还包括获取本地锁失败的步骤,具体包括:
若获取本地锁失败,则返回请求失败的结果至用户终端。
服务器集群中的服务节点接收用户终端发送的业务请求之后,服务器集群中的服务节点可以根据业务请求,获取当前节点对应的本地锁。在分布式系统中每个服务节点可以基于java语言的功能特性,调用Lock函数在本地中获取对应的本地锁,只有本地锁获取成功后,才会发送命令至Redis获取对应的全局锁。若服务节点获取本地锁失败,则返回请求失败的结果至对应的用户终端。由于本地锁是基于java语言的功能特性,不涉及网络IO交互,所以性能是高于全局锁的,因而获取本地锁失败的用户请求,能到达一个快速失败的效果。由此使得,无需每个用户请求都与Redis进行网络IO交互获取全局锁,若用户请求在服务节点本地获取本地锁失败,则直接返回请求失败的结果至用户终端,即实现快速失败,能够减少Redis需要处理的用户请求数量,从而有效减小了全局锁(Redis)的压力。
在一个实施例中,获取当前节点对应的本地锁的方式的步骤,包括:
通过调用Lock函数获取当前节点对应的本地锁。
服务器集群中的服务节点接收用户终端发送的业务请求之后,服务器集群中的服务节点可以根据业务请求,获取当前节点对应的本地锁。具体的,每个服务节点可以通过调用关键字函数或Lock函数获取当前节点对应的本地锁。在分布式系统环境中,分为多个服务节点,每个节点接收到用户终端发送的业务请求之后,每个节点可以通过调用关键字函数或Lock函数获取当前节点对应的本地锁,只有获取本地锁成功的用户请求才能去Redis中获取全局锁。基于获取锁的特性(只有一个用户请求能成功获取锁),一个节点只会有一个用户请求能成功获取该节点的本地锁后再继续到Redis中获取全局锁,所以Redis能接触到的用户请求数=服务节点数。例如,服务器集群中的服务节点A接收到用户终端1发送的业务请求1、用户终端2发送的业务请求2以及用户终端3发送的业务请求3之后,该服务节点可以根据业务请求1、业务请求2以及业务请求3,获取当前节点对应的本地锁。假设最终只有业务请求2获取本地锁成功,那么该服务节点发送命令至第三方组件获取与业务请求2对应的全局锁。相较于传统业务请求的处理方式中,每个业务请求获取锁的过程都涉及到一次与Redis的网络IO交互,网络IO交互是比较耗时的一个过程,所以获取锁不管成功还是失败都是比较耗时的过程。而本实施例中,本地锁只需要在服务节点本地进行,不涉及网络IO交互,所以性能是高于全局锁的,获取本地锁失败的用户请求,能到达一个快速失败的效果,即实现快速响应用户请求的效果。
在一个实施例中,如图3所示,提供了一种业务请求的处理方法,以该方法应用于图1中的服务器集群中的服务节点为例进行说明,包括以下步骤:
步骤302,接收用户终端发送的业务请求。
步骤304,根据业务请求,获取当前节点对应的本地锁。
步骤306,若获取本地锁成功,则基于业务请求调用第三方组件中用于获取全局锁命令的接口,接口用于返回获取全局锁对应的结果。
步骤308,当接收到接口返回的结果为第一预设值,则表示获取全局锁成功,对业务请求进行处理;当接收到接口返回的结果为第二预设值,则表示获取全局锁失败,返回请求失败的结果至用户终端。
如图4所示,为对用户请求进行处理的流程示意图。在分布式服务、高并发请求量的环境下,服务器集群中的服务节点接收用户终端发送的业务请求,服务节点根据业务请求,获取当前节点对应的本地锁。若服务节点获取本地锁失败,则直接返回请求失败的结果至对应的用户终端。若服务节点获取本地锁成功,则基于业务请求调用第三方组件中用于获取全局锁命令的接口,接口用于返回获取全局锁对应的结果。当服务节点接收到接口返回的结果为第一预设值,则表示获取全局锁成功,对业务请求进行处理;当服务节点接收到接口返回的结果为第二预设值,则表示获取全局锁失败,返回请求失败的结果至对应的用户终端。以第三方组件为Redis举例说明。本实施例中依赖Redis的功能:SETNX key val命令。即若给定的key已经存在,则返回0,若给定的key不存在,则把val赋值给key,并返回1。结合到Redis的SETNX key val的功能来说明:多个请求都来调用SETNX key val的命令API,则只有一个请求能得到返回值为1的结果(获取锁成功),其他请求得到的结果都是0(获取锁失败)。即多个服务节点都从Redis调用SETNX key val的命令API,基于获取锁的特性,只有一个服务节点能得到获取锁成功的结果,其他节点请求得到的结果都是获取锁失败。当服务节点接收到接口返回的结果为第一预设值(假设为1),则表示获取全局锁成功,对业务请求进行处理。当服务节点接收到接口返回的结果为第二预设值(假设为0),则表示获取全局锁失败,返回请求失败的结果至对应的用户终端。即每个服务节点接收到用户请求后,都先在本地获取一把基于服务内存的本地锁,获取本地锁失败的请求则直接返回请求失败的结果至对应的用户终端。各个服务节点中成功获取本地锁的请求,再去获取一把Redis全局锁,最终只有一个用户请求能成功获取到Redis全局锁,进而处理后续的业务逻辑。
相较于传统业务请求的处理方式中,所有请求需要直接去获取全局锁,导致大量的请求给Redis带来较高的服务压力。而本实施例中,本地锁是基于java语言特性的能力,全局锁是借助Redis的SETNX key val命令的能力。通过先获取本地锁成功,再获取全局锁,能够实现快速失败,减少全局锁的接待压力。即在获取Redis全局锁前,加入了先获取服务内存的本地锁的逻辑,正是因为本地锁基于服务内存的,性能高于全局锁,所以获取本地锁失败的请求达到一个快速失败的效果。此外,获取本地锁成功的请求才再去获取Redis全局锁,大大减少了达到Redis的请求量,从而有效降低了Redis的服务压力。
在一个实施例中,基于业务请求调用第三方组件中用于获取全局锁命令的接口的步骤,包括:
基于业务请求调用第三方组件中SETNX key val命令的接口。
在分布式服务、高并发请求量的环境下,服务器集群中的服务节点接收用户终端发送的业务请求,服务节点根据业务请求,获取当前节点对应的本地锁。若服务节点获取本地锁成功,则基于业务请求调用第三方组件中用于获取全局锁命令的接口。具体的,若服务节点获取本地锁成功,则服务节点可以基于业务请求调用第三方组件Redis中SETNX keyval命令的接口。SETNX是SET if not exists(如果不存在,则SET)的简写。SETNX key val即SETNX key value,只在键key不存在的情况下,将键key的值设置为value。若键key已经存在,则SETNX命令不做任何动作。返回值:命令在设置成功时返回1,设置失败时返回0。由此,通过先获取本地锁成功,再调用Redis中SETNX key val命令的API获取全局锁,能够实现快速失败,减少全局锁的接待压力。
在一个实施例中,发送请求至第三方组件获取对应的全局锁之后,该方法还包括获取全局锁失败的步骤,包括:
若获取全局锁失败,则返回请求失败的结果至用户终端。
在分布式服务、高并发请求量的环境下,服务器集群中的服务节点接收用户终端发送的业务请求,服务节点根据业务请求,获取当前节点对应的本地锁。若服务节点获取本地锁成功,则对业务请求进行处理。若服务节点获取全局锁失败,则返回请求失败的结果至对应的用户终端。由此使得,获取本地锁成功的请求才再去获取Redis全局锁,大大减少了达到Redis的请求量,降低了Redis的服务压力。
在一个实施例中,在分布式服务、高并发请求量的环境下,服务器集群中的服务节点接收不同用户终端发送的业务请求,服务器集群中的服务节点接收不同用户终端发送的业务请求之后,服务器集群中的服务节点可以根据业务请求,获取当前节点对应的本地锁。在分布式系统中每个服务节点可以基于java语言的功能特性,调用Lock函数在本地中获取对应的本地锁,只有本地锁获取成功后,才会发送命令至Redis获取对应的全局锁。若服务节点获取本地锁失败,则返回请求失败的结果至对应的用户终端。由于本地锁是基于java语言的功能特性,不涉及网络IO交互,所以性能是高于全局锁的,因而获取本地锁失败的用户请求,能到达一个快速失败的效果。若服务节点获取本地锁成功,则基于业务请求调用第三方组件Redis中用于获取全局锁命令的接口,即多个服务节点都从Redis调用SETNX keyval的命令API,基于获取锁的特性,只有一个服务节点能得到获取锁成功的结果,其他节点请求得到的结果都是获取锁失败。具体的,当服务节点接收到接口返回的结果为第一预设值,则表示获取全局锁成功,对业务请求进行处理;当服务节点接收到接口返回的结果为第二预设值,则表示获取全局锁失败,返回请求失败的结果至对应的用户终端。即若给定的key已经存在,则返回0,若给定的key不存在,则把val赋值给key,并返回1。结合到Redis的SETNX key val的功能来说明:多个请求都来调用SETNX key val的命令API,则只有一个请求能得到返回值为1的结果(获取锁成功),其他请求得到的结果都是0(获取锁失败)。当服务节点接收到接口返回的结果为第一预设值(假设为1),则表示获取全局锁成功,对业务请求进行处理。当服务节点接收到接口返回的结果为第二预设值(假设为0),则表示获取全局锁失败,返回请求失败的结果至对应的用户终端。即每个服务节点接收到用户请求后,都先在本地获取一把基于服务内存的本地锁,获取本地锁失败的请求则直接返回请求失败的结果至对应的用户终端。各个服务节点中成功获取本地锁的请求,再去获取一把Redis全局锁,最终只有一个用户请求能成功获取到Redis全局锁,进而处理后续的业务逻辑。由此,通过先获取本地锁成功,再获取全局锁,能够实现快速失败,减少全局锁的接待压力。
应该理解的是,虽然图1-4的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-4中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图5所示,提供了一种业务请求的处理装置,包括:接收模块502、获取模块504、发送模块506和处理模块508,其中:
接收模块502,用于接收用户终端发送的业务请求。
获取模块504,用于根据业务请求,获取当前节点对应的本地锁。
发送模块506,用于若获取本地锁成功,则发送命令至第三方组件获取对应的全局锁。
处理模块508,用于若获取全局锁成功,则对业务请求进行处理。
在一个实施例中,发送模块还用于若获取本地锁失败,则返回请求失败的结果至用户终端。
在一个实施例中,获取模块还用于通过调用Lock函数获取当前节点对应的本地锁。
在一个实施例中,该装置还包括:调用模块。
调用模块用于若获取本地锁成功,则基于业务请求调用第三方组件中用于获取全局锁命令的接口,接口用于返回获取全局锁对应的结果。处理模块还用于当接收到接口返回的结果为第一预设值,则表示获取全局锁成功,对业务请求进行处理。
在一个实施例中,发送模块还用于当接收到接口返回的结果为第二预设值,则表示获取全局锁失败,返回请求失败的结果至用户终端。
在一个实施例中,调用模块还用于基于业务请求调用第三方组件中SETNX keyval命令的接口。
在一个实施例中,发送模块还用于若获取全局锁失败,则返回请求失败的结果至用户终端。
关于业务请求的处理装置的具体限定可以参见上文中对于业务请求的处理方法的限定,在此不再赘述。上述业务请求的处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图6所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储业务请求的处理数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种业务请求的处理方法。
本领域技术人员可以理解,图6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述各个方法实施例的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种业务请求的处理方法,所述方法包括:
接收用户终端发送的业务请求;
根据所述业务请求,获取当前节点对应的本地锁;
若获取本地锁成功,则发送命令至第三方组件获取对应的全局锁;
若获取全局锁成功,则对所述业务请求进行处理。
2.根据权利要求1所述的方法,其特征在于,所述根据所述业务请求,获取当前节点对应的本地锁之后,所述方法还包括:
若获取本地锁失败,则返回请求失败的结果至所述用户终端。
3.根据权利要求1所述的方法,其特征在于,所述获取当前节点对应的本地锁的方式包括:
通过调用Lock函数获取当前节点对应的本地锁。
4.根据权利要求1所述的方法,其特征在于,所述若获取本地锁成功,则发送命令至第三方组件获取对应的全局锁包括:
若获取本地锁成功,则基于所述业务请求调用所述第三方组件中用于获取全局锁命令的接口,所述接口用于返回获取全局锁对应的结果;
所述若获取全局锁成功,则对所述业务请求进行处理,包括:
当接收到所述接口返回的结果为第一预设值,则表示获取全局锁成功,对所述业务请求进行处理。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
当接收到所述接口返回的结果为第二预设值,则表示获取全局锁失败,返回请求失败的结果至所述用户终端。
6.根据权利要求4所述的方法,其特征在于,所述基于所述业务请求调用所述第三方组件中用于获取全局锁命令的接口包括:
基于所述业务请求调用所述第三方组件中SETNX key val命令的接口。
7.根据权利要求1所述的方法,其特征在于,所述发送请求至第三方组件获取对应的全局锁之后,所述方法还包括:
若获取全局锁失败,则返回请求失败的结果至所述用户终端。
8.一种业务请求的处理装置,其特征在于,所述装置包括:
接收模块,用于接收用户终端发送的业务请求;
获取模块,用于根据所述业务请求,获取当前节点对应的本地锁;
发送模块,用于若获取本地锁成功,则发送命令至第三方组件获取对应的全局锁;
处理模块,用于若获取全局锁成功,则对所述业务请求进行处理。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110720592.4A CN113553196A (zh) | 2021-06-28 | 2021-06-28 | 业务请求的处理方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110720592.4A CN113553196A (zh) | 2021-06-28 | 2021-06-28 | 业务请求的处理方法、装置、计算机设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113553196A true CN113553196A (zh) | 2021-10-26 |
Family
ID=78131041
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110720592.4A Pending CN113553196A (zh) | 2021-06-28 | 2021-06-28 | 业务请求的处理方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113553196A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160164746A1 (en) * | 2014-12-05 | 2016-06-09 | Accenture Global Services Limited | Network component placement architecture |
CN106790694A (zh) * | 2017-02-21 | 2017-05-31 | 广州爱九游信息技术有限公司 | 分布式系统及分布式系统中目标对象的调度方法 |
CN110866011A (zh) * | 2019-11-04 | 2020-03-06 | 金蝶软件(中国)有限公司 | 数据表同步方法、装置、计算机设备和存储介质 |
CN111125569A (zh) * | 2019-12-25 | 2020-05-08 | 北京同邦卓益科技有限公司 | 数据标识的生成方法及装置、电子设备及介质 |
-
2021
- 2021-06-28 CN CN202110720592.4A patent/CN113553196A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160164746A1 (en) * | 2014-12-05 | 2016-06-09 | Accenture Global Services Limited | Network component placement architecture |
CN106790694A (zh) * | 2017-02-21 | 2017-05-31 | 广州爱九游信息技术有限公司 | 分布式系统及分布式系统中目标对象的调度方法 |
CN110866011A (zh) * | 2019-11-04 | 2020-03-06 | 金蝶软件(中国)有限公司 | 数据表同步方法、装置、计算机设备和存储介质 |
CN111125569A (zh) * | 2019-12-25 | 2020-05-08 | 北京同邦卓益科技有限公司 | 数据标识的生成方法及装置、电子设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109739573B (zh) | 实现api接口调用的处理方法及装置、实现api接口的系统 | |
CN112000348B (zh) | 服务灰度发布的控制方法、装置、计算机设备 | |
CN107016480B (zh) | 任务调度方法、装置及系统 | |
CN110633160A (zh) | 接口调用方法、装置、计算机设备和存储介质 | |
CN110531984B (zh) | 代码编译方法、装置、系统、计算机设备和存储介质 | |
CN110555041A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN109389299B (zh) | 工作流流程部署方法、装置、计算机设备和存储介质 | |
CN110673933A (zh) | 基于ZooKeeper的分布式异步队列实现方法、装置、设备及介质 | |
CN110928653A (zh) | 跨集群任务的执行方法、装置、计算机设备和存储介质 | |
CN110943934A (zh) | 服务请求处理方法、系统、终端及可读存储介质 | |
CN114281263B (zh) | 容器集群管理系统的存储资源处理方法、系统和设备 | |
CN113010561B (zh) | 基于超级账本的数据获取方法、装置、计算机系统 | |
CN111190609B (zh) | 业务的处理方法、装置、设备和存储介质 | |
CN110795331A (zh) | 软件测试的方法和装置 | |
CN114090113B (zh) | 数据源处理插件动态加载的方法、装置、设备及存储介质 | |
CN113282589A (zh) | 一种数据获取方法和装置 | |
CN113010306A (zh) | 业务数据处理方法、装置、计算机设备和存储介质 | |
CN110609707B (zh) | 在线数据处理系统生成方法、装置及设备 | |
CN113553196A (zh) | 业务请求的处理方法、装置、计算机设备和存储介质 | |
CN112149951B (zh) | 风险控制方法、装置、计算机设备和存储介质 | |
CN114610413A (zh) | 基于Java的同异步任务的执行方法、装置、设备及存储介质 | |
CN114218188A (zh) | 数据迁移方法、装置、设备及存储介质 | |
CN114238352A (zh) | 一种微服务业务处理方法及相关装置 | |
CN113568652A (zh) | 应用系统处理方法、装置、计算机设备和存储介质 | |
CN113032118A (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 |