CN115629738A - 基于Disruptor实现无锁式内存队列计算服务的开发系统 - Google Patents
基于Disruptor实现无锁式内存队列计算服务的开发系统 Download PDFInfo
- Publication number
- CN115629738A CN115629738A CN202211241713.8A CN202211241713A CN115629738A CN 115629738 A CN115629738 A CN 115629738A CN 202211241713 A CN202211241713 A CN 202211241713A CN 115629738 A CN115629738 A CN 115629738A
- Authority
- CN
- China
- Prior art keywords
- development system
- memory
- data
- user
- interface
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种基于Disruptor实现无锁式内存队列计算服务的开发系统,所述开发系统包括:接口管理模块,所述接口管理模块提供若干封装接口供用户选择配置所需的封装接口,每一接口为对Disruptor提供的多个原接口封装而成的接口,所述封装接口用于调用原接口所对应的组件;计算链路模快,用于提供若干不同的链路计算模型供用户选择配置对应的链路计算模型以对数据的异步计算;批处理模块,用于提供数据量参数以供用户动态配置处理数据的条数,所述数据量参数可供用户配置多条处理数据。本发明提高了开发效率和业务数据处理效率。
Description
技术领域
本发明涉及金融领域软件开发领域,尤其涉及一种基于Disruptor实现无锁式内存队列计算服务的开发系统。
背景技术
随着互联网的快速发展,在金融/交易领域存在大量高并发需求场景。传统的异步业务逻辑处理计算一般在内存中使用数组和链表以谋求高性能计算。但通过不加锁的方式实现的队列都是无界的,而加锁的方式,可以实现有界队列。在稳定性要求特别高的系统中,为了防止生产者速度过快,导致内存溢出,只能选择有界队列;同时,为了减少Java的垃圾回收对系统性能的影响,会尽量选择数组/堆格式的数据结构。但这种格式在实际使用中,会因为加锁和伪共享等出现严重的性能问题,导致业务计算出现算力瓶颈。而对于性能/可用性要求极高的金融领域,一直无法找到有效的异步计算的理想框架。开发订单处理等业务计算时往往无法在单个CPU上获得更快的性能,因此我们被迫将计算模型使用多核处理的并发模型,但编写并发软件对于大多数开发人员而言异常的困难,不仅锁和信号量是很难理解的和难以测试,并且各种并发模型也会随着系统的复杂性增加带来了不可预见的Bug和计算的不确定性。这意味着我们要花更多时间在计算模型控制上,而不是我们的业务领域问题。所以一款能够适用于日常快速开发,简化我们计算模型,并且充分利用目前主流的JDK 8以上版本新特性的业务处理框架成为我们的一个急迫的需求。
发明内容
本发明提供了一种可以提高开发效率和业务数据处理效率的基于Disruptor实现无锁式内存队列计算服务的开发系统。
本发明提供一种基于Disruptor实现无锁式内存队列计算服务的开发系统。该方法包括:接口管理模块,所述接口管理模块提供若干封装接口供用户选择配置所需的封装接口,每一接口为对Disruptor提供的多个原接口封装而成的接口,所述封装接口用于调用原接口所对应的组件;
计算链路模块,用于提供若干不同的链路计算模型供用户选择配置对应的链路计算模型以对数据的异步计算;
批处理模块,用于提供数据量参数以供用户动态配置处理数据的条数,所述数据量参数可供用户配置多条处理数据。
本申请以Disruptor框架为基础框架,并基于JDK 8+平台将Disruptor框架中的若干组件进行封装以获取若干功能更强的组件集合,并依据接口的功能特性将组件对应的接口进行封装;将所述Disruptor框架中的环形队列进行参数配置以控制接收的业务数据和环形队列的长度;通过对组件的封装、设置默认参数、选择预设计算链路模型可以实现大量数据进行同时处理并且减少了原来的框架在处理数据的过程中的问题,大大减少了开发人员的开发时间。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。
图1为本申请第一实施例提供的基于Disruptor实现无锁式内存队列计算服务的开发系统的结构示意图。
图2为本申请第一实施例提供的菱形计算链路模型和多边形计算链路模型的示意图。
图3为本申请第一实施例提供的基于Disruptor实现无锁式内存队列计算服务的开发系统的具体的结构示意图。
图4为本申请实施例提供的基于Disruptor实现无锁式内存队列计算服务的开发系统的计算机设备内部结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,如下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,在本申请中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
本申请提供了一种基于Disruptor实现无锁式内存队列计算服务的开发系统。Disruptor框架在出现数据处理不当时,会出现系统崩溃和内存泄漏,所述系统是在Disruptor框架上做进一步地优化而得到的,无锁式内存队列相较于加锁式内存队列计算数据地效率更高。所述Disruptor框架中有若干组件,环形内存队列和若干接口。
请结合参看图1,其为本申请第一实施例提供的基于Disruptor实现无锁式内存队列计算服务的开发系统的结构示意图。该基于Disruptor实现无锁式内存队列计算服务的开发系统1包括接口管理模块2、计算链路模块3、批处理模块4。
接口管理模块2,所述接口管理模块提供若干封装接口供用户选择配置所需的封装接口,每一接口为对Disruptor提供的多个原接口封装而成的接口,所述封装接口用于调用原接口所对应的组件。
Disruptor框架中有若干组件,每个组件都有对应的接口,将所述若干组件进行封装以获取若干功能更加强大的组件集合,每个组件集合都有对应的接口,利用JDK 8+基于Functional Interface特性对Disruptor框架中的接口依据使用方式进行封装。所述JDK8+是一个Java开发平台、语言运行环境,其中Disruptor框架也是运行在java平台上的。所述Functional Interface特性是功能接口特性,将Disruptor框架中的接口封装成新的接口,并统一接口的形式,封装好的接口可以用较少的代码直接调用,例如,在需要写数据和读数据时分别调用对应的接口就可以了。所述若干组件集合展现给开发人员并且被开发人员选择并最终以组件的形式配置生成环形内存队列,所述环形内存队列中有预先设置的环形数据转换算法实现,用于数据转换和控制内存回放。所述配置生成的环形队列使所在的DisruptorBoost框架在语法上更接近现代语言编程的习惯,语义更加清晰,开发人员理解更加方便,在开发时,所述环形队列是一个配置,即为默认出厂内存。
计算链路模块3,用于提供若干不同的链路计算模型供用户选择配置对应的链路计算模型以对数据的异步计算。
所述计算链路模型包括串型链路模型、并型链路模型和如图2所示的菱形模型和多边形链路模型。所述计算链路的区别之处在于处理节点不同,所述计算链路模型可以供开发人员根据业务数据涉及到的链路的节点的分布形态对模型进行选择以对输入的数据进行异步计算。
批处理模块4,用于提供数据量参数以供用户动态配置处理数据的条数,所述数据量参数可供用户配置多条处理数据。
Disruptor框架是对获取的数据进行指定处理,当前的数据处理完成后再对接下来的数据进行处理。所述数据量参数为接收到的需要处理的数据量的数量,优化后的框架可以同时处理多条数据。所述Translator实现,包括ZeroArgEvent,OneArgEvent,TwoArgEvent,ThreeArgEvent和VarargEvent,根据控制入参方式以控制内存,其中,默认设置参数是以占用最小内存使用为目标。优化框架具体包括:改变无锁式内存队列的长度、处理数据有间隔时的暂停方式、消费队列消息的方式。所述动态配置处理的数据的条数包括:在向环形队列输入数据的时,开发人员可以配置输入的消息的数量。使用优化后的框架可以减少开发时间,例如,接收到一百万行数据并将所述一百万行数据写到数据库,使用原来的处理这个过程要经过十个小时,而使用新的框架中的无锁式内存队列,并调用接口,一个小时就可以处理完成。
如图3所示,所述基于Disruptor实现无锁式内存队列计算服务的开发系统还包括:声明模块5、内存环形队列控制模块6、执行控制模块7、日志模块8、内存回收控制模块9、参数控制模块10。
所述声明模块5用于开发人员对接口进行声明,并由调用对应的接口对应的组件来实现所述声明。优化后的框架依据开发人员提供的声明提供接口和接口对应的组件以实现业务,开发人员可以在接口中自定义自己的声明算法以实现声明式的业务处理。
所述内存队列控制模块6,用于开发人员设置内存队列的参数,所述参数包括队列的长度、和控制输入数据的方式。所述控制输入数据的方式包括可以同时输入很多数据还是等待上一个数据处理完再输入下一个数据,所述队列的长度为内存环形队列的一周的可以加载的数据的数量。
所述执行控制模块7,用于当调用响应的封装接口对应的组件来执行某一条指令出现错误时,所述执行控制模块执行下一条指令。
所述日志模块8,用于记录处理业务数据过程中的出现的错误。
在处理的过程中出现错误,程序还会继续执行,处理其他的数据,通过日志的方式捕捉错误信息。
所述内存回收控制模块9,用于当一个参数存在于内存中且有一个相同的参数再次传到内存时,将所述相同的参数视为垃圾代码,将所述垃圾代码进行回收。
所述参数控制模块10,用于控制封装后的接口传输的数据量,通过控制加入到框架中的数量以控制内存垃圾的产生。
优化后DisruptorBoost的框架是一个采用了Buider设计模式通用型的框架,内置了标准化的异常处理,并且直接修复了Disruptor在异常处理中的某些错误,所述框架适合众多业务,例如,订单处理、处理大数据文件、对数据进行批量处理。所述Buider设计模式是一种规范框架的模式,内置了经过最佳实践验证的系统默认参数,实现了极低的开发门槛。所述开发系统设置了在推荐场景下开发代码执行的最小内存为4096或者8192个内存栅格即可实现高性能并发处理,最小化了内存的使用,GPU也会在可以接受范围内。
DisruptorBoost框架简化了开发高性能商业异步业务计算框架的难度,并通过同时处理大量数据可以将原来需要数周时间实现的功能降低到几天内完成;并且框架基于JDK 8+开发,更符合现代软件工程的设计思路和风格,降低开发中出现Bug的机会;通过严谨的代码实现,不仅提高了并发流式处理的易用性,而且在多线程并发场景下处理数据的性能更优;框架引入的环形队列、缓存行填充等,不仅改变了软件开发的方式,而且转变了架构思维。
本申请还提供一种计算机设备900,请结合参看图4,其为本申请第一实施例提供的计算机设备900的内部结构示意图。进一步的,该计算机嵌入式设备为HUD。计算机设备900至少包括存储器901、处理器902。具体地,存储器901,用于存储基于Disruptor实现无锁式内存队列计算服务的开发系统的程序指令。处理器902,用于执行程序指令以使计算机设备900实现上述的基于Disruptor实现无锁式内存队列计算服务的开发系统。
其中,存储器901至少包括一种类型的可读存储介质,该可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器901不仅可以用于存储安装于计算机设备900的应用软件及各类数据,例如,基于Disruptor实现无锁式内存队列计算服务的开发系统的控制指令等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器902在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器901中存储的程序指令或处理数据。具体地,处理器902执行基于Disruptor实现无锁式内存队列计算服务的开发系统的程序指令以控制计算机设备900实现基于Disruptor实现无锁式内存队列计算服务的开发系统。
进一步地,总线903可以是外设部件互连标准总线(peripheral componentinterconnect,简称PCI)或扩展工业标准结构总线(extended industry standardarchitecture,简称EISA)等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
进一步地,计算机设备900还可以包括显示组件904。显示组件904可以是LED(Light Emitting Diode,发光二极管)显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示组件904也可以适当的称为显示装置或显示单元,用于显示在计算机设备900中处理的信息以及用于显示可视化的用户界面。
进一步地,计算机设备900还可以包括通信组件905,通信组件905可选的可以包括有线通信组件和/或无线通信组件(如WI-FI通信组件、蓝牙通信组件等),通常用于在计算机设备900与其他计算机设备之间建立通信连接。
图4仅示出了具有组件901-905以及实现基于Disruptor实现无锁式内存队列计算服务的开发系统的程序指令的计算机设备900,本领域技术人员可以理解的是,图4示出的结构并不构成对计算机设备900的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,具体地,计算机设备900的处理器902执行基于Disruptor实现无锁式内存队列计算服务的开发系统的程序指令以控制计算机设备900实现可运动物体的运动轨迹的预测方法的详细过程。可以参考上述方法实施例中的对应过程,在此不再赘述。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,且本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
以上所列举的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属于本申请所涵盖的范围。
Claims (10)
1.一种基于Disruptor实现无锁式内存队列计算服务的开发系统,其特征在于,所述开发系统包括:
接口管理模块,所述接口管理模块提供若干封装接口供用户选择配置所需的封装接口,每一接口为对Disruptor提供的多个原接口封装而成的接口,所述封装接口用于调用原接口所对应的组件;
计算链路模块,用于提供若干不同的链路计算模型供用户选择配置对应的链路计算模型以对数据的异步计算;
批处理模块,用于提供数据量参数以供用户动态配置处理数据的条数,所述数据量参数可供用户配置多条处理数据。
2.如权利要求1所述的开发系统,其特征在于,每一封装接口利用JDK 8+对响应的原接口进行封装而成。
3.如权利要求1所述的开发系统,其特征在于,所述开发系统还包括声明模块,所述声明模块用于供用户对所述封装接口进行声明,所述声明由所述封装接口所对应的组件执行。
4.如权利要求1所述的开发系统,其特征在于,所述计算链路模块包括串型模型、并行模型、菱形模型和多边形链路。
5.如权利要求1所述的基于Disruptor实现无锁式内存队列计算服务的开发系统,其特征在于,所述开发系统提供的内存数据结构为内存环形队列,所述开发系统提供内存环形队列控制模块,用于向用户提供所述内存队列的参数以供用户设置以设置所述内存环形队列的长度、控制方式。
6.如权利要求1所述的基于Disruptor实现无锁式内存队列计算服务的开发系统,其特征在于,所述开发系统还包括执行控制模块和日志模块,所述执行控制模块用于当调用响应的封装接口对应的组件来执行某一条指令出现错误时,所述执行控制模块执行下一条指令,所述日志模块对所述错误进行记录。
7.如权利要求1所述的基于Disruptor实现无锁式内存队列计算服务的开发系统,其特征在于,所述开发系统还包括内存回收控制模块,所述内存回收控制模块用于当一个参数存在于内存中且所述一个参数再次传到内存时,将再次传到所述内存的所述一个参数进行回收。
8.如权利要求1所述的基于Disruptor实现无锁式内存队列计算服务的开发系统,其特征在于,所述开发系统还包括参数控制模块,用于控制所述封装接口传输参数的数量。
9.如权利要求1所述的开发系统,其特征在于,所述开发系统设置了开发代码执行的最小内存为4096或者8192个内存栅格。
10.如权利要求4所述的开发系统,其特征在于,所述开发系统采用builder设计模式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211241713.8A CN115629738A (zh) | 2022-10-11 | 2022-10-11 | 基于Disruptor实现无锁式内存队列计算服务的开发系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211241713.8A CN115629738A (zh) | 2022-10-11 | 2022-10-11 | 基于Disruptor实现无锁式内存队列计算服务的开发系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115629738A true CN115629738A (zh) | 2023-01-20 |
Family
ID=84904452
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211241713.8A Pending CN115629738A (zh) | 2022-10-11 | 2022-10-11 | 基于Disruptor实现无锁式内存队列计算服务的开发系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115629738A (zh) |
-
2022
- 2022-10-11 CN CN202211241713.8A patent/CN115629738A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11182204B2 (en) | System and method for batch evaluation programs | |
US8438365B2 (en) | Efficient data loading in a data-parallel processor | |
KR101900796B1 (ko) | 기민 통신 오퍼레이터 | |
AU2012256399B2 (en) | Registration and execution of highly concurrent processing tasks | |
US11556348B2 (en) | Bootstrapping profile-guided compilation and verification | |
US8214812B2 (en) | Method of interpreting method bytecode and system operated by the same | |
CN110162344B (zh) | 一种隔离限流的方法、装置、计算机设备及可读存储介质 | |
Garbervetsky et al. | Toward full elasticity in distributed static analysis: The case of callgraph analysis | |
CN117075930B (zh) | 一种计算框架管理系统 | |
CN111666210A (zh) | 一种芯片验证方法及装置 | |
CN116467061A (zh) | 一种任务执行的方法、装置、存储介质及电子设备 | |
JP2016511484A (ja) | コントラクトのためのオペレーティングシステムサポート | |
CN111240772A (zh) | 一种基于区块链的数据处理方法、装置及存储介质 | |
US10496433B2 (en) | Modification of context saving functions | |
US11520501B2 (en) | Automated learning technology to partition computer applications for heterogeneous systems | |
US11907296B2 (en) | Method and system for traversing an object graph using traversal context objects | |
US8387072B1 (en) | Transactional environments for event and data binding handlers | |
CN115629738A (zh) | 基于Disruptor实现无锁式内存队列计算服务的开发系统 | |
US8572585B2 (en) | Using compiler-generated tasks to represent programming elements | |
US11573777B2 (en) | Method and apparatus for enabling autonomous acceleration of dataflow AI applications | |
US11435989B2 (en) | Thread-local return structure for asynchronous state machine | |
CN111198689B (zh) | 一种代码执行方法、装置及计算机可读存储介质 | |
CN110347471B (zh) | 层级式显示组件系统、显示组件调用方法和装置 | |
US20130166887A1 (en) | Data processing apparatus and data processing method | |
CN112416362B (zh) | 一种pdk编译功能的实现方法 |
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 |