CN117453426A - 一种延时消费方法、装置、电子设备及存储介质 - Google Patents
一种延时消费方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN117453426A CN117453426A CN202311423256.9A CN202311423256A CN117453426A CN 117453426 A CN117453426 A CN 117453426A CN 202311423256 A CN202311423256 A CN 202311423256A CN 117453426 A CN117453426 A CN 117453426A
- Authority
- CN
- China
- Prior art keywords
- data
- service
- feedback signal
- queue
- target thread
- 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
- 238000000034 method Methods 0.000 title claims abstract description 76
- 238000012545 processing Methods 0.000 claims abstract description 29
- 230000000903 blocking effect Effects 0.000 claims description 25
- 230000003111 delayed effect Effects 0.000 claims description 11
- 230000004044 response Effects 0.000 claims description 4
- 230000008569 process Effects 0.000 abstract description 9
- 230000006870 function Effects 0.000 description 21
- 238000010586 diagram Methods 0.000 description 18
- 238000004590 computer program Methods 0.000 description 9
- 238000004891 communication Methods 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 7
- 230000003287 optical effect Effects 0.000 description 6
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 239000003550 marker Substances 0.000 description 3
- 238000006467 substitution reaction Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 230000002441 reversible effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
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/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种延时消费方法、装置、电子设备及存储介质,方法包括:通过基于多个线程的启动信号,从远程字典服务的队列中获取业务数据;响应于目标线程的标记添加指令,在业务数据中添加标记,并获取标记的添加结果的反馈信号;基于反馈信号确定目标线程对业务数据的标记状态;当标记状态为标记成功,将业务数据发送到目标线程对应的服务器。本发明实施例通过基于远程字典服务实现延时消费提高性能的流程方法,具体通过对队列中数据的标记及状态反馈,从而实现不需要通过加锁的方式进而实现消息只被一台机器消费,进而提高服务性能,可广泛应用于数据处理技术领域。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种延时消费方法、装置、电子设备及存储介质。
背景技术
在现代分布式系统中,对于高性能和高可靠性的要求越来越高。一个常见的情况是服务通常多集群部署需要实现延时消费的功能,即将消息发送到一个队列中,在指定的延时时间后再进行消费处理。这种场景经常会使用加锁的方式避免一个消息被多台机器消费,加锁会导致服务处理业务的性能下降。
发明内容
本发明旨在至少在一定程度上解决相关技术中的技术问题之一。为此,本发明提出一种延时消费方法、装置、电子设备及存储介质,能够提高延时消费的性能。
一方面,本发明实施例提供了一种延时消费方法,包括:
基于多个线程的启动信号,从远程字典服务的队列中获取业务数据;
响应于目标线程的标记添加指令,在业务数据中添加标记,并获取标记的添加结果的反馈信号;
基于反馈信号确定目标线程对业务数据的标记状态;
当标记状态为标记成功,将业务数据发送到目标线程对应的服务器。
可选地,基于多个线程的启动信号,从远程字典服务的队列中获取业务数据,包括:
基于多个线程的启动信号,将各个线程连接到远程字典服务的同一实例;
通过线程以阻塞模式从远程字典服务的队列中获取业务数据。
可选地,方法还包括:
当远程字典服务的队列进入新业务数据,将新业务数据以二元组的格式存放在队列。
可选地,在业务数据中添加标记,包括:
通过远程字典服务的原子性操作在业务数据中添加标记。
可选地,反馈信号包括第一反馈信号和第二反馈信号;基于反馈信号确定目标线程对业务数据的标记状态,包括:
当反馈信号为第一反馈信号,确定目标线程对业务数据的标记状态为标记成功;第一反馈信号表征目标线程成功标记了业务数据;
当反馈信号为第二反馈信号,确定目标线程对业务数据的标记状态为标记失败;第二反馈信号表征业务数据已经被其它线程标记。
可选地,方法还包括:
根据业务数据,通过服务器执行业务处理。
可选地,方法还包括:
当业务处理未达到预设业务要求,通过服务器修改业务数据的标记。
另一方面,本发明实施例提供了一种延时消费装置,包括:
第一模块,用于基于多个线程的启动信号,从远程字典服务的队列中获取业务数据;
第二模块,用于响应于目标线程的标记添加指令,在业务数据中添加标记,并获取标记的添加结果的反馈信号;
第三模块,用于基于反馈信号确定目标线程对业务数据的标记状态;
第四模块,用于当标记状态为标记成功,将业务数据发送到目标线程对应的服务器。
可选地,第一模块具体用于:
基于多个线程的启动信号,将各个线程连接到远程字典服务的同一实例;
通过线程以阻塞模式从远程字典服务的队列中获取业务数据。
可选地,装置还包括:
第五模块,用于当远程字典服务的队列进入新业务数据,将新业务数据以二元组的格式存放在队列。
可选地,第二模块具体用于:
通过远程字典服务的原子性操作在业务数据中添加标记。
可选地,反馈信号包括第一反馈信号和第二反馈信号,第三模块具体用于:
当反馈信号为第一反馈信号,确定目标线程对业务数据的标记状态为标记成功;第一反馈信号表征目标线程成功标记了业务数据;
当反馈信号为第二反馈信号,确定目标线程对业务数据的标记状态为标记失败;第二反馈信号表征业务数据已经被其它线程标记。
可选地,装置还包括:
第六模块,用于根据业务数据,通过服务器执行业务处理。
可选地,装置还包括:
第七模块,用于当业务处理未达到预设业务要求,通过服务器修改业务数据的标记。
另一方面,本发明实施例提供了一种电子设备,包括:处理器以及存储器;存储器用于存储程序;处理器执行程序实现上述延时消费方法。
另一方面,本发明实施例提供了一种计算机存储介质,其中存储有处理器可执行的程序,处理器可执行的程序在由处理器执行时用于实现上述延时消费方法。
本发明实施例通过基于多个线程的启动信号,从远程字典服务的队列中获取业务数据;响应于目标线程的标记添加指令,在业务数据中添加标记,并获取标记的添加结果的反馈信号;基于反馈信号确定目标线程对业务数据的标记状态;当标记状态为标记成功,将业务数据发送到目标线程对应的服务器。本发明实施例通过基于远程字典服务实现延时消费提高性能的流程方法,具体通过对队列中数据的标记及状态反馈,从而实现不需要通过加锁的方式进而实现消息只被一台机器消费,进而提高服务性能。
附图说明
附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。
图1是本发明实施例提供的进行延时消费的一种实施环境示意图;
图2是本发明实施例提供的一种延时消费方法的流程示意图;
图3为本发明实施例提供的从远程字典服务的队列中获取业务数据的展开流程示意图;
图4为本发明实施例提供的确定标记状态的展开流程示意图;
图5为本发明实施例提供的延时消费方法的基本原理示意图;
图6为本发明实施例提供的延时消费方法的架构原理示意图;
图7为本发明实施例提供的延时消费方法的服务请求流程示意图;
图8为本发明实施例提供的一种延时消费装置的结构示意图;
图9为本发明实施例提供的一种电子设备的结构示意图;
图10为本发明实施例提供的适于用来实现本发明实施例的电子设备的计算机系统结构框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
需要说明的是,虽然在系统示意图中进行了功能模块划分,在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于系统中的模块划分,或流程图中的顺序执行所示出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一/S100”、“第二/S200”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
可以理解的是,本发明实施例提供的延时消费方法,是能够应用于任意一种具备数据处理计算能力计算机设备,而这一计算机设备可以是各类终端或是服务器。当实施例中的计算机设备是服务器时,该服务器是独立的物理服务器,或者,是多个物理服务器构成的服务器集群或者分布式系统,或者,是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。可选地,该终端是智能手机、平板电脑、笔记本电脑以及台式计算机等,但也并不局限于此。
为便于本发明实施例技术方案的理解,首先对本发明实施例中可能出现的专有技术名词进行解释说明:
多集群:在分布式系统中同时运行多个独立的集群。集群是由一组相互连接的计算机节点组成,共同协同工作以提供服务和处理业务。多集群的概念进一步扩展了这种分布式架构,使得多个独立的集群可以同时存在并运行。
Redis/redis(Remote Dictionary Server):即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
如图1所示,是发明实施例提供的一种实施环境示意图。参照图1,该实施环境包括至少一个终端102和服务器101。终端102和服务器101之间可以通过无线或者有线的方式进行网络连接,完成数据传输交换。
服务器101可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。
另外,服务器101还可以是区块链网络中的一个节点服务器。其中,区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。
终端102可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端102以及服务器101可以通过有线或无线通信方式进行直接或间接地连接,本发明实施例在此不做限制。
示例性地基于图1所示的实施环境,本发明实施例提供了一种延时消费方法,下面以该延时消费方法应用于服务器101中为例子进行说明,可以理解的是,该延时消费方法也可以应用于终端102中。
参照图2,图2为本发明实施例提供的应用于服务器的延时消费方法的流程图,该延时消费方法的执行主体可以是前述的任意一种计算机设备(包括服务器或者终端)。参照图2,该方法包括以下步骤:
S100、基于多个线程的启动信号,从远程字典服务的队列中获取业务数据;
其中,一些实施例中,方法还可以包括:当远程字典服务的队列进入新业务数据,将新业务数据以二元组的格式存放在队列。需要说明的是,存放的各个二元组对应远程字典服务中的实例。
示例性地,一些具体实施例中,创建一个Redis队列,并将需要处理的数据按放入队列中;如:一个消息定义为一个二元组R<S,O>,其中:
(1)S,为消息头(score),即该redis消息队列的得分排序;
(2)O,为消息体(Object),即需要传送的数据该redis消息队列中的实体;
本发明实施例目前举例的是redis中的一种基本数据类型Sorted Set(有序集合),目的是为了按得分的排序进行获取,实现延时队列的顺序消费。
需要说明的是,一些实施例中,如图3所示,基于多个线程的启动信号,从远程字典服务的队列中获取业务数据,可以包括:S101、基于多个线程的启动信号,将各个线程连接到远程字典服务的同一实例;S102、通过线程以阻塞模式从远程字典服务的队列中获取业务数据。
示例性地,一些具体实施例中,启动多个线程,每个线程都连接到相同的Redis实例,并使用新加的“拉取”方法以阻塞模式从队列中获取数据。
其中,需要说明的是,Redis是一个开源的高性能键值存储数据库,它支持多种数据结构,如字符串、哈希表、列表、集合和有序集合。除了基本的读写功能外,Redis还提供了一些高级操作,如发布订阅、事务、管道和Lua脚本。
在使用Redis进行开发时,经常会遇到需要从Redis中获取值的情况。一般情况下,可以使用GET命令来直接获取值。但是,在某些特定场景下,希望能够阻塞地获取值,即当Redis中没有对应的值时,暂时挂起请求,直到有新的值可用为止。这种阻塞获取值的机制在一些异步处理的场景下非常有用。
Redis阻塞获取值的方法为:Redis提供了几个命令可以实现阻塞获取值的功能。下面是其中最常用的几个命令:
BLPOP:阻塞式列表弹出,从左侧弹出列表的第一个元素,如果列表为空,则阻塞等待;
BRPOP:阻塞式列表弹出,从右侧弹出列表的最后一个元素,如果列表为空,则阻塞等待;
BRPOPLPUSH:阻塞式列表弹出并将元素推入另一个列表,从右侧弹出第一个列表的最后一个元素,并将其推入第二个列表,如果第一个列表为空,则阻塞等待;
BRPOPX:阻塞式列表弹出,从多个列表中的任意一个非空列表弹出元素,如果所有列表都为空,则阻塞等待。
这些命令都是原子操作,可以保证在多线程或多进程环境中的正确性。
具体地,阻塞(模式)获取是Redis提供的一种特性,它允许客户端在没有数据可用时等待并阻塞,直到有新业务数据可用或超时。在传统的非阻塞模式下,客户端需要不停地轮询服务器以获取数据,这样会消耗大量的资源。而阻塞获取则能够显著减少不必要的轮询,提高效率。
示例性地,阻塞获取的应用场景可以包括:
消息队列:生产者将消息推送到Redis中,消费者使用阻塞获取来获取消息。这样可以避免消费者轮询服务器,降低网络和CPU的负载。
缓存更新通知:当缓存中的数据发生变化时,可以使用阻塞获取来通知其他客户端更新缓存。这样可以保证缓存的实时性。
订阅频道:Redis的发布订阅功能是通过阻塞获取实现的。订阅者使用阻塞获取等待新的消息,发布者将消息推送给订阅者。
S200、响应于目标线程的标记添加指令,在业务数据中添加标记,并获取标记的添加结果的反馈信号;
需要说明的是,一些实施例中,在业务数据中添加标记,可以包括:通过远程字典服务的原子性操作在业务数据中添加标记。
示例性地,一些具体实施例中,当一个线程成功获取到数据后,在处理数据之前,使用Redis提供的原子性操作SETNX(分布式锁)为该数据添加一个标记,标记表示该数据已被获取。
其中,SETNX命令的特性:向Redis中添加一个key,只用当key不存在的时候才添加并返回1,存在则不添加返回0。并且这个命令是原子性的。使用SETNX作为分布式锁时,添加成功表示获取到锁,添加失败表示未获取到锁。至于添加的value值无所谓可以是任意值(根据业务需求),只要保证多个线程使用的是同一个key,所以多个线程添加时只会有一个线程添加成功,就只会有一个线程能够获取到锁。而释放锁锁只需要将锁删除即可。
S300、基于反馈信号确定目标线程对业务数据的标记状态;
需要说明的是,反馈信号包括第一反馈信号和第二反馈信号;如图4所示,一些实施例中,基于反馈信号确定目标线程对业务数据的标记状态,包括:S301、当反馈信号为第一反馈信号,确定目标线程对业务数据的标记状态为标记成功;第一反馈信号表征目标线程成功标记了业务数据;S302、当反馈信号为第二反馈信号,确定目标线程对业务数据的标记状态为标记失败;第二反馈信号表征业务数据已经被其它线程标记。
示例性地,一些具体实施例中,如果SETNX操作返回1,表示当前线程成功标记了该数据。线程可以开始处理数据,并在处理完成后移除标记。否则,如果SETNX操作返回0,表示其他线程已经标记了该数据。当前线程需要重新尝试获取未被标记的数据。
通过以上机制,可以使用数据的值加上一个特定的后缀作为键名,例如data+"_mark"。这样,每个线程会尝试使用SETNX命令将该键名和值存储到Redis中。如果SETNX返回1,表示当前线程成功标记了该数据,并获得了对该数据的处理权;如果返回0,表示该数据已被其他线程标记,当前线程需要重新尝试获取未被标记的数据。每条数据只会被一个线程获取,并且获取到数据后才会返回给调用方。已被处理的数据会被标记,下次线程获取数据时会忽略已被标记的数据,直到获取到未被标记的数据为止。
S400、当标记状态为标记成功,将业务数据发送到目标线程对应的服务器。
示例性地,一些具体实施例中,一旦有数据进入Redis队列,每台服务器都会尝试获取未被标记的数据。服务器能够立即获取到未被标记的数据,而不会发生阻塞等待。一台服务器成功获取到数据后,将该数据标记为已获取。这可以通过修改数据的状态字段、添加一个标记键或者使用其他方式实现。
其中,一些实施例中,方法还可以包括:根据业务数据,通过服务器执行业务处理。
一些实施例中,方法还可以包括:当业务处理未达到预设业务要求,通过服务器修改业务数据的标记。
示例性地,一些具体实施例中,如果获取到的数据还没有满足业务要求,服务器可以再次调用Redis服务,将已被获取过的标记修改为未被获取,以便其他服务器可以重新获取并处理该数据。
为详细解释本发明技术方案的原理,下面结合一些具体实施例对本发明的整体流程进行说明,容易理解的是,下述为对本发明技术原理的解释,不能看做对本发明的限制。
首先需要说明的是,如图5所示,本发明实施例技术方案的基本实现方法为:
redis延时队列中间件封装:在应用程序后端直接引入封装之后的redis,后端操作中直接通过正常的add把数据加入到队列中,在消费端正常的消费操作redis的延时队列,在多集群部署的情况下,即可实现不需要加分布式锁就能做到一个消息只能被一台机器消费(利用redis中的单线程操作,不需要加锁的形式,从而提高服务器的性能)。
基于此,用户直接调用封装好的接口,直接操作redis数据,不需要关注底层实现,在多集群部署的环境下,不需要加分布式锁即可实现,一条消息只被一台机器消费。
示例性地,如图6所示,对本发明实施例的技术方案进行展开说明:
在客户端:调用经过统一封装之后的redis客户端,再由客户端进行单线程的操作获取redis队列中的数据。
在实现层:接口通过redis的单线程模型和原子性操作,实现redis队列中的一条数据只被一个线程获取。具体实现逻辑原理如下:
1、创建一个Redis队列,并将需要处理的数据按放入队列中;如:一个消息定义为一个二元组R<S,O>,其中:
(1)S,为消息头(score),即该redis消息队列的得分排序;
(2)O,为消息体(Object),即需要传送的数据该redis消息队列中的实体;
本方法目前举例的是redis中的一种基本数据类型Sorted Set(有序集合),目的是为了按得分的排序进行获取,实现延时队列的顺序消费。
2、启动多个线程,每个线程都连接到相同的Redis实例,并使用新加的“拉取”方法以阻塞模式从队列中获取数据。
3、当一个线程成功获取到数据后,在处理数据之前,使用Redis提供的原子性操作SETNX为该数据添加一个标记,标记表示该数据已被获取。
4、如果SETNX操作返回1,表示当前线程成功标记了该数据。线程可以开始处理数据,并在处理完成后移除标记。
5、如果SETNX操作返回0,表示其他线程已经标记了该数据。当前线程需要重新尝试获取未被标记的数据。
通过以上机制,可以使用数据的值加上一个特定的后缀作为键名,例如data+"_mark"。这样,每个线程会尝试使用SETNX命令将该键名和值存储到Redis中。如果SETNX返回1,表示当前线程成功标记了该数据,并获得了对该数据的处理权;如果返回0,表示该数据已被其他线程标记,当前线程需要重新尝试获取未被标记的数据。每条数据只会被一个线程获取,并且获取到数据后才会返回给调用方。已被处理的数据会被标记,下次线程获取数据时会忽略已被标记的数据,直到获取到未被标记的数据为止。
如图3所示,基于本发明实施例方法执行的调用方使用逻辑流程:
例如,通过Redis的单线程模型和原子性操作,实现以下机制来确保每条数据只被一个线程获取,并对已获取的数据进行标记,多个服务器同时请求Redis来获取数据,并通过接口的单线程处理以下具体流程:
1、多个服务器同时连接到Redis实例,并使用"获取"方法以阻塞模式从队列中获取数据。
2、一旦有数据进入Redis队列,每台服务器都会尝试获取未被标记的数据。服务器能够立即获取到未被标记的数据,而不会发生阻塞等待。
3、一台服务器成功获取到数据后,将该数据标记为已获取。这可以通过修改数据的状态字段、添加一个标记键或者使用其他方式实现。
4、如果获取到的数据还没有满足业务要求,服务器可以再次调用Redis服务,将已被获取过的标记修改为未被获取,以便其他服务器可以重新获取并处理该数据。
5、如果获取到的数据满足业务要求,服务器可以进行相应的业务处理,然后调用Redis删除该数据,从而将其从队列中移除。
本发明实施例提供一种解决多集群部署基于redis实现延时消费提高性能的中间件,通过封装了Redis数据操作,并引入了数据标记和读取未标记数据的机制,当使用Redis的SETNX命令时,它将会以原子性的方式执行以下操作:
客户端向Redis服务器发送SETNX命令,携带数据的键名和对应的值。
Redis首先检查指定键名是否存在。如果该键名不存在,那么Redis服务器会将该键名与对应的值存储到数据库中(通过数据库表唯一主键的特性),并返回1。
如果指定键名已经存在,那么Redis服务器不会执行任何操作,直接返回0。
这种原子性操作确保了在多个线程同时执行SETNX命令时,只有一个线程能成功设置键名和值,而其他线程将得到失败的响应。这样可以避免在并发环境下出现竞争条件,确保数据的一致性。
如在上面可以使用数据的值加上一个特定的后缀作为键名,例如data+"_mark"。这样,每个线程会尝试使用SETNX命令将该键名和值存储到Redis中。如果SETNX返回1,表示当前线程成功标记了该数据,并获得了对该数据的处理权;如果返回0,表示该数据已被其他线程标记,当前线程需要重新尝试获取未被标记的数据。
通过利用Redis提供的SETNX命令的原子性,可以实现对数据的标记和获取的互斥控制,确保每条数据只被一个线程获取和处理。成功解决了在多集群部署中,无需加锁即可确保消息只被一台服务器消费的问题。这一改进显著提高了程序处理业务的性能,并使其适用于多集群部署环境。
示例性地,一些具体实施例中,可以在相关视频服务引入了该Redis客户端,用于在多集群部署的环境中确保每条数据只被一台机器消费。在这种情况下,只需进行简单的常规操作。对于需要修改或删除数据的业务,处理步骤如下:首先获取数据,然后执行相应的修改或删除操作。
该redis客户端方案改造后的引入,通过与之前的方案进行比较,采用这种新方案后,相关业务服务的性能明显提升。此外,该方案的实现简单,易于维护,可灵活调整配置,以适应不同的业务场景需求。
综上,在应用程序多集群部署时,当引入Redis来解决业务场景中需要确保同一数据只能被一台服务器消费的问题时,通常使用加锁机制来保证数据的原子性。然而,加锁操作会导致服务性能下降,并且在高并发场景下,服务器的性能可能无法满足需求。鉴于此,本发明引入封装之后的redis客户端中间件,内部封装了实现redis单线程操作、数据标记的特点。且该中间件依赖引入,可灵活配置,以满足不同的业务场景。由于不需要加锁处理,每台服务器直接获取数据的过程不会发生阻塞等待,从而提高了服务处理业务的性能。
与现有技术相比较,本发明至少包括如下有益效果:
1、专注于redis数据读取操作,内部封装了实现redis避免同一消息多台机器消费的复杂度。
2、抽象出统一的redis获取及修改接口API,应用程序可根据需求灵活配置不同的消费redis解决方案,避免使用锁来限制消费同一消息,提高了多集群部署的下服务的处理性能。
另一方面,如图8所示,本发明实施例提供了一种延时消费装置800,包括:第一模块810,用于基于多个线程的启动信号,从远程字典服务的队列中获取业务数据;第二模块820,用于响应于目标线程的标记添加指令,在业务数据中添加标记,并获取标记的添加结果的反馈信号;第三模块830,用于基于反馈信号确定目标线程对业务数据的标记状态;第四模块840,用于当标记状态为标记成功,将业务数据发送到目标线程对应的服务器。
一些具体实施例中,本发明首先通过第一模块810基于多个线程的启动信号,从远程字典服务的队列中获取业务数据;进而通过第二模块820响应于目标线程的标记添加指令,在业务数据中添加标记,并获取标记的添加结果的反馈信号;然后通过第三模块830基于反馈信号确定目标线程对业务数据的标记状态;最用利用第四模块840确定标记状态为标记成功时,将业务数据发送到目标线程对应的服务器。
一些实施例中,第一模块具体用于:
基于多个线程的启动信号,将各个线程连接到远程字典服务的同一实例;
通过线程以阻塞模式从远程字典服务的队列中获取业务数据。
一些实施例中,装置还包括:
第五模块,用于当远程字典服务的队列进入新业务数据,将新业务数据以二元组的格式存放在队列。
一些实施例中,第二模块具体用于:
通过远程字典服务的原子性操作在业务数据中添加标记。
一些实施例中,反馈信号包括第一反馈信号和第二反馈信号,第三模块具体用于:
当反馈信号为第一反馈信号,确定目标线程对业务数据的标记状态为标记成功;第一反馈信号表征目标线程成功标记了业务数据;
当反馈信号为第二反馈信号,确定目标线程对业务数据的标记状态为标记失败;第二反馈信号表征业务数据已经被其它线程标记。
一些实施例中,装置还包括:
第六模块,用于根据业务数据,通过服务器执行业务处理。
一些实施例中,装置还包括:
第七模块,用于当业务处理未达到预设业务要求,通过服务器修改业务数据的标记。
本发明方法实施例的内容均适用于本装置实施例,本装置实施例所具体实现的功能与上述方法实施例相同,并且达到的有益效果与上述方法达到的有益效果也相同。
另一方面,如图9所示,本发明实施例还提供了一种电子设备900,该电子设备包括至少一个处理器910,还包括至少一个存储器920,用于存储至少一个程序;以一个处理器910及一个存储器920为例。
处理器910和存储器920可以通过总线或者其他方式连接。
存储器920作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器920可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件或其他非暂态固态存储器件。在一些实施方式中,存储器920可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
以上所描述的电子设备实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
具体地,图10示意性地示出了用于实现本发明实施例的电子设备的计算机系统结构框图。
需要说明的是,图10示出的电子设备的计算机系统1000仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图10所示,计算机系统1000包括中央处理器1001(Central Processing Unit,CPU),其可以根据存储在只读存储器1002(Read-Only Memory,ROM)中的程序或者从存储部分1008加载到随机访问存储器1003(Random Access Memory,RAM)中的程序而执行各种适当的动作和处理。在随机访问存储器1003中,还存储有系统操作所需的各种程序和数据。中央处理器1001、在只读存储器1002以及随机访问存储器1003通过总线1004彼此相连。输入/输出接口1005(Input/Output接口,即I/O接口)也连接至总线1004。
以下部件连接至输入/输出接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如局域网卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至输入/输出接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。
特别地,根据本发明的实施例,各个方法流程图中所描述的过程可以被实现为计算机软件程序。例如,本发明的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被中央处理器1001执行时,执行本发明的系统中限定的各种功能。
需要说明的是,本发明实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
本发明方法实施例的内容均适用于本系统实施例,本系统实施例所具体实现的功能与上述方法实施例相同,并且达到的有益效果与上述方法达到的有益效果也相同。
本发明实施例的另一方面还提供了一种计算机可读存储介质,存储介质存储有程序,程序被处理器执行实现前面的方法。
本发明方法实施例的内容均适用于本计算机可读存储介质实施例,本计算机可读存储介质实施例所具体实现的功能与上述方法实施例相同,并且达到的有益效果与上述方法达到的有益效果也相同。
本发明实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前面的方法。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块,但是这种划分并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本发明实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本发明实施方式的方法。
在一些可选择的实施例中,在方框图中提到的功能/操作可以不按照操作示图提到的顺序发生。例如,取决于所涉及的功能/操作,连续示出的两个方框实际上可以被大体上同时地执行或方框有时能以相反顺序被执行。此外,在本发明的流程图中所呈现和描述的实施例以示例的方式被提供,目的在于提供对技术更全面的理解。所公开的方法不限于本文所呈现的操作和逻辑流程。可选择的实施例是可预期的,其中各种操作的顺序被改变以及其中被描述为较大操作的一部分的子操作被独立地执行。
此外,虽然在功能性模块的背景下描述了本发明,但应当理解的是,除非另有相反说明,的功能和/或特征中的一个或多个可以被集成在单个物理装置和/或软件模块中,或者一个或多个功能和/或特征可以在单独的物理装置或软件模块中被实现。还可以理解的是,有关每个模块的实际实现的详细讨论对于理解本发明是不必要的。更确切地说,考虑到在本文中公开的装置中各种功能模块的属性、功能和内部关系的情况下,在工程师的常规技术内将会了解该模块的实际实现。因此,本领域技术人员运用普通技术就能够在无需过度试验的情况下实现在权利要求书中所阐明的本发明。还可以理解的是,所公开的特定概念仅仅是说明性的,并不意在限制本发明的范围,本发明的范围由所附权利要求书及其等同方案的全部范围来决定。
功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行装置、装置或设备(如基于计算机的装置、包括处理器的装置或其他可以从指令执行装置、装置或设备取指令并执行指令的装置)使用,或结合这些指令执行装置、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行装置、装置或设备或结合这些指令执行装置、装置或设备而使用的装置。
计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行装置执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
以上是对本发明的较佳实施进行了具体说明,但本发明并不限于实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本发明权利要求所限定的范围内。
Claims (10)
1.一种延时消费方法,其特征在于,包括:
基于多个线程的启动信号,从远程字典服务的队列中获取业务数据;
响应于目标线程的标记添加指令,在所述业务数据中添加标记,并获取所述标记的添加结果的反馈信号;
基于所述反馈信号确定所述目标线程对所述业务数据的标记状态;
当所述标记状态为标记成功,将所述业务数据发送到所述目标线程对应的服务器。
2.根据权利要求1所述的延时消费方法,其特征在于,所述基于多个线程的启动信号,从远程字典服务的队列中获取业务数据,包括:
基于多个线程的启动信号,将各个所述线程连接到所述远程字典服务的同一实例;
通过所述线程以阻塞模式从远程字典服务的队列中获取业务数据。
3.根据权利要求1所述的延时消费方法,其特征在于,所述方法还包括:
当所述远程字典服务的队列进入新业务数据,将所述新业务数据以二元组的格式存放在所述队列。
4.根据权利要求1所述的延时消费方法,其特征在于,所述在所述业务数据中添加标记,包括:
通过所述远程字典服务的原子性操作在所述业务数据中添加标记。
5.根据权利要求1所述的延时消费方法,其特征在于,所述反馈信号包括第一反馈信号和第二反馈信号;所述基于所述反馈信号确定所述目标线程对所述业务数据的标记状态,包括:
当所述反馈信号为所述第一反馈信号,确定所述目标线程对所述业务数据的标记状态为标记成功;所述第一反馈信号表征所述目标线程成功标记了所述业务数据;
当所述反馈信号为所述第二反馈信号,确定所述目标线程对所述业务数据的标记状态为标记失败;所述第二反馈信号表征所述业务数据已经被其它线程标记。
6.根据权利要求1所述的延时消费方法,其特征在于,所述方法还包括:
根据所述业务数据,通过所述服务器执行业务处理。
7.根据权利要求6所述的延时消费方法,其特征在于,所述方法还包括:
当所述业务处理未达到预设业务要求,通过所述服务器修改所述业务数据的所述标记。
8.一种延时消费装置,其特征在于,包括:
第一模块,用于基于多个线程的启动信号,从远程字典服务的队列中获取业务数据;
第二模块,用于响应于目标线程的标记添加指令,在所述业务数据中添加标记,并获取所述标记的添加结果的反馈信号;
第三模块,用于基于所述反馈信号确定所述目标线程对所述业务数据的标记状态;
第四模块,用于当所述标记状态为标记成功,将所述业务数据发送到所述目标线程对应的服务器。
9.一种电子设备,其特征在于,包括处理器以及存储器;
所述存储器用于存储程序;
所述处理器执行所述程序实现如权利要求1至7中任一项所述的方法。
10.一种计算机存储介质,其中存储有处理器可执行的程序,其特征在于,所述处理器可执行的程序在由所述处理器执行时用于实现如权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311423256.9A CN117453426A (zh) | 2023-10-30 | 2023-10-30 | 一种延时消费方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311423256.9A CN117453426A (zh) | 2023-10-30 | 2023-10-30 | 一种延时消费方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117453426A true CN117453426A (zh) | 2024-01-26 |
Family
ID=89588754
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311423256.9A Pending CN117453426A (zh) | 2023-10-30 | 2023-10-30 | 一种延时消费方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117453426A (zh) |
-
2023
- 2023-10-30 CN CN202311423256.9A patent/CN117453426A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9996263B2 (en) | System and method of a shared memory hash table with notifications | |
US8799213B2 (en) | Combining capture and apply in a distributed information sharing system | |
US11169862B2 (en) | Normalizing messaging flows in a microservice architecture | |
US20100083281A1 (en) | System and method for processing messages using a common interface platform supporting multiple pluggable data formats in a service-oriented pipeline architecture | |
US11681683B2 (en) | Transaction compensation for single phase resources | |
US10891176B1 (en) | Optimizing messaging flows in a microservice architecture | |
US11055155B2 (en) | Virtual programming in a microservice architecture | |
EP4004732A1 (en) | Normalizing messaging flows, optimizing messaging flows, and virtual programming in a microservice architecture | |
US10642750B2 (en) | System and method of a shared memory hash table with notifications and reduced memory utilization | |
US9473565B2 (en) | Data transmission for transaction processing in a networked environment | |
CN113051055A (zh) | 一种任务处理方法和装置 | |
CN110413689B (zh) | 一种内存数据库的多节点数据同步方法与装置 | |
CN101710341B (zh) | 一种透明、通用的文件缓存系统 | |
CN109445966B (zh) | 事件处理方法、装置、介质和计算设备 | |
CN117453426A (zh) | 一种延时消费方法、装置、电子设备及存储介质 | |
CN112711485A (zh) | 一种消息处理方法和装置 | |
US7925252B2 (en) | Container-level transaction management system and method therefor | |
CN112241398A (zh) | 一种数据迁移方法和系统 | |
CN113051244B (zh) | 数据访问方法和装置、数据获取方法和装置 | |
CN114356599A (zh) | 业务消息处理系统及方法 | |
CN113778910A (zh) | 一种数据缓存的处理方法及装置 | |
CN116361016B (zh) | 一种网络控制器消息处理方法、系统 | |
US11972312B2 (en) | Data synchronization without middleware | |
US20100217941A1 (en) | Improving the efficiency of files sever requests in a computing device | |
US11294853B1 (en) | Archiver for data stream service |
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 |