CN119806886A - 基于异步并行的服务器无感知应用分布式容错方法及系统 - Google Patents
基于异步并行的服务器无感知应用分布式容错方法及系统 Download PDFInfo
- Publication number
- CN119806886A CN119806886A CN202510003724.XA CN202510003724A CN119806886A CN 119806886 A CN119806886 A CN 119806886A CN 202510003724 A CN202510003724 A CN 202510003724A CN 119806886 A CN119806886 A CN 119806886A
- Authority
- CN
- China
- Prior art keywords
- log
- read
- asynchronous
- persistence
- write
- 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.)
- Granted
Links
Classifications
-
- 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
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种基于异步并行的服务器无感知应用分布式容错方法及系统,包括:将服务器无感知应用代码中对外部数据读写的调用转换为幂等数据读写API的调用;幂等数据读写API将读写依赖转换为对象引用的依赖链,返回结果及一个指向日志持久化结果的引用至数据存储管理器;日志异步调度器请求获取日志任务管理器储存幂等数据读写API调用的日志持久化任务及对应的语义信息,排序并构建日志持久化数据操作请求,得到日志管理结果;通过Actor模型根据日志管理结果执行数据存储管理器中的操作请求和引用。本发明能够应用在更广范围的代码中,在保证应用的幂等一致性的同时无需使用额外工具验证,具有更好的运行性能和更强的普适性。
Description
技术领域
本发明属于分布式计算和分布式系统技术领域,具体地,涉及一种基于异步并行的服务器无感知应用分布式容错方法及系统,适用于保障分布式服务器无感知函数运行的幂等一致性和高效性,涉及分布式计算、任务调度、幂等性操作和异步计算技术。
背景技术
近年来,服务器无感知应用(Serverless)逐渐成为了云计算的新型范式。服务器无感知应用又称函数即服务(Function-as-a-Service,FaaS),用户只需上传应用函数的代码并调用其他函数,由云计算服务提供商调度服务器资源和容器镜像来运行代码。由于服务器无感知应用按照函数实际使用次数计费,能够大幅降低传统应用服务器的运营成本。服务器无感知应用极大地简化了分布式系统工作流的开发流程,开发者不需要关心工作节点的调度问题,只需要编写具体的任务代码,便可以运行任务。服务器无感知应用往往与容器技术相结合,在函数请求到达云平台时,云平台在容器中加载函数对应的语言运行时及相关环境,再运行函数代码。在函数运行完成后,云平台会清理该容器的内容,回收容器使用的内存、硬盘、CPU等硬件资源。
在使用服务器无感知应用开发具有共享状态和持久化业务数据的应用时,往往需要通过调用外部数据库来实现持久化。服务器无感知应用中的函数时常因运行崩溃或者网络波动而中途中断,在此场景下,为保证应用执行成功的同时不出现数据不一致的现象,需要一定的手段来保证应用的容错性。
微软研究所的Srinath等人于2016年提出Olive客户端库,用意向锁的抽象,为使用共享外部存储的云计算代码提供了精确一次的容错语义和并发控制。Olive将用户自定义的对外部数据的读写操作包装在意向锁中,记录代码的运行状态、运行进度和执行结果,并通过DAAL(Distributed Atomic Affinity Logging)的日志方法实现原子性保证。在程序重启时,Olive会检查快照中该程序的运行进度,读取已运行指令的执行结果,恢复到崩溃前的节点重新运行。宾夕法尼亚大学的Haoran Zhang等人于2020年提出Beldi框架,将Olive扩展到有状态服务器无感知应用函数(Stateful Serverless Function,SSF)领域。Beldi同样使用了DAAL日志技术,但扩展了对函数同步或者异步调用的日志支持。Beldi基于DAAL提出Linked DAAL,解决了在函数输出数据量较大时单一读写操作无法记录完整的输出数据,导致缺乏原子性保证的问题。
Beldi虽然解决了分布式系统工作流以服务器无感知应用形式部署的容错问题,但也带来了较大的性能开销。得克萨斯大学奥斯汀分校的Zhipeng Jia等人于2021年提出Boki运行时,为服务器无感知应用函数提供共享日志API。Boki通过元日志(metalog)的抽象,对不同客户端并发附加的日志记录进行排序,并通过比较元日志的位置来决定最新的日志内容,保证了日志的读取一致性。在Boki的组件出错时,Boki的控制器会将现有的元日志使用Delos协议封存起来。在大多数的序列结点都成功封存后,Boki会重新配置整个系统的可用结点,实现从错误中恢复。Boki控制器的容错则由Zookeeper保证。由于Boki的控制结点、序列结点以及存储结点都可以独立扩展,Boki能够根据应用的性能需求弹性扩展,实现高性能的日志存储操作。基于Boki的日志API和Beldi的协议,论文作者实现了BokiFlow,在保证吞吐量等性能指标相比Beldi提升的同时提供了容错的分布式系统工作流。尽管Boki能够减少部分的性能开销,但需要使用其提供的函数运行时和日志服务,与云服务供应商绑定。同时Boki工作本身也由于实现的缺陷,不能在读-修改-写的场景下保证幂等一致性。
也有一些工作基于多版本并发控制(Multi Version Concurrency Control,MVCC)来解决分布式系统工作流以服务器无感知应用形式部署的容错问题。加州大学伯克利分校的Vikram等人于2020年提出AF中间层,通过MVCC实现了原子读(read atomic)一致性,保证函数不会读到未提交的中间日志结果。由于AFT提供的中间层需要包装数据库访问请求,因此应用AFT需要将其整合到云服务提供商的服务器无感知应用平台中,缺乏泛用性。
对于并发日志带来的性能开销,除了提升日志系统本身的性能之外,还可以通过减少不必要的日志操作来提升使用日志进行容错的分布式系统工作流的性能。一种思路是利用形式化验证来证明程序的幂等性或者确定性,对于通过证明的程序则无需记录日志,以此来降低日志所带来的开销。马萨诸塞大学阿默斯特分校的Jangda等人于2019年提出了服务器无感知应用语义的严格定义,并使用事务来确保函数的幂等性。但是该工作要求函数在云计算平台上的调用等价于串行执行,也不支持函数重试请求的情形,因此需要平台保证函数运行是幂等、可串行以及精确一次的。上海交通大学的Haorang Ding等人于2023年提出Flux系统,定义幂等一致性的概念,通过依赖-保证(Rely-Guarantee)证明技术简化了并发状态下的函数运行状态验证,从而无需平台保证函数运行与串行执行等价,完成对函数代码实现的验证。Flux系统能够验证用户编写程序的幂等一致性,并给出保证幂等的最优日志计划,减少不必要的日志操作。但是Flux的形式化验证技术基于在同一个函数中运行时的同步执行日志持久化的前提,因而不能应用到支持异步日志持久化操作的系统,也不能在此类系统中通过验证的方法得出正确的性能局部最优的日志方案。同时Flux形式化验证技术在应用代码中存在无界循环时,不能确保停机,在应用代码规模庞大时需要较长时间验证。
专利文献《分布式最终一致性事务解决方法、装置、设备及存储介质》(CN118444908A)将最终一致性事务实现与业务代码分离,提取通用性与标准化流程,形成最终一致性事务引擎,并以组件化的方式提供接入,从而解决代码复用、代码耦合、统一管理和事件溯源等问题,提供完善的功能和灵活的配置。但其作为分布式事务问题的解决方法,需要手动插入一致性注解,额外配置注解,要求开发者自行分析代码的一致性需求,在查询数据库任务记录时存在激烈的并发竞争,因此运行开销极大。
总而言之,现有的服务器无感知应用的容错方法,要么存在运行开销过大、性能较差的问题;要么具有一定的设计缺陷,无法保证在某些场景下的幂等一致性;要么泛用性较低,只能解决少部分简单应用的容错问题。
因此,亟需一种基于服务器无感知应用的异步日志管理与任务调度方法,实现在保证幂等一致性的前提下有效解决多种应用的容错问题,同时减少运行开销。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种基于异步并行的服务器无感知应用分布式容错方法及系统。
根据本发明提供的一种基于异步并行的服务器无感知应用分布式容错方法,包括:
输入读写步骤:将服务器无感知应用代码中对外部数据读写的调用转换为幂等数据读写API的调用;
节点构建步骤:构建日志任务管理器、日志异步调度器和数据存储管理器节点;
依赖链分析步骤:幂等数据读写API将读写依赖转换为对象引用的依赖链,返回结果及一个指向日志持久化结果的引用至数据存储管理器;
日志管理步骤:日志异步调度器请求获取日志任务管理器储存幂等数据读写API调用的日志持久化任务及对应的语义信息,排序并构建日志持久化数据操作请求,得到日志管理结果;
异步任务执行步骤:通过Actor模型根据日志管理结果执行数据存储管理器中的操作请求和引用。
优选地,所述日志异步任务调度器通过Ray框架实现,按设定间隔定时请求日志任务管理器,获取固定大小的日志持久化任务以及对应的语义信息,根据设定的调度策略对日志持久化任务排序,并依次批量地构建日志持久化数据操作请求,形成日志管理结果发送给数据存储管理器。
所述数据存储管理器通过对象引用的递归回溯将无保护的远程过程调用或HTTP请求转换为DAAL日志支持的操作。
当进行写操作API调用,直接调用数据存储管理器,向键值数据库发送DAAL日志写请求,写入数据及其日志;
当读操作API调用,数据存储管理器处理读操作本身的请求,转发给键值数据库后将键值数据库返回的读取结果发送给读操作API调用。
优选地,所述调度策略包括:
日志异步任务调度器仅在进行写外部数据操作时阻塞运行,直至前置读操作的日志被持久化到外部存储。
根据设定的时间和提交策略,定时从日志任务管理器中请求一批日志持久化任务,生成批量数据写入操作提交给数据存储管理器。
当函数负载较为均衡,对延迟敏感的情况下,选择FIFO调度策略;
当函数负载差异较大,存在长时间执行的函数时,选择RoundRobin调度策略;
当函数负载的执行时间远远超过平台调度运行的时间时,选择SJF调度策略。
优选地,所述输入读写步骤包括:
改写服务器无感知应用中的每个函数代码,将读写外部数据操作以及对其他函数的调用操作更改为调用幂等数据读写API发起读取请求,保持参数数量、种类和顺序不变,仅改变函数代码中实际调用的API接口。
所述读取请求包含读取的表名、键、字段列表和过滤条件。
所述日志任务管理器收集和存储来自服务器无感知应用的函数的日志持久化任务,将所有接收到的日志持久化任务存储在线程安全的多生产者多消费者队列中,为日志异步调度器提供批量消费接口,并提供日志持久化任务及对应的语义信息。
所述语义信息包括提交信息、提交者、键和时间信息。
优选地,所述依赖链分析步骤包括:
幂等数据读写API通过日志利用Ray框架的对象引用特性,在读操作结束后,提交异步的日志持久化任务,在日志持久化任务完成之前,返回操作结果及一个指向异步日志持久化任务结果的Ray对象引用;
在进行写操作时,根据传入的Ray对象引用,通过Ray对象引用机制跟踪接口回溯写入值,所依赖的所有读操作依次阻塞,等待与写操作相关的日志持久化任务完成。
所述异步任务执行步骤包括:
通过Actor模型将数据存储管理器转换后的DAAL日志读写请求,通过Ray框架的实时计算资源调度,根据硬件资源的负载情况,在空闲的节点上的空闲线程根据日志调度管理器的日志管理结果异步执行对应的日志持久化任务。
根据本发明提供一种基于异步并行的服务器无感知应用分布式容错系统,包括:幂等数据读写API、Actor模型、键值数据库、日志任务管理器、日志异步调度器和数据存储管理器。
幂等数据读写API接收服务器无感知应用函数中改写的幂等数据读写API调用,将读写依赖转换为对象引用的依赖链,返回结果及一个指向日志持久化结果的引用至数据存储管理器。
日志异步调度器请求获取日志任务管理器储存幂等数据读写API调用的日志持久化任务及对应的语义信息,排序并构建日志持久化数据操作请求,得到日志管理结果。
数据存储管理器将无保护的远程过程调用或HTTP请求转换为DAAL日志支持的操作请求。
通过Actor模型根据日志管理结果触发数据存储管理器中对键值数据库的操作请求和引用。
优选地,所述日志异步任务调度器通过Ray框架实现,按设定间隔定时请求日志任务管理器,获取固定大小的日志持久化任务以及对应的语义信息,根据设定的调度策略对日志持久化任务排序,并依次批量地构建日志持久化数据操作请求,形成日志管理结果发送给数据存储管理器。
所述数据存储管理器通过对象引用的递归回溯将无保护的远程过程调用或HTTP请求转换为DAAL日志支持的操作。
当进行写操作API调用,直接调用数据存储管理器,向键值数据库发送DAAL日志写请求,写入数据及其日志;
当读操作API调用,数据存储管理器处理读操作本身的请求,转发给键值数据库后将键值数据库返回的读取结果发送给读操作API调用。
优选地,所述调度策略包括:
日志异步任务调度器仅在进行写外部数据操作时阻塞运行,直至前置读操作的日志被持久化到外部存储。
根据设定的时间和提交策略,定时从日志任务管理器中请求一批日志持久化任务,生成批量数据写入操作提交给数据存储管理器。
当函数负载较为均衡,对延迟敏感的情况下,选择FIFO调度策略;
当函数负载差异较大,存在长时间执行的函数时,选择RoundRobin调度策略;
当函数负载的执行时间远远超过平台调度运行的时间时,选择SJF调度策略。
优选地,改写服务器无感知应用中的每个函数代码,将读写外部数据操作以及对其他函数的调用操作更改为调用幂等数据读写API发起读取请求,保持参数数量、种类和顺序不变,仅改变函数代码中实际调用的API接口。
所述读取请求包含读取的表名、键、字段列表和过滤条件。
所述日志任务管理器收集和存储来自服务器无感知应用的函数的日志持久化任务,将所有接收到的日志持久化任务存储在线程安全的多生产者多消费者队列中,为日志异步调度器提供批量消费接口,并提供日志持久化任务及对应的语义信息。
所述语义信息包括提交信息、提交者、键和时间信息。
优选地,所述幂等数据读写API通过日志利用Ray框架的对象引用特性,在读操作结束后,提交异步的日志持久化任务,在日志持久化任务完成之前,返回操作结果及一个指向异步日志持久化任务结果的Ray对象引用。
在进行写操作时,根据传入的Ray对象引用,通过Ray对象引用机制跟踪接口回溯写入值,所依赖的所有读操作依次阻塞,等待与写操作相关的日志持久化任务完成。
所述Actor模型将数据存储管理器转换后的DAAL日志读写请求,通过Ray框架的实时计算资源调度,根据硬件资源的负载情况,在空闲的节点上的空闲线程根据日志调度管理器的日志管理结果异步执行对应的日志持久化任务。
与现有技术相比,本发明具有如下的有益效果:
1、本发明基于Ray框架实现了数据读写操作的API,能够兼容多种底层数据库,不受限于特定的云服务提供商和数据库服务提供者,具有更强的普适性。
2、本发明不依赖形式化验证等静态分析的方法分析函数的代码,因此适用范围不受函数规模和无界循环等条件的限制,能够应用在更广范围的代码中,在保证应用的幂等一致性的同时无需使用额外工具验证,具有较多的性能优势。
3、本发明通过使用Ray的演员模型跟踪服务器无感知应用中的外部键值数据库读写请求依赖,将数据读写操作和对应的日志持久化操作解耦,通过异步批量执行的方式,在保证容错性的基础上还具有更好的运行性能。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其他特征、目的和优点将会变得更明显:
图1为基于Ray分布式系统框架实现服务器无感知应用容错的方法流程示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
根据本发明提供的一种基于异步并行的服务器无感知应用分布式容错方法,以Ray框架为基础,通过引入Actor模型,设计了日志任务管理器、日志异步任务调度器和数据存储管理器节点,并提供了一种支持幂等性操作的应用程序编程接口(API),以图1为例,包括:
输入读写步骤:编写服务器无感知应用代码并输入,将输入代码中的外部数据读写转换为所提供的幂等读写API调用;
具体地,包括:
代码API转换:改写服务器无感知应用中的每个函数代码,将输入的服务器无感知应用代码中对外部数据读写的调用更改为本方法提供的幂等读写API,也就是幂等数据读写API调用。也就是说,将对数据库的读写操作以及对其他函数的调用操作更改为使用数据读写操作API调用,保持原有调用的参数数量、种类和顺序不变,仅改变代码中实际调用的API接口。
在更多的优选例中,若一个服务器无感知应用函数需要从外部数据库读取数据并进行处理,则该函数通过调用幂等数据读写API发起读取请求。读取请求包含读取的表名、键、需要的字段列表以及过滤条件。API会返回读操作的结果和一个Ray对象引用,并同时提交一个异步日志持久化任务。该日志持久化任务,也就是日志持久化操作请求,将日志数据(例如读取的数据内容)持久化到外部存储中,并返回一个任务结果。此时,函数的主逻辑可以继续执行。
节点构建步骤:构建日志任务管理器、日志异步调度器和数据存储管理器节点;
日志任务管理器利用Ray框架和Actor模型,使用线程安全的多生产者多消费者队列,将分布式环境中的日志状态共享问题与异步任务执行高效结合,在日志任务管理过程中实现日志存储与管理优化,利用Ray的异步并行处理能力和异构集群扩展性,显著提升了日志持久化的吞吐量与性能。包括以下功能:
在并发调用数据读写API时,并发安全地将所有日志持久化任务存储在队列中;
为日志异步调度器提供批量消费接口,并提供任务相关的提交者和时间信息以实现更高效的调度算法。
具体地,日志任务管理器负责收集和存储来自服务器无感知函数的读日志持久化任务,以供日志异步任务调度器调度到集群中的结点并执行。日志异步任务管理器将所有接收到的读日志持久化任务存储在线程安全的多生产者多消费者队列中。在日志异步任务调度器消费持久化任务时,提供任务以及任务相关的提交信息、提交者以及键等语义信息,以支持高效的调度策略。
日志异步任务调度器通过Ray框架实现,其实现方法包括:
在应用函数运行过程中,在日志持久化与读外部存储数据库之间引入中断点,将日志持久化操作从主逻辑中分离出来,采用异步执行逻辑转为异步执行。降低了应用函数主逻辑的阻塞时间,提升了整体系统性能。
在更多的优选例中,日志异步任务调度器定时地请求日志任务管理器,获取固定大小的日志持久化任务以及对应的语义信息。接着日志异步任务调度器根据设定的策略来对消费的日志持久化任务排序,并依次批量地构建日志持久化数据操作请求,发送给数据存储管理器。
具体地,异步日志读写任务调度的策略为:
步骤S3.1:在函数的内部运算及读写操作尚未持久化到外部可见存储中时,无需保证一致性;
步骤S3.2:仅在应用唤起写外部数据操作时阻塞运行,直至其前置读操作的日志被持久化到外部存储。
步骤S3.3:根据设定的时间和提交策略,定时从日志任务管理器中消费一批日志持久化任务,生成批量数据写入操作提交给数据存储管理器。通过批量执行日志持久化的方法,减少了与数据库服务通信的次数,从而进一步提升了系统的性能。
对于日志异步任务调度,根据实际情况选用最适合负载的调度策略。调度策略可以使用FIFO(先到先执行),也可在调用者层面使用RoundRobin或者SJF等调度策略。具体地,当函数负载较为均衡,对延迟敏感的情况下,选择FIFO调度策略;当函数负载差异较大,存在长时间执行的函数时,选择RoundRobin调度策略;当函数负载的执行时间远远超过平台调度运行的时间时,选择SJF调度策略。
数据存储管理器节点通过以下方式实现幂等性数据库读写操作:
将无保护的远程过程调用或HTTP请求转换为DAAL日志支持的操作;
利用Ray的Actor模型建立读写操作间的依赖链,通过对象引用的递归回溯确保日志与数据库操作的原子性,从而保证幂等一致性。
具体地,数据存储管理器将日志异步任务调度器发送的日志持久化数据操作请求转化为DAAL日志读写请求,进一步发送给实际的键值数据库服务提供商,用于实现日志持久化操作。
对于写操作API调用,会直接调用数据存储管理器,向键值数据库发送DAAL日志写请求,原子地写入数据及其日志。对于读操作API调用,数据存储管理器负责处理其读操作本身的请求,转发给键值数据库后将数据库返回的读取结果发送给读操作API调用者。
在继承DAAL框架日志与数据库操作原子性保障机制的基础上,改进日志设计,将读操作日志持久化与读数据库操作分离为独立任务运行,避免阻塞函数主逻辑运行,去除了WAL日志,使其以异步方式独立运行,减少了日志操作对系统性能的影响,提高系统性能。
依赖链分析步骤:支持幂等一致性的数据读写的API接口,利用Ray框架的对象引用(ObjectRef)特性,将读写依赖转换为对象引用的依赖链,确保写操作仅在相关的日志持久化任务完成后触发。
提供了一种支持幂等一致性的数据读写的API接口,该接口在服务器无感知应用函数执行过程中执行:
步骤S4.1:通过日志确保函数运行崩溃时的幂等一致性;
步骤S4.2:在读外部存储数据库操作结束后,提交异步日志任务并返回本次读操作的结果及一个指向异步日志持久化结果的Ray对象引用;
步骤S4.3:在进行写外部数据库操作时,通过Ray的对象引用机制依次阻塞等待与写操作相关的日志持久化任务完成,确保外部数据库写操作的原子性与一致性。
在读操作完成后立即返回结果及一个指向日志持久化结果的引用,并在写操作中通过递归阻塞确保日志持久化任务完成后再执行写操作,从而保证操作的一致性和幂等性。
在更多的优选例中,利用Ray的Actor模型和对象引用来跟踪读写操作间的依赖链。读操作API调用时会返回对象引用而非实际的值,在日志持久化任务完成之前,读操作的返回值,以及依赖该值的计算结果,于Ray框架中都以对象引用的形式存在。当写操作API被调用时,根据传入的对象引用,利用Ray对象引用的跟踪接口回溯写入值所依赖的所有读取操作,并阻塞地等待这些读取操作的日志持久化任务完成。
异步任务执行步骤:通过使用Actor模型管理和维护异步执行日志,实现对服务器无感知应用函数运行过程中外部数据读写操作的异步任务管理和执行。数据存储管理器转换后的DAAL日志读写请求,通过Ray框架的实时计算资源调度,根据当前硬件资源的负载情况,在空闲的节点上的空闲线程异步执行该请求对应的日志任务。通过调用Ray框架的异步执行接口,提供异步语义,预先分配空闲计算资源池实现。
通过使用Ray的演员模型跟踪服务器无感知应用中的外部键值数据库读写请求依赖,解耦读写操作的日志和操作本身的计算,实现了异步加速,可以支持更丰富的应用代码,在保证应用的幂等一致性的同时无需使用额外工具验证,有效提升服务器无感知应用中数据读写操作的日志持久化的性能,在保证容错性上解决了现有技术中日志操作阻塞主函数逻辑运行、性能开销过大和易用性和普适性较低的问题。
本发明还提供一种基于异步并行的服务器无感知应用分布式容错系统,所述基于异步并行的服务器无感知应用分布式容错系统可以通过执行所述基于异步并行的服务器无感知应用分布式容错方法的流程步骤予以实现,即本领域技术人员可以将所述基于异步并行的服务器无感知应用分布式容错方法理解为所述基于异步并行的服务器无感知应用分布式容错系统的优选实施方式。
相比Beldi,读操作的中位延迟降低131倍,p99延迟降低490倍,范围读的中位延迟降低22万倍,p99延迟降低14万倍。在典型负载的应用场景下,应用端到端运行延迟降低37%。
根据本发明提供的一种基于异步并行的服务器无感知应用分布式容错系统,属于分布式计算系统,利用Ray框架进行任务调度和计算,且该系统中的应用为服务器无感知应用。包括:幂等数据读写API、Actor模型、键值数据库、日志任务管理器、日志异步调度器和数据存储管理器。
服务器无感知应用中的函数的运行过程包括从外部数据库读取数据、进行计算并将计算结果写回外部数据库。在这个过程中,异步日志管理和任务调度能够高效地保证操作的幂等一致性。
日志任务管理器:负责跨计算节点及函数调用实例收集和管理日志持久化任务,为调度器提供调度的语义信息;
日志异步调度器:通过批处理收集和执行日志持久化任务,充分利用Ray集群计算高吞吐量的优势;
数据存储管理器:封装数据库的读写操作,将传统远程过程调用或HTTP请求转为支持幂等一致性的DAAL读写操作。
幂等数据读写API接收服务器无感知应用函数中改写的幂等数据读写API调用,将读写依赖转换为对象引用的依赖链,返回结果及一个指向日志持久化结果的引用至数据存储管理器。
日志异步调度器请求获取日志任务管理器储存幂等数据读写API调用的日志持久化任务及对应的语义信息,排序并构建日志持久化数据操作请求,得到日志管理结果。
数据存储管理器将无保护的远程过程调用或HTTP请求转换为DAAL日志支持的操作请求。
通过Actor模型根据日志管理结果触发数据存储管理器中对键值数据库的操作请求和引用。
在更多的优选例中,所述日志异步任务调度器通过Ray框架实现,按设定间隔定时请求日志任务管理器,获取固定大小的日志持久化任务以及对应的语义信息,根据设定的调度策略对日志持久化任务排序,并依次批量地构建日志持久化数据操作请求,形成日志管理结果发送给数据存储管理器。
所述数据存储管理器通过对象引用的递归回溯将无保护的远程过程调用或HTTP请求转换为DAAL日志支持的操作;
当进行写操作API调用,直接调用数据存储管理器,向键值数据库发送DAAL日志写请求,写入数据及其日志;
当读操作API调用,数据存储管理器处理读操作本身的请求,转发给键值数据库后将键值数据库返回的读取结果发送给读操作API调用。
在更多的优选例中,所述调度策略包括:
日志异步任务调度器仅在进行写外部数据操作时阻塞运行,直至前置读操作的日志被持久化到外部存储。
根据设定的时间和提交策略,定时从日志任务管理器中请求一批日志持久化任务,生成批量数据写入操作提交给数据存储管理器。
当函数负载较为均衡,对延迟敏感的情况下,选择FIFO调度策略;
当函数负载差异较大,存在长时间执行的函数时,选择RoundRobin调度策略;
当函数负载的执行时间远远超过平台调度运行的时间时,选择SJF调度策略。
在更多的优选例中,改写服务器无感知应用中的每个函数代码,将读写外部数据操作以及对其他函数的调用操作更改为调用幂等数据读写API发起读取请求,保持参数数量、种类和顺序不变,仅改变函数代码中实际调用的API接口。
所述读取请求包含读取的表名、键、字段列表和过滤条件。
所述日志任务管理器收集和存储来自服务器无感知应用的函数的日志持久化任务,将所有接收到的日志持久化任务存储在线程安全的多生产者多消费者队列中,为日志异步调度器提供批量消费接口,并提供日志持久化任务及对应的语义信息。
所述语义信息包括提交信息、提交者、键和时间信息。
在更多的优选例中,所述幂等数据读写API通过日志利用Ray框架的对象引用特性,在读操作结束后,提交异步的日志持久化任务,在日志持久化任务完成之前,返回操作结果及一个指向异步日志持久化任务结果的Ray对象引用。
在进行写操作时,根据传入的Ray对象引用,通过Ray对象引用机制跟踪接口回溯写入值,所依赖的所有读操作依次阻塞,等待与写操作相关的日志持久化任务完成。
所述Actor模型将数据存储管理器转换后的DAAL日志读写请求,通过Ray框架的实时计算资源调度,根据硬件资源的负载情况,在空闲的节点上的空闲线程根据日志调度管理器的日志管理结果异步执行对应的日志持久化任务。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (10)
1.一种基于异步并行的服务器无感知应用分布式容错方法,其特征在于,包括:
输入读写步骤:将服务器无感知应用代码中对外部数据读写的调用转换为幂等数据读写API的调用;
节点构建步骤:构建日志任务管理器、日志异步调度器和数据存储管理器节点;
依赖链分析步骤:幂等数据读写API将读写依赖转换为对象引用的依赖链,返回结果及一个指向日志持久化结果的引用至数据存储管理器;
日志管理步骤:日志异步调度器请求获取日志任务管理器储存幂等数据读写API调用的日志持久化任务及对应的语义信息,排序并构建日志持久化数据操作请求,得到日志管理结果;
异步任务执行步骤:通过Actor模型根据日志管理结果执行数据存储管理器中的操作请求和引用。
2.根据权利要求1所述的基于异步并行的服务器无感知应用分布式容错方法,其特征在于,所述日志异步任务调度器通过Ray框架实现,按设定间隔定时请求日志任务管理器,获取固定大小的日志持久化任务以及对应的语义信息,根据设定的调度策略对日志持久化任务排序,并依次批量地构建日志持久化数据操作请求,形成日志管理结果发送给数据存储管理器;
所述数据存储管理器通过对象引用的递归回溯将无保护的远程过程调用或HTTP请求转换为DAAL日志支持的操作;
当进行写操作API调用,直接调用数据存储管理器,向键值数据库发送DAAL日志写请求,写入数据及其日志;
当读操作API调用,数据存储管理器处理读操作本身的请求,转发给键值数据库后将键值数据库返回的读取结果发送给读操作API调用。
3.根据权利要求2所述的基于异步并行的服务器无感知应用分布式容错方法,其特征在于,所述调度策略包括:
日志异步任务调度器仅在进行写外部数据操作时阻塞运行,直至前置读操作的日志被持久化到外部存储;
根据设定的时间和提交策略,定时从日志任务管理器中请求一批日志持久化任务,生成批量数据写入操作提交给数据存储管理器;
当函数负载较为均衡,对延迟敏感的情况下,选择FIFO调度策略;
当函数负载差异较大,存在长时间执行的函数时,选择RoundRobin调度策略;
当函数负载的执行时间远远超过平台调度运行的时间时,选择SJF调度策略。
4.根据权利要求1所述的基于异步并行的服务器无感知应用分布式容错方法,其特征在于,所述输入读写步骤包括:
改写服务器无感知应用中的每个函数代码,将读写外部数据操作以及对其他函数的调用操作更改为调用幂等数据读写API发起读取请求,保持参数数量、种类和顺序不变,仅改变函数代码中实际调用的API接口;
所述读取请求包含读取的表名、键、字段列表和过滤条件;
所述日志任务管理器收集和存储来自服务器无感知应用的函数的日志持久化任务,将所有接收到的日志持久化任务存储在线程安全的多生产者多消费者队列中,为日志异步调度器提供批量消费接口,并提供日志持久化任务及对应的语义信息;
所述语义信息包括提交信息、提交者、键和时间信息。
5.根据权利要求1所述的基于异步并行的服务器无感知应用分布式容错方法,其特征在于,所述依赖链分析步骤包括:
幂等数据读写API通过日志利用Ray框架的对象引用特性,在读操作结束后,提交异步的日志持久化任务,在日志持久化任务完成之前,返回操作结果及一个指向异步日志持久化任务结果的Ray对象引用;
在进行写操作时,根据传入的Ray对象引用,通过Ray对象引用机制跟踪接口回溯写入值,所依赖的所有读操作依次阻塞,等待与写操作相关的日志持久化任务完成;
所述异步任务执行步骤包括:
通过Actor模型将数据存储管理器转换后的DAAL日志读写请求,通过Ray框架的实时计算资源调度,根据硬件资源的负载情况,在空闲的节点上的空闲线程根据日志调度管理器的日志管理结果异步执行对应的日志持久化任务。
6.一种基于异步并行的服务器无感知应用分布式容错系统,其特征在于,包括:幂等数据读写API、Actor模型、键值数据库、日志任务管理器、日志异步调度器和数据存储管理器;
幂等数据读写API接收服务器无感知应用函数中改写的幂等数据读写API调用,将读写依赖转换为对象引用的依赖链,返回结果及一个指向日志持久化结果的引用至数据存储管理器;
日志异步调度器请求获取日志任务管理器储存幂等数据读写API调用的日志持久化任务及对应的语义信息,排序并构建日志持久化数据操作请求,得到日志管理结果;
数据存储管理器将无保护的远程过程调用或HTTP请求转换为DAAL日志支持的操作请求;
通过Actor模型根据日志管理结果触发数据存储管理器中对键值数据库的操作请求和引用。
7.根据权利要求6所述的基于异步并行的服务器无感知应用分布式容错系统,其特征在于,所述日志异步任务调度器通过Ray框架实现,按设定间隔定时请求日志任务管理器,获取固定大小的日志持久化任务以及对应的语义信息,根据设定的调度策略对日志持久化任务排序,并依次批量地构建日志持久化数据操作请求,形成日志管理结果发送给数据存储管理器;
所述数据存储管理器通过对象引用的递归回溯将无保护的远程过程调用或HTTP请求转换为DAAL日志支持的操作;
当进行写操作API调用,直接调用数据存储管理器,向键值数据库发送DAAL日志写请求,写入数据及其日志;
当读操作API调用,数据存储管理器处理读操作本身的请求,转发给键值数据库后将键值数据库返回的读取结果发送给读操作API调用。
8.根据权利要求7所述的基于异步并行的服务器无感知应用分布式容错系统,其特征在于,所述调度策略包括:
日志异步任务调度器仅在进行写外部数据操作时阻塞运行,直至前置读操作的日志被持久化到外部存储;
根据设定的时间和提交策略,定时从日志任务管理器中请求一批日志持久化任务,生成批量数据写入操作提交给数据存储管理器;
当函数负载较为均衡,对延迟敏感的情况下,选择FIFO调度策略;
当函数负载差异较大,存在长时间执行的函数时,选择RoundRobin调度策略;
当函数负载的执行时间远远超过平台调度运行的时间时,选择SJF调度策略。
9.根据权利要求6所述的基于异步并行的服务器无感知应用分布式容错系统,其特征在于,改写服务器无感知应用中的每个函数代码,将读写外部数据操作以及对其他函数的调用操作更改为调用幂等数据读写API发起读取请求,保持参数数量、种类和顺序不变,仅改变函数代码中实际调用的API接口;
所述读取请求包含读取的表名、键、字段列表和过滤条件;
所述日志任务管理器收集和存储来自服务器无感知应用的函数的日志持久化任务,将所有接收到的日志持久化任务存储在线程安全的多生产者多消费者队列中,为日志异步调度器提供批量消费接口,并提供日志持久化任务及对应的语义信息;
所述语义信息包括提交信息、提交者、键和时间信息。
10.根据权利要求6所述的基于异步并行的服务器无感知应用分布式容错系统,其特征在于,所述幂等数据读写API通过日志利用Ray框架的对象引用特性,在读操作结束后,提交异步的日志持久化任务,在日志持久化任务完成之前,返回操作结果及一个指向异步日志持久化任务结果的Ray对象引用;
在进行写操作时,根据传入的Ray对象引用,通过Ray对象引用机制跟踪接口回溯写入值,所依赖的所有读操作依次阻塞,等待与写操作相关的日志持久化任务完成;
所述Actor模型将数据存储管理器转换后的DAAL日志读写请求,通过Ray框架的实时计算资源调度,根据硬件资源的负载情况,在空闲的节点上的空闲线程根据日志调度管理器的日志管理结果异步执行对应的日志持久化任务。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202510003724.XA CN119806886B (zh) | 2025-01-02 | 2025-01-02 | 基于异步并行的服务器无感知应用分布式容错方法及系统 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202510003724.XA CN119806886B (zh) | 2025-01-02 | 2025-01-02 | 基于异步并行的服务器无感知应用分布式容错方法及系统 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN119806886A true CN119806886A (zh) | 2025-04-11 |
| CN119806886B CN119806886B (zh) | 2025-11-04 |
Family
ID=95271882
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202510003724.XA Active CN119806886B (zh) | 2025-01-02 | 2025-01-02 | 基于异步并行的服务器无感知应用分布式容错方法及系统 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN119806886B (zh) |
Citations (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20130110767A1 (en) * | 2011-10-26 | 2013-05-02 | Nec Laboratories America, Inc. | Online Transaction Processing |
| CN113220490A (zh) * | 2021-05-31 | 2021-08-06 | 清华大学 | 异步写回持久化内存的事务持久化方法及系统 |
| CN115244514A (zh) * | 2020-03-12 | 2022-10-25 | 思科技术公司 | 专用处理单元的功能即服务(faas)模型 |
| CN116627775A (zh) * | 2023-07-24 | 2023-08-22 | 北京大学 | 有状态的服务器无感知函数的写优化方法和装置 |
| CN117336148A (zh) * | 2023-09-28 | 2024-01-02 | 天津大学 | 一种面向serverless工作流的高效容错机制优化方法 |
| WO2024114484A1 (zh) * | 2022-12-02 | 2024-06-06 | 中国科学院深圳先进技术研究院 | 一种服务器无感知计算自适应资源调度方法、系统及计算机设备 |
| US20240411357A1 (en) * | 2023-06-06 | 2024-12-12 | International Business Machines Corporation | Managing power for serverless computing |
-
2025
- 2025-01-02 CN CN202510003724.XA patent/CN119806886B/zh active Active
Patent Citations (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20130110767A1 (en) * | 2011-10-26 | 2013-05-02 | Nec Laboratories America, Inc. | Online Transaction Processing |
| CN115244514A (zh) * | 2020-03-12 | 2022-10-25 | 思科技术公司 | 专用处理单元的功能即服务(faas)模型 |
| CN113220490A (zh) * | 2021-05-31 | 2021-08-06 | 清华大学 | 异步写回持久化内存的事务持久化方法及系统 |
| WO2024114484A1 (zh) * | 2022-12-02 | 2024-06-06 | 中国科学院深圳先进技术研究院 | 一种服务器无感知计算自适应资源调度方法、系统及计算机设备 |
| US20240411357A1 (en) * | 2023-06-06 | 2024-12-12 | International Business Machines Corporation | Managing power for serverless computing |
| CN116627775A (zh) * | 2023-07-24 | 2023-08-22 | 北京大学 | 有状态的服务器无感知函数的写优化方法和装置 |
| CN117336148A (zh) * | 2023-09-28 | 2024-01-02 | 天津大学 | 一种面向serverless工作流的高效容错机制优化方法 |
Non-Patent Citations (3)
| Title |
|---|
| HAORAN DING等: "Automated Verification of Idempotence for Stateful Serverless Applications", PROCEEDINGS OF THE 17TH USENIX SYMPOSIUM ON OPERATING SYSTEMS DESIGN AND IMPLEMENTATION, 31 July 2023 (2023-07-31) * |
| 丁乙;李荣宽;汪敏;贲婷婷;朱勇;: "面向军用微服务的服务网格架构研究与设计", 指挥信息系统与技术, no. 01, 28 February 2020 (2020-02-28) * |
| 陈波;陆游游;蔡涛;陈游旻;屠要峰;舒继武;: "一种分布式持久性内存文件系统的一致性机制", 计算机研究与发展, no. 03, 15 March 2020 (2020-03-15) * |
Also Published As
| Publication number | Publication date |
|---|---|
| CN119806886B (zh) | 2025-11-04 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| Wang et al. | Lineage stash: fault tolerance off the critical path | |
| Carbone et al. | State management in Apache Flink®: consistent stateful distributed stream processing | |
| US7680793B2 (en) | Commit-time ordered message queue supporting arbitrary read and dequeue patterns from multiple subscribers | |
| US10970277B2 (en) | System and method for dynamic conversion of database accessing scripts during runtime in a mainframe rehosting platform | |
| US7665093B2 (en) | Synchronization of runtime and application state via batching of workflow transactions | |
| Margara et al. | A model and survey of distributed data-intensive systems | |
| US20210382636A1 (en) | Customizable lock management for distributed resources | |
| US10379914B2 (en) | System and method for achieving specific behaviors by intercepting file access calls in a mainframe rehosting platform | |
| Memishi et al. | Fault tolerance in MapReduce: A survey | |
| Fan et al. | 2PC*: a distributed transaction concurrency control protocol of multi-microservice based on cloud computing platform | |
| WO2018176356A1 (en) | System and method for determining the success of a cross-platform application migration | |
| US10534640B2 (en) | System and method for providing a native job control language execution engine in a rehosting platform | |
| Pandey et al. | LIFT-A new linear two-phase commit protocol | |
| US20140040191A1 (en) | Inventorying and copying file system folders and files | |
| Shrivastava et al. | Real time transaction management in replicated DRTDBS | |
| Shrivastava et al. | Supporting transaction predictability in replicated DRTDBS | |
| Goniwada | Cloud native architecture and design patterns | |
| CN119806886B (zh) | 基于异步并行的服务器无感知应用分布式容错方法及系统 | |
| Liu et al. | Rethinking state management in actor systems for cloud-native applications | |
| CN118260049A (zh) | 一种基于Flink流式处理的可靠事务性交易方法 | |
| Burckhardt et al. | Netherite: efficient execution of serverless workflows | |
| Pandey et al. | SP-LIFT: a serial parallel linear and fast-paced recovery-centered transaction commit protocol | |
| CN118964053A (zh) | 任务执行方法、装置、存储介质以及电子设备 | |
| Mukherjee et al. | Reliable state machines: A framework for programming reliable cloud services | |
| Lev-Ari et al. | Quick: a queuing system in cloudkit |
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 | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant |