CN117992300A - 流式数据处理系统及其操作方法、网络设备及存储介质 - Google Patents

流式数据处理系统及其操作方法、网络设备及存储介质 Download PDF

Info

Publication number
CN117992300A
CN117992300A CN202211387554.2A CN202211387554A CN117992300A CN 117992300 A CN117992300 A CN 117992300A CN 202211387554 A CN202211387554 A CN 202211387554A CN 117992300 A CN117992300 A CN 117992300A
Authority
CN
China
Prior art keywords
operator
stateful
sketch
stateful operator
application program
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
Application number
CN202211387554.2A
Other languages
English (en)
Inventor
黄群
孙海峰
姚信
陈力
张弓
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Peking University
Huawei Technologies Co Ltd
Original Assignee
Peking University
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Peking University, Huawei Technologies Co Ltd filed Critical Peking University
Priority to CN202211387554.2A priority Critical patent/CN117992300A/zh
Publication of CN117992300A publication Critical patent/CN117992300A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3006Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3051Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请实施例公开了一种流式数据处理系统及其操作方法,属于流式数据处理技术领域。在该方法中,将第一应用程序编译为基于sketch的第二应用程序。由于sketch是一种将计算任务压缩为哈希表的数据结构,而通过哈希表进行运算所需的资源开销较少,因此通过本申请实施例提供的方法可以降低运行应用程序所需的资源开销,从而提高流式数据处理系统的数据处理速率。并且,编译第一应用程序时,考虑了用户设置的第一应用程序的目标精度,因此编译后的第二应用程序也满足用户的精度意图。因此,本申请实施例提供的方法可以实现在满足用户指定的精度意图的情况下提高流式数据处理系统的数据处理速率。

Description

流式数据处理系统及其操作方法、网络设备及存储介质
技术领域
本申请实施例涉及流式数据处理技术领域,特别涉及一种流式数据处理系统及其操作方法、网络设备及存储介质。
背景技术
流式数据处理系统是一种对数据流进行处理的系统。流式数据处理系统上运行有多个应用程序,每个应用程序对应一个业务功能,该业务功能比如可以为网络攻击检测或特定流量检测等。对于任一应用程序,流式数据处理系统基于接收到的数据流计算并存储该应用程序对应的数据处理结果。考虑到数据流的传输速率通常比较大,如何提高分布式数据处理系统中的数据处理速率是当前研究的热点。
发明内容
本申请实施例提供了一种流式数据处理系统及其操作方法、网络设备及存储介质,可以在保证计算精度的情况下提高流式数据处理系统的数据处理速率。技术方案如下:
第一方面,提供了一种流式数据处理系统的操作方法。流式数据处理系统包括接口模块、编译模块以及运行模块。在该方法中,接口模块获取基于流式语言的第一应用程序,第一应用程序包括至少一个流式语言算子和目标精度;编译模块根据至少一个流式语言算子和目标精度,将第一应用程序编译为基于数据概要sketch的第二应用程序;编译模块将第二应用程序卸载至运行模块,以使运行模块运行第二应用程序。
在本申请实施例中,将第一应用程序编译为基于sketch的第二应用程序。由于sketch是一种将计算任务压缩为哈希表的数据结构,而通过哈希表进行运算所需的资源开销较少,因此通过本申请实施例提供的方法可以降低运行应用程序所需的资源开销,从而提高流式数据处理系统的数据处理速率。并且,编译第一应用程序时,考虑了用户设置的第一应用程序的目标精度,因此编译后的第二应用程序也满足用户的精度意图。因此,本申请实施例提供的方法可以实现在满足用户指定的精度意图的情况下提高流式数据处理系统的数据处理速率。
基于第一方面提供的方法,在一些实施例中,接口模块包括编程界面。这种场景下,接口模块获取基于流式语言的第一应用程序的实现方式可以为:接口模块响应于用户在编程界面输入的目标精度和至少一个流式语言算子,获取第一应用程序。
为了感知用户的精度意图,本申请实施例对精度意图进行形式化,使得用户可以在编写第一应用程序时能够通过编程界面显式指定能够接受的误差范围(也即精度意图)。用户指定的精度意图为目标精度。
基于第一方面提供的方法,在一些实施例中,根据至少一个流式语言算子和目标精度,将第一应用程序编译为基于数据概要sketch的第二应用程序的实现方式可以为:确定至少一个流式语言算子中的至少一个有状态算子,有状态算子是指在每次计算时存储当前计算结果以在下一次计算时使用上一次计算结果继续计算的算子;确定至少一个有状态算子中每个有状态算子对应的sketch;根据目标精度确定每个有状态算子对应的sketch的参数值;根据至少一个有状态算子中每个有状态算子对应的sketch的参数值,生成第二应用程序。
由于有状态算子在维护在需要占用大量内存空间,因此在本申请实施例中,可以对第一应用程序中的有状态算子进行sketch映射,以降低编译后的第二应用程序运行时的资源开销。
基于第一方面提供的方法,在一些实施例中,至少一个有状态算子包括第一有状态算子,第一有状态算子为流式语言的库中的有状态算子。这种场景下,确定至少一个有状态算子中每个有状态算子对应的sketch的实现方式可以为:将第一有状态算子进行sketch映射,得到与第一有状态算子对应的sketch。
由于流式语言库中的算子为广泛使用的算子,且这些算子目前已经有对应的sketch。比如对于流式语言中的reduce与distinct算子,这两个算子用于实现常见的计数与去重操作。许多现有的sketch能够实现上述操作,例如Count(计数)Sketch和Count-min(最小计数)Sketch能够实现计数操作,Bloom Filter(布隆过滤器)和Counting BloomFilter(计数布隆过滤器)能够实现去重操作。因此对于第一有状态算子,可以直接将第一有状态算子进行sketch映射,得到与第一有状态算子对应的sketch。
基于第一方面提供的方法,在一些实施例中,将第一有状态算子进行sketch映射,得到与第一有状态算子对应的sketch的实现方式可以为:获取算子映射关系,算子映射关系包括多个内置算子标识以及与多个内置算子标识分别对应的sketch标识,每个内置算子标识指示流式语言的库中的一个有状态算子,每个内置算子标识所指示的有状态算子与对应的sketch标识所指示的sketch的逻辑功能相同;从算子映射关系中获取与目第一有状态算子的标识对应的sketch标识;根据与第一有状态算子的标识对应的sketch标识,确定与第一有状态算子对应的sketch。
由于流式语言的库中的算子目前已经有对应的sketch,因此可以预先设置算子映射关系,以便于在编译第一应用程序时,快速对第一有状态算子进行sketch映射,提高了编译效率。
基于第一方面提供的方法,在一些实施例中,至少一个有状态算子包括第二有状态算子,第二有状态算子为自定义有状态算子。这种场景下,确定至少一个有状态算子中每个有状态算子对应的sketch的实现方式可以为:编译与第二有状态算子对应的sketch。
第二有状态算子是用户自定义的函数,而用户自定义的函数具备高度的灵活性,通常会维护多个状态并且含有复杂的处理逻辑,因此难以映射为传统的sketch。基于此,对于用户自定义的第二有状态算子,编译模块可以临时基于第二有状态算子编译对应的sketch。
基于第一方面提供的方法,在一些实施例中,编译与第二有状态算子对应的sketch的实现方式可以为:根据第二有状态算子生成抽象语法树,抽象语法树中任一子节点指示一个变量,任一子节点的父节点指示操纵任一子节点所指示的变量的逻辑语法;将抽象语法树拆分为至少一个单状态变量子树,至少一个单状态变量子树中每个单状态变量子树的子节点指示的变量中存在不超过一个有状态变量;根据每个单状态变量子树对应的逻辑功能,按照sketch数据结构编译类sketch,得到每个单状态变量子树对应的类sketch,将至少一个单状态变量子树分别对应的类sketch作为第二有状态算子对应的sketch。
由于用户自定义的第二有状态算子通常会维护多个状态并且含有复杂的处理逻辑,因此为了能够实现对第二有状态算子的sketch映射,将第二有状态算子进行分解,然后对分解之后的算子分别设计类sketch。
基于第一方面提供的方法,在一些实施例中,第二应用程序运行在运行模块后,第二有状态算子对应的sketch的键和值存储在运行模块的不同存储空间。
对于用户自定义的第二有状态算子,这类算子对应数据处理结果的数值通常比较大。这种场景下,在运行模块运行第二有状态算子时,如果将第二有状态算子对应的sketch的键和值存储在一起,容易导致存储资源开销大,因此,对于第二有状态算子对应的sketch,可以采用键和值分离的方式存储。
基于第一方面提供的方法,在一些实施例中,根据目标精度确定每个有状态算子对应的sketch的参数值的实现方式可以为:确定每个有状态算子对应的sketch的初始参数值;基于每个有状态算子对应的sketch运行时所需资源,根据目标精度对每个有状态算子对应的sketch的初始参数值进行优化,得到每个有状态算子对应的sketch的参数值。
对于流式语言的库中有状态算子,这些有状态算子对应的sketch的初始参数值可以通过理论误差公式计算得到的。而理论误差公式通常是基于最坏情况统计得到的,因此通过理论误差计算公式得到的初始参数值只能作为参考,在应用时,还需在通过理论误差计算公式得到的初始参数值的基础上进行调整。另外,对于用户自定义的有状态算子,这些有状态算子对应的sketch的初始参数值是通过随机样本选择的,因此在应用时,同样还需要在初始参数值的基础上进行调整,以得到sketch的最终参数值。
基于第一方面提供的方法,在一些实施例中,基于第二应用程序运行时所需使用资源,根据目标精度对每个有状态算子对应的sketch的初始参数值进行优化,得到每个有状态算子对应的sketch的参数值的实现方式可以为:从初始配置开始,搜索满足目标精度的多个待测配置,初始配置包括多个有状态算子中每个有状态算子对应的sketch的初始参数值,多个待测配置中每个待测配置包括多个有状态算子中每个有状态算子对应的sketch的一个参数值;确定多个待测配置中每个待测配置的资源开销指数,资源开销指数指示相应待测配置所需资源的大小;根据多个待测配置中资源开销指数最小的待测配置,确定多个有状态算子中每个有状态算子对应的sketch的参数值。
为了避免编译后的第二应用程序运行时占用过多资源,可以基于sketch运行时所需使用的资源对sketch的初始参数值进行优化。
基于第一方面提供的方法,在一些实施例中,确定多个待测配置中每个待测配置的资源开销指数的实现方式可以为:基于每个待测配置所需算数逻辑单元ALU的数量以及内存页的数量,确定多个待测配置中每个待测配置的资源开销指数。
通过上述方式可以快速确定每个待测配置的资源开销指数。
基于第一方面提供的方法,在一些实施例中,运行模块部署于可编程交换机。
由于可编程交换机具备高速的网络传输能力与强大的可编程能力,因此将运行模块部署于可编程交换机可以进一步提高流式数据处理系统的数据处理速率。
第二方面,提供了一种流式数据处理系统,所述流式数据处理系统具有实现上述第一方面中流式数据处理系统的操作方法行为的功能。所述流式数据处理系统装置包括至少一个模块,该至少一个模块用于实现上述第一方面所提供的流式数据处理系统的操作方法。
第三方面,提供了一种网络设备,所述网络设备的结构中包括处理器和存储器,所述存储器用于存储支持流式数据处理系统执行上述第一方面所提供的流式数据处理系统的操作方法的程序,以及存储用于实现上述第一方面所提供的流式数据处理系统的操作方法所涉及的数据。所述处理器被配置为用于执行所述存储器中存储的程序。所述存储设备的操作装置还可以包括通信总线,该通信总线用于该处理器与存储器之间建立连接。
第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的流式数据处理系统的操作方法。
第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的流式数据处理系统的操作方法。
上述第二方面、第三方面、第四方面和第五方面所获得的技术效果与第一方面中对应的技术手段获得的技术效果近似,在这里不再赘述。
附图说明
图1是本申请实施例提供的一种流式数据处理系统的架构示意图;
图2是本申请实施例提供的一种图1所示的流式处理系统的操作方法流程图;
图3是本申请实施例提供的一种第一应用程序的示意图;
图4是本申请实施例提供的另一种第一应用程序的示意图;
图5是本申请实施例提供的一种编译模块的系统架构示意图;
图6是本申请实施例提供的一种编译后的基于sketch的数据平面程序的示意图;
图7是本申请实施例提供的一种通过匹配动作表实现sketch的示意图;
图8是本申请实施例提供的一种流式数据处理系统的架构示意图;
图9是本申请施例提供的一种网络设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
应当理解的是,本文提及的“多个”是指两个或两个以上。在本申请的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
在对本申请实施例进行详细解释说明之前,先对本申请实施例的应用场景进行介绍。
流式处理是指对网络中的数据流实时进行处理的一种技术。流式处理在异常检测、实时数据分析、在线机器学习等领域都有重要应用。在流式处理中,数据以数据流的形式逐个进入流式数据处理系统,流式数据处理系统对每个数据进行实时计算,而不必等待后续数据就绪。目前流式处理系统包括Apache Flink(一种开源的流式处理框架),SparkStreaming(一种处理实时数据流的框架),Storm(一种分布式实时大数据处理框架)等。
随着分布式技术的发展,流式数据处理系统也逐渐演变为分布式流式数据处理系统。分布式流式数据处理系统包括多个计算节点,每个计算节点运行有应用程序(也称为计算任务)。数据流被分配到不同计算节点进行计算,以确定应用程序对应的数据处理结果。一个计算节点计算完成后,可以将数据处理结果发送到其余计算节点进行进一步处理。
目前分布式流式处理系统中的计算节点均在中央处理单元(central processingunit,CPU)上计算应用程序对应的数据处理结果。受制于CPU有限的处理能力,当输入至分布式流式数据处理系统的数据流的速率超过计算节点的CPU的处理能力时,数据流中无法及时得到处理的数据将不得不被丢弃,从而影响分布式流式数据处理系统的数据处理质量。
基于上述原因,目前某些分布式流式数据处理系统将某些应用程序卸载到可编程交换机上执行,从而加速传统分布式流式数据处理系统的数据处理效率,进而保证数据处理质量。
可编程交换机是一种新型的网络设备。除了提供正常的网络数据转发外,可编程交换机还可以提供计算与存储资源,因此可以将可编程交换机用于运行分布式流式处理系统上的应用程序。相比于通用CPU,可编程交换机上的计算具有吞吐量大、延迟低等性能优势。
但是,可编程交换机的计算与存储资源有限,这样使得能够被卸载到可编程交换机上的应用程序有限。特别是许多有状态计算需要在内存中维护大量计算状态,其开销通常超出了可编程交换机的内存限制,因此当前只有极少数简单的应用程序能够卸载到可编程交换机,所以这种加速分布式流式数据处理系统的方式不具备通用性。
其中,有状态计算是指当前计算的计算结果需要在下一次计算时使用,也即下一次计算需要依赖前一次计算的计算结果。因此,对于有状态计算,需要在内存中维护每次计算的计算结果。
基于此,本申请实施例提供了一种流式数据处理系统,通过本申请实施例提供的流式数据处理系统,可以实现对通用的应用程序进行sketch(数据概要)编译,以简化应用程序的复杂度,从而可以提高流式数据处理系统的数据处理速度。
其中,sketch是一种将计算任务压缩为哈希表的数据结构,一个sketch通常可以包括H个长度为P的哈希表,H和P均为正整数。
下面对本申请实施例提供的流式数据处理系统以及相应的操作方法进行详细解释说明。
图1是本申请实施例提供的一种流式数据处理系统的架构示意图。如图1所示,该流式数据处理系10统包括接口模块101、编译模块102以及运行模块103。
接口模块101用于用户设计基于流式语言的应用程序(简称第一应用程序),且用户还可以在编写第一应用程序的同时指定应用程序对应的精度意图(即目标精度)。
其中,流式语言是指采用流式语言算子编译的一种语言,也即第一应用程序包括流式语言算子。由于流式语言算子(诸如filter、map、reduce等)具备丰富的语义能力,能够描述各种类型的任务,因此在本申请实施例中,用户可以基于接口模块101开发基于流式语言的第一应用程序。
另外,为了提高本申请实施例中的流式语言的可扩展性。本申请实施例提供的流式语言算子除了流式语言中内置的固定功能的算子外,本申请实施例还提供有groupby算子,groupby算子允许用户通过该算子调用用户自定义函数(user-defined function,UDF)。表1中汇总了本发申请实施例提供的流式语言算子。
表1
其中,表1中的元组是指:将数据流(PacketStream)中每个数据包抽象为一个键值元组(key-value tuple)。
另外,为了提高本申请实施例中的基于流式语言的第一应用程序的高抽象程度,第一应用程序可以尽可能屏蔽底层的实现细节。在一些实施例中,第一应用程序中的流式语言算子可以只包含逻辑功能,不包含具体的测量算法以及配置信息。
编译模块102用于将用户开发的包括目标精度的第一应用程序编译为基于sketch的第二应用程序,并基于目标精度设置sketch的类型和参数值,具体实现方式后续有详细说明。
运行模块103用于运行编译后的基于sketch的第二应用程序。可选地,如图1所示,运行模块包括收集器1031,收集器1031用于收集第二应用程序的计算结果(也即应用结果)然后生成结果报告,并向接口模块101发送结果报告,以供用户查看。
图1中三个模块可以部署在同一设备。可选地,在流式数据处理系统10为分布式流式数据处理系统的情况下,图1中三个模块还可以分别部署在不同的设备。
示例地,接口模块101和编译模块102部署在主机(比如计算节点),接口模块101和编译模块102可以部署在同一主机,也可以部署在不同主机。运行模块可以部署在路由器或交换机等网内设备上,比如可编程交换机,该可编程交换机如图1所示可以为第四代可编程交换机(programmable switch chip 4,P4)。又示例地,接口模块101、编译模块102以及运行模块103均部署在主机。
图2是本申请实施例提供的一种图1所示的流式处理系统的操作方法流程图,该方法用于对图1所示的各个模块的功能进行解释说明。如图2所示,该方法包括如下步骤201至步骤203。
步骤201:接口模块获取基于流式语言的第一应用程序,第一应用程序包括至少一个流式语言算子和目标精度。
为了感知用户的精度意图,本申请实施例对精度意图进行形式化,使得用户可以在编写第一应用程序时显式指定能够接受的误差范围(也即精度意图)。将用户指定的精度意图称为目标精度。
因此,在一些实施例中,接口模块包括编程界面。这种场景下,接口模块获取第一应用程序的实现方式可以为:接口模块响应于用户在编程界面输入的目标精度和至少一个流式语言算子,获取第一应用程序。
示例地,编程界面可以包括精度输入选项,用户可以点击该精度输入选项并输入目标精度,以使接口模块获取到用户指定的目标精度。
其中,目标精度示例地可以包括如下四种精度:
(1)召回率(recall):在实际异常网络流中,被系统报告发现的异常流的比例;
(2)精确率(precision):在系统报告发现的异常流中,确实为异常流的比例;
(3)平均相对误差(average relative error):所有输出元组的值与实际值间的平均相对误差;
(4)置信度(confidence):满足上述精度指标的概率。
在一些实施例中,用户可以有选择地指定上述的精度中的一个或多个。如果用户未指定某个精度,则可以认为对该精度没有要求。
另外,用户指定的目标精度可以是针对整个第一应用程序,而不是针对第一应用程序中的单个流式语言算子,因此用户在设计第一应用程序时无需考虑如何设置每个流式语言算子的精度。
图3是本申请实施例提供的一种第一应用程序的示意图。图4是本申请实施例提供的另一种第一应用程序的示意图。
图3所示的第一应用程序用于实现检测分布式拒绝服务(distributed denial ofservice,DDoS)攻击。如图3所示,用户(比如网络管理人员)编写的第一应用程序包括7行代码。
这7行代码对应的逻辑功能为:首先通过distinct算子过滤出流量中源目地址对(对应代码第3行),然后利用map算子和reduce算子统计每个目的地址分别有多少个不同的源地址访问(对应代码第4、5行),最后使用filter算子和map算子将被访问次数超过阈值的目的地址上报给用户(对应代码第6、7行)。且在代码中指定第一应用程序的目标精度,目标精度为:在置信度(confidence)为95%的概率下,检测发现的异常流的召回率(recall)至少达到95%(对应代码第1行)。
图4所示的第一应用程序用于实现监测传输控制协议(transmission controlprotocol,TCP)流中序列号非单调的异常流量。如图4所示,用户可以通过自定义函数编写包括10行代码第一应用程序。
这7行代码对应的逻辑功能为:首先使用filter算子过滤TCP报文(对应代码第9行),然后使用groupby算子调用用户自定义函数nonmt(对应代码第10行)。groupby算子维护两个状态:maxseq和nm_count。maxseq状态跟踪每个流的最大序列号(对应代码第3行),nm_count状态记录非单调数据包的数量(对应代码第5行)。且在代码中指定第一应用程序的目标精度,目标精度为:在置信度(confidence)为95%的概率下,监测流的精确率至少达到99%并且平均相对误差不能超过1%(对应代码第7行)。
步骤202:编译模块根据至少一个流式语言算子和目标精度,将第一应用程序编译为基于数据概要sketch的第二应用程序。
在本申请实施例中,将第一应用程序编译为基于sketch的第二应用程序。由于sketch是一种将计算任务压缩为哈希表的数据结构,而通过哈希表进行运算所需的资源开销较少,因此通过本申请实施例提供的方法可以降低运行应用程序所需的资源开销,从而提高流式数据处理系统的数据处理速率。并且,编译第一应用程序时,考虑了用户设置的第一应用程序的目标精度,因此编译后的第二应用程序也满足用户的精度意图。因此,本申请实施例提供的方法可以实现在满足用户指定的精度意图的情况下提高流式数据处理系统的数据处理速率。
在一些实施例中,步骤202的实现过程可以为:确定至少一个流式语言算子中的至少一个有状态算子,有状态算子是指在每次计算时存储当前计算结果以在下一次计算时使用上一次计算结果继续计算的算子;确定至少一个有状态算子中每个有状态算子对应的sketch;根据目标精度确定每个有状态算子对应的sketch的初始参数值;根据至少一个有状态算子中每个有状态算子对应的sketch的初始参数值,生成第二应用程序。
其中,确定至少一个有状态算子中每个有状态算子对应的sketch的过程称为sketch映射。
由于有状态算子在维护在需要占用大量内存空间,因此在本申请实施例中,可以对第一应用程序中的有状态算子进行sketch映射,以降低编译后的第二应用程序运行时的资源开销。可选地,在本申请实施例中,除了对第一应用程序中的有状态算子进行sketch映射,也可以对其他算子进行sketch映射。下述实施例以如何对有状态算子进行sketch映射为例进行说明。
基于步骤201可知,用户在编写第一应用程序时,除了可以使用流式语言的库中的算子,还可以自定义函数。因此,本申请实施例中的有状态算子包括两种,一种是流式语言的库中的有状态算子,一种是用户自定义的有状态算子。下面分两种情况对sketch映射进行解释说明。
(1)至少一个有状态算子包括第一有状态算子,第一有状态算子为流式语言的库中的有状态算子。
在一些实施例中,确定第一状态算子对应的sketch的实现方式可以为:将第一有状态算子进行sketch映射,得到与第一有状态算子对应的sketch。
由于流式语言库中的算子为广泛使用的算子,且这些算子目前已经有对应的sketch。比如对于流式语言中的reduce与distinct算子,这两个算子用于实现常见的计数与去重操作。许多现有的sketch能够实现上述操作,例如Count(计数)Sketch和Count-min(最小计数)Sketch能够实现计数操作,Bloom Filter(布隆过滤器)和Counting BloomFilter(计数布隆过滤器)能够实现去重操作。因此对于第一有状态算子,可以直接将第一有状态算子进行sketch映射,得到与第一有状态算子对应的sketch。
示例地,将第一有状态算子进行sketch映射,得到与第一有状态算子对应的sketch的实现方式可以为:获取算子映射关系,算子映射关系包括多个内置算子标识以及与多个内置算子标识分别对应的sketch标识,每个内置算子标识指示流式语言的库中的一个有状态算子,每个内置算子标识所指示的有状态算子与对应的sketch标识所指示的sketch的逻辑功能相同;从算子映射关系中获取与目第一有状态算子的标识对应的sketch标识;根据与第一有状态算子的标识对应的sketch标识,确定与第一有状态算子对应的sketch。
由于流式语言的库中的算子目前已经有对应的sketch,因此可以预先设置算子映射关系,以便于在编译第一应用程序时,快速对第一有状态算子进行sketch映射,提高了编译效率。
另外,对于流式语言的库中的有状态算子,通常存在多个sketch能够实现该有状态算子的功能,而不同的sketch能够实现的精度不同。因此,在一些实施例中,在生成上述算子映射关系时,如果某个有状态算子对应有多个sketch能够实现该有状态算子的功能,则可以预先通过基准程序(benchmark)测试这多个sketch在相同配置下的精度,然后选择一个精度最高的sketch的标识作为算子映射关系中与该有状态算子的标识对应的sketch标识。
通过上述方式,可以提高编译后的第二应用程序在运行时的精度,以提高流式数据处理系统的数据处理质量。
可选地,在生成上述算子映射关系时,如果某个有状态算子对应有多个sketch能够实现该有状态算子的功能,则可以将这多个sketch的标识分别作为算子映射关系中与该有状态算子的标识对应的sketch标识,并在算子映射关系中记录每个sketch标识对应的sketch的最大精度。如此,编译模块在对第一有状态算子进行sketch映射时,可以基于目标精度选择一个合适精度的sketch标识进行sketch映射。
(2)至少一个有状态算子包括第二有状态算子,第二有状态算子为自定义有状态算子。
在一些实施例中,确定第二有状态算子对应的sketch的实现方式可以为:编译与第二有状态算子对应的sketch。
第二有状态算子是用户自定义的函数,而用户自定义的函数具备高度的灵活性,通常会维护多个状态并且含有复杂的处理逻辑,因此难以映射为传统的sketch。基于此,对于用户自定义的第二有状态算子,编译模块可以临时基于第二有状态算子编译对应的sketch。
在本申请实施例中,为了便于编译第二有状态算子对应的sketch,可以将先用户自定义的比较复杂的第二有状态算子进行分解,然后对分解后的算子分别设计sketch数据结构的算子(后续简称为类sketch),以得到第二有状态算子对应的sketch。
基于此,示例地,编译与第二有状态算子对应的sketch的实现方式可以为:根据第二有状态算子生成抽象语法树,抽象语法树中任一子节点指示一个变量,任一子节点的父节点指示操纵任一子节点所指示的变量的逻辑语法;将抽象语法树拆分为至少一个单状态变量子树,至少一个单状态变量子树中每个单状态变量子树的子节点指示的变量中存在不超过一个有状态变量;根据每个单状态变量子树对应的逻辑功能,按照sketch数据结构编译类sketch,得到每个单状态变量子树对应的类sketch,将至少一个单状态变量子树分别对应的类sketch作为第二有状态算子对应的sketch。
基于上述内容可知,将用户自定义的第二有状态算子进行sketch映射的过程包括算子分解和sketch构造两个步骤。
(1)算子分解。
本申请实施例可以通过将用户自定义的第二状态算子转化为抽象语法树(abstract syntax tree,AST)进行分析,以实现对第二有状态算子的分解。可选地,也可以通过其他方式实现算子分解,下面以抽象语法树为例进行说明。
在一些实施例中,可以按照第二状态算子维护的状态数量,将其分解为若干个简单的自定义函数。对于每个自定义函数,都可以将其转化为一个等价的抽象语法树,抽象语法树中的每个叶子节点代表一个有状态变量、一个参数或一个临时变量;每个父亲节点则代表操纵子节点的逻辑语句。然后对每个抽象语法树进行拆分,以实现对第二有状态算子的分解。
其中,在自定义函数中共支持三种逻辑语句,分别为赋值语句、数学计算语句和条件分支语句。对于赋值语句与数学计算语句,父亲节点的子节点们分别代表语句的操作数,而对于条件分支语句,子节点则代表不同的分支。
在抽象语法树构建完成后,对每个抽象语法树进行拆分的实现过程可以为:对于任一抽象语法树,迭代的对抽象语法树进行遍历,每次遍历从抽象语法树中分离出一个仅对单个有状态变量进行操作的最小子树,直到不能再对原始的抽象语法树进行拆分,以将维护有多个有状态变量的抽象语法树拆分为多个仅维护单个有状态变量的子树。
其中,在遍历时,如果其他子树需要使用到本子树的有状态变量,则创建一个临时变量用于存储需要的有状态变量的值,并传递给其他子树。
另外,完成子树拆分后,对维护相同有状态变量的子树可以进行合并,从而得到至少一个单状态变量子树。
(2)sketch构造。
对于分解后的每个单状态变量子树,本申请实施例可以按照sketch数据结构构造类sketch,以实现每个单状态变量子树的逻辑功能。
其中,为了与传统的sketch进行区分,将本申请实施例中按照sketch数据结构设计的数据体称为类sketch。
另外,对于用户自定义的第二有状态算子,这类算子对应数据处理结果的数值通常比较大。这种场景下,在运行模块运行第二有状态算子时,如果将第二有状态算子对应的sketch的键和值存储在一起,容易导致存储资源开销大,因此,对于第二有状态算子对应的sketch,可以采用键和值分离的方式存储。
示例地,对于第二有状态算子对应的sketch,将数据流的流键采用连续的存储空间进行统一存储,避免重复存储相同流键引入额外开销。将数据流在该sketch下的计算数值采用类似Count-min Sketch的数据结构进行存储以减小哈希冲突带来的误差。
在完成sketch映射后,便可根据目标精度确定每个有状态算子对应的sketch的参数值;根据至少一个有状态算子中每个有状态算子对应的sketch的参数值,生成第二应用程序。
其中,每个有状态算子对应的sketch的参数值与目标精度呈正相关关系。也即,目标精度越大,有状态算子对应的sketch的参数值越大。其中,sketch的参数值包括sketch中的哈希表的长与宽。
在一些实施例中,根据目标精度确定每个有状态算子对应的sketch的参数值的实现方式可以为:确定每个有状态算子对应的sketch的初始参数值;基于每个有状态算子对应的sketch运行时所需资源,根据图目标精度对每个有状态算子对应的sketch的初始参数值进行优化,得到每个有状态算子对应的sketch的参数值。
其中,在有状态算子为第一有状态算子(也即流式语言的库中有状态算子)的场景中,由于第一有状态算子对应的sketch为网络中的通用的sketch,这些sketch的参数和对应的精度有对应的理论误差计算公式,因此第一有状态算子对应的sketch的初始参数值可以通过相关的理论误差计算公式和目标精度确定得到。在此不再详细说明。
在有状态算子为第二有状态算子(用户自定义的有状态算子)的场景中,可以从预先设置的几个样本参数中随机选择一个合适的样本参数作为sketch的初始参数值。
基于上述内容可知,对于流式语言的库中有状态算子,这些有状态算子对应的sketch的初始参数值是通过理论误差公式计算得到的。而理论误差公式通常是基于最坏情况统计得到的,因此通过理论误差计算公式得到的初始参数值只能作为参考,在应用时,还需在通过理论误差计算公式得到的初始参数值的基础上进行调整。另外,对于用户自定义的有状态算子,这些有状态算子对应的sketch的初始参数值是通过随机样本选择的,因此在应用时,同样还需要在初始参数值的基础上进行调整,以得到sketch的最终参数值。
基于此,在通过上述方式确定出sketch的初始参数值后,还需对sketch的初始参数值进行调整(也即优化),以得到sketch的最终参数值。
在一些实施例中,为了避免编译后的第二应用程序运行时占用过多资源,可以基于sketch运行时所需使用的资源对sketch的初始参数值进行优化。
示例地,基于第二应用程序运行时所需使用资源,根据所述目标精度对每个有状态算子对应的sketch的初始参数值进行优化,得到每个有状态算子对应的sketch的参数值的实现方式可以为:从初始配置开始,搜索满足目标精度的多个待测配置;确定多个待测配置中每个待测配置的资源开销指数,资源开销指数指示相应待测配置所需资源的大小;根据多个待测配置中资源开销指数最小的待测配置,确定第二应用程序中的sketch的参数值。其中,初始配置包括多个有状态算子中每个有状态算子对应的sketch的初始参数值。每个待测配置包括多个有状态算子中每个有状态算子对应的sketch的一个参数值。
示例地,从初始配置开始,搜索满足目标精度的多个待测配置的实现方式可以为:获取配置列表,该配置列表包括多个配置以及每个配置对应的精度,每个配置用于设置多个有状态算子中每个有状态算子对应的sketch的参数值,每个配置对应的精度是预先通过基准程序测试得到的。从配置列表中获取初始配置对应的精度,如果该精度超过目标精度,将该初始配置作为一个待测配置,并调整初始配置中至少一个有状态算子对应的sketch的初始参数值,调整后的sketch的参数值,小于调整前的该sketch的初始参数值;对于调整后的初始配置,返回执行从配置列表中获取该初始配置对应的精度,直至确定的精度首次低于目标精度。
相应地,从配置列表中获取该初始配置对应的精度之后,如果该精度低于目标精度,将该初始配置作为一个待测配置,并调整初始配置中至少一个有状态算子对应的sketch的初始参数值,调整后的sketch的参数值,大于调整前的该sketch的初始参数值;对于调整后的初始配置,返回执行从配置列表中获取初始配置对应的精度,直至确定的精度首次低于目标精度。
在搜索过程中,本申请实施例采取如上的终止条件来加速收敛。如果初始化参数值能够符合用户指定的目标精度,那么在搜索到首个不能够满足目标精度的待测配置时,停止扩展待测配置。相对应地,如果初始化参数值不能够符合用户指定的目标精度,那么在搜索到首个能够满足进目标精度的待测配置时,停止生成待测配置。
上述配置列表是预先通过基准程序对大量sketch进行测试得到。
由于对于任一sketch,该sketch所有可能的参数值的数量非常庞大,如果使用暴力搜索确定全部的待测配置,这样时间开销通常是不可接受的。为了能够高效率搜索到合适的待测配置参数,可以通过上述方式搜索多个待测配置。
在上述搜索多个待测配置的过程中,根据当前的配置是否能够满足用户的精度意图,如果能够满足,将使用更少资源的邻居配置加入待测配置集合中;如果不能够满足,将使用更多资源的邻居配置加入待测配置集合中。通过这种搜索方式,可以减少需要进行精准测试的待测配置的数量,
另外,在通过上述方式每次得到一个待测配置时,还可以检查该待测配置是否已经是待测配置集合中的待测配置,如果是,则无需将该待测配置加入待测配置集合中以进行后续的确定资源开销指数的操作,如果不是,则将该待测配置加入待测配置集合中以进行后续确定资源开销指数的操作。
可选地,还可以检查该待测配置是否超出硬件的资源限制,比如可以先确定待测配置所需使用的资源,根据待测配置所需使用的资源来确定该待测配置是否超出硬件的资源限制。如果该待测配置超出硬件的资源限制,则无需将该待测配置加入待测配置集合中以进行后续的确定资源开销指数的操作,如果该待测配置没有超出硬件的资源限制,则将该待测配置加入待测配置集合中以进行后续确定资源开销指数的操作。
通过检查待测配置是否已经是待测配置集合中的待测配置,和/或,检查待测配置是否超出硬件的资源限制,可以进一步减少需要进行后续操作的待测配置的数量。该过程还可以称为剪枝策略。
另外,在调整sketch的参数值时,考虑到目前交换机是以页为粒度分配片上内存,不足一页的数据结构的都会占据完整的一页,且交换机的哈希索引的范围通常是2的整次幂。因此,在调整sketch的初始参数值时,调整后的参数值中sketch的数据结构大小是2的整次幂且与页大小对齐。
另外,在一些实施例中,确定多个待测配置中每个待测配置的资源开销指数的实现方式可以为:基于每个待测配置所需算数逻辑单元(arithmetic logic unit,ALU)的数量以及内存页的数量,确定多个待测配置中每个待测配置的资源开销指数。
示例地,可以通过下述公式来确定待测配置的资源开销指数:
SC=αnALU+βnpage
其中,SC代表资源开销指数,nALU代表待测配置所需的ALU数量,npage代表待测配置使用的内存页数。α和β是两个用户指定的参数,用于权衡ALU和内存。
在确定出映射后的每个有状态算子对应的sketch的参数值后,便可根据第一应用程序中除了有状态算子外其他算子,以及每个有状态算子对应的sketch的参数值,生成第二应用程序。
上述确定映射后的每个有状态算子对应的sketch的参数值的过程是假设每个sketch的类型已经确定。sketch的类型用于指示查询sketch的计算结果时返回的数值为sketch对应的哈希计算结果中的最大值、最小值或是中间值。
可选地,在多个有状态算子中某些有状态算子对应的sketch有多个类型的情况下,可以按照sketch类型确定多个sketch类型集合,每个sketch类型集合中包括多个有状态算子中每个有状态算子对应的一个sketch类型。不同sketch类型集合之间存在至少一个有状态算子对应的sketch的类型不同。对于多个sketch类型集合中每个sketch类型集合,分别通过上述方式确定每个sketch类型集合对应的最终sketch参数值。然后对比不同sketch类型集合在最终sketch参数值下的资源开销指数,选择资源开销指数最小sketch类型集合以及相应的sketch参数值。
另外,在本申请实施例中,对于用户自定义的第二有状态算子对应的sketch,这些sketch是临时按照sketch数据结果编译的类sketch,因此用户自定义的第二有状态算子对应的sketch的类型并不是明确的。基于此,对于第二有状态算子对应的sketch,可以预先通过基准程序测试该sektch在输入的数据流下对应的计算数值,然后确定计算数值的单调性。如果计算数值的单调性是单调递增的,则将该sektch的类型确定为:查询sketch的计算结果时返回的数值为sketch对应的哈希计算结果中的最小值。如果计算数值的单调性是单调递减的,则将该sektch的类型确定为:查询sketch的计算结果时返回的数值为sketch对应的哈希计算结果中的最大值。如果计算数值的单调性是波动的,则将该sektch的类型确定为:查询sketch的计算结果时返回的数值为sketch对应的哈希计算结果中的中间值。
通过上述方式确定的第二有状态算子对应的类sketch的类型可以提高这些类sketch的精度。
另外,在完成各个有状态算子对应的sketch映射之后,在根据目标精度确定每个有状态算子对应的sketch的参数值之前,还可以对各个有状态算子对应的sketch的算法进行优化。对于任一sketch,实现该sketch的算法(比如哈希算法)有很多种,因此可以各个有状态算子对应的sketch的算法进行优化,以选择一种合适的算法来实现各个sketch。
在一些实施例中,对于映射后的不同sketch,可以采取共享哈希函数的优化策略,以减少后续数据平面哈希计算单元的使用量。
图5是本申请实施例提供的一种编译模块的系统架构示意图。如图5所示,该编译模块包括解析单元、sketch映射单元、优化单元、参数配置单元以及代码生成单元。
其中,解析单元用于解析出第一应用程序中各个有状态算子。sketch映射单元用于对每个有状态算子进行sketch映射。优化单元用于对映射有的有状态算子对应的sketch的算法进行优化。参数配置单元用于确定有状态算子对应的sketch的参数值。代码生成单元用于基于每个有状态算子对应的sketch的参数值,生成第二应用程序。
另外,如图5所示,生成的第二应用程序包括数据面程序和控制面程序。其中,数据面程序用于在运行模块的转发层执行的程序,控制面程序用于在运行模块的控制层执行的程序。
以图3所示的用于实现DDoS攻击检测的第一应用程序为例,编译后的基于sketch的数据平面程序如图6所示。
如图6所示,基于流式语言的第一应用程序包括distinct和reduce两个有状态算子,映射后的sketch分别为Bloom Filter(布隆过滤器)和Count-min sketch(最小计数数据概要),以得到第二应用程序,图6所示的第二应用程序中没有示出无状态算子。
编译后的第二应用程序的逻辑功能为:首先,使用报文的目的地址和源地址作为tuple key映射到Bloom Filter之中,如果映射的k个bit(图6中k=3)中有某个bit为0,表明当前报文为一个新的数据流,则将该报文传入下一级步骤中的算子,同时将该bit置位,以便于下次该数据流的报文进入Bloom Filter,该报文对应的元组不会进入下一级步骤。对于通过Bloom Filter的报文元组,使用报文的目的地址作为tuple key映射到Count-minSketch之中,将映射的d(图6中d=4)个计数器分别加一,以实现对同一目的地址对应的不同源地址的统计,然后使用d个计数器中的最小值与阈值进行比较,如果大于等于阈值,则认为这个目的地址受到了DDoS攻击。
步骤203:编译模块将第二应用程序卸载至运行模块,以使运行模块运行第二应用程序。
在本申请实施例中,为了进一步提高运行模块运行第二应用程序的效率,还可以基于运行模块的硬件特性来运行第二应用程序。
在一些实施例中,运行模块运行第二应用程序的实现方式可以为:运行模块通过匹配动作表和片上内存运行第二应用程序。
以使用Bloom Filter实现distinct算子为例,如图7所示,报文元组进入实现distinct算子的这级步骤后,会同时执行k(图中k=3)个匹配动作表,计算k个哈希索引,如果内存中k个哈希索引对应bit位中含有0,首先对内存中k个哈希索引对应bit位进行置位,表示这个键对应数据流的首个报文,可以发送给下一级步骤中部署的算子进行处理;如果k个索引对应bit位都为1,则认为这个报文键对应的流已经出现过,不进行后续处理。下一级步骤的数据流算子通过判断,上一级步骤所部署的distinct算子传出的标志位(图中的bf_flag1等),来决定是否执行本级步骤的算子。
另外,由于基于PISA架构的网络设备具备高速的网络传输能力与强大的可编程能力,目前被广泛应用于各类网络流式系统。基于此,在一些实施例中,运行模块部署于基于与协议无关的交换机架构(Protocol Independent Switch Architecture,PISA)架构的网络设备。
另外,如果第一应用程序包括若干连续filter算子,采取将编译后的若干sketch对应的匹配动作表整合为一个匹配动作表,以减少数据平面的计算资源的使用。
另外,如果第一应用程序为关注部分数据流而非全部数据流的流式应用,则运行模块的内存中只记录第一应用程序所关注的数据流的键,从而减少数据平面的存储资源的开销。
另外,如果第一应用程序为需要依赖数据流中间状态(比如时间戳、TCP流的序列号)进行判断的流式应用,则利用TCP流的fin报文能够显式标识网络流结束的特性,运行模块可以清除已完成计算的数据流的残留状态,降低后续数据流由于残留状态造成的误判。
综上所述,在本申请实施例中,将第一应用程序编译为基于sketch的第二应用程序。由于sketch是一种将计算任务压缩为哈希表的数据结构,而通过哈希表进行运算所需的资源开销较少,因此通过本申请实施例提供的方法可以降低运行应用程序所需的资源开销,从而提高流式数据处理系统的数据处理速率。并且,编译第一应用程序时,考虑了用户设置的第一应用程序的目标精度,因此编译后的第二应用程序也满足用户的精度意图。因此,本申请实施例提供的方法可以实现在满足用户指定的精度意图的情况下提高流式数据处理系统的数据处理速率。
图8是本申请实施例提供的一种流式数据处理系统的架构示意图。如图8所示,该流式数据处理系统800包括如下几个模块。
接口模块801,用于获取基于流式语言的第一应用程序,第一应用程序包括至少一个流式语言算子和目标精度。具体实现方式可以参考图2实施例中的步骤201。
编译模块802,用于根据至少一个流式语言算子和目标精度,将第一应用程序编译为基于数据概要sketch的第二应用程序。具体实现方式可以参考图2实施例中的步骤202。
编译模块802,用于将第二应用程序卸载至运行模块803,以使运行模块803运行第二应用程序。具体实现方式可以参考图2实施例中的步骤203。
可选地,接口模块包括编程界面;
接口模块用于:
响应于用户在编程界面输入的目标精度和至少一个流式语言算子,获取第一应用程序。
可选地,编译模块用于:
确定至少一个流式语言算子中的至少一个有状态算子,有状态算子是指在每次计算时存储当前计算结果以在下一次计算时使用上一次计算结果继续计算的算子;
确定至少一个有状态算子中每个有状态算子对应的sketch;
根据目标精度确定每个有状态算子对应的sketch的参数值;
根据至少一个有状态算子中每个有状态算子对应的sketch的参数值,生成第二应用程序。
可选地,至少一个有状态算子包括第一有状态算子,第一有状态算子为流式语言的库中的有状态算子;
编译模块用于:
将第一有状态算子进行sketch映射,得到与第一有状态算子对应的sketch。
可选地,编译模块用于:
获取算子映射关系,算子映射关系包括多个内置算子标识以及与多个内置算子标识分别对应的sketch标识,每个内置算子标识指示流式语言的库中的一个有状态算子,每个内置算子标识所指示的有状态算子与对应的sketch标识所指示的sketch的逻辑功能相同;
从算子映射关系中获取与目第一有状态算子的标识对应的sketch标识;
根据与第一有状态算子的标识对应的sketch标识,确定与第一有状态算子对应的sketch。
可选地,至少一个有状态算子包括第二有状态算子,第二有状态算子为自定义有状态算子;
编译模块用于:
编译与第二有状态算子对应的sketch。
可选地,编译模块用于:
根据第二有状态算子生成抽象语法树,抽象语法树中任一子节点指示一个变量,任一子节点的父节点指示操纵任一子节点所指示的变量的逻辑语法;
将抽象语法树拆分为至少一个单状态变量子树,至少一个单状态变量子树中每个单状态变量子树的子节点指示的变量中存在不超过一个有状态变量;
根据每个单状态变量子树对应的逻辑功能,按照sketch数据结构编译类sketch,得到每个单状态变量子树对应的类sketch,将至少一个单状态变量子树分别对应的类sketch作为第二有状态算子对应的sketch。
可选地,第二应用程序运行在运行模块后,第二有状态算子对应的sketch的键和值存储在运行模块的不同存储空间。
可选地,编译模块用于:
确定每个有状态算子对应的sketch的初始参数值;
基于每个有状态算子对应的sketch运行时所需资源,根据目标精度对每个有状态算子对应的sketch的初始参数值进行优化,得到每个有状态算子对应的sketch的参数值。
可选地,编译模块用于:
从初始配置开始,搜索满足目标精度的多个待测配置,初始配置包括多个有状态算子中每个有状态算子对应的sketch的初始参数值,多个待测配置中每个待测配置包括多个有状态算子中每个有状态算子对应的sketch的一个参数值;
确定多个待测配置中每个待测配置的资源开销指数,资源开销指数指示相应待测配置所需资源的大小;
根据多个待测配置中资源开销指数最小的待测配置,确定多个有状态算子中每个有状态算子对应的sketch的参数值。
可选地,编译模块用于:
基于每个待测配置所需算数逻辑单元ALU的数量以及内存页的数量,确定多个待测配置中每个待测配置的资源开销指数。
可选地,运行模块部署于可编程交换机。
在本申请实施例中,将第一应用程序编译为基于sketch的第二应用程序。由于sketch是一种将计算任务压缩为哈希表的数据结构,而通过哈希表进行运算所需的资源开销较少,因此通过本申请实施例提供的方法可以降低运行应用程序所需的资源开销,从而提高流式数据处理系统的数据处理速率。并且,编译第一应用程序时,考虑了用户设置的第一应用程序的目标精度,因此编译后的第二应用程序也满足用户的精度意图。因此,本申请实施例提供的方法可以实现在满足用户指定的精度意图的情况下提高流式数据处理系统的数据处理速率。
需要说明的是:上述实施例提供的流式数据处理系统在进行操作时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的流式数据处理系统与流式数据处理系统的操作方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图9是本申请施例提供的一种网络设备的结构示意图。前述实施例中接口模块、编译模块以及运行模块中任一模块通过图9所示的网络设备来实现。参见图9,该网络设备包括处理器901,通信总线902、存储器903以及至少一个通信接口904。
处理器901可以是通用中央处理器(central processing unit,CPU)、特定应用集成电路(application-specific integrated circuit,ASIC)或一个或多个用于控制本申请方案程序执行的集成电路。
通信总线902用于在上述组件之间传送信息。
存储器903可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其它类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其它类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasable programmable read-only memory,EEPROM)、只读光盘(compact disc read-only Memory,CD-ROM)或其它光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘或者其它磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质,但不限于此。存储器903可以是独立存在,通过通信总线902与处理器901相连接。存储器903也可以和处理器901集成在一起。
其中,存储器903用于存储执行本申请方案的程序代码,并由处理器901来控制执行。处理器901用于执行存储器903中存储的程序代码。程序代码中可以包括一个或多个软件模块。前述实施例中的流式数据处理系统可以通过处理器901以及存储器903中的程序代码中的一个或多个软件模块,来确定用于开发应用的数据。
通信接口904,使用任何收发器一类的装置,用于与其它设备或通信网络通信,通信网络可以是以太网,无线接入网(radio access network,RAN),无线局域网(wirelesslocal area networks,WLAN)等。
在具体实现中,作为一种实施例,网络设备可以包括多个处理器,例如图9中所示的处理器901和处理器905。这些处理器中的每一个可以是一个单核(single-CPU)处理器,也可以是一个多核(multi-CPU)处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
在具体实现中,作为一种实施例,网络设备还可以包括输出设备906和输入设备907。输出设备906和处理器901通信,可以以多种方式来显示信息。例如,输出设备906可以是液晶显示器(liquid crystal display,LCD)、发光二级管(light emitting diode,LED)显示设备、阴极射线管(cathode ray tube,CRT)显示设备或投影仪(projector)等。输入设备907和处理器901通信,可以以多种方式接收用户的输入。例如,输入设备907可以是鼠标、键盘、触摸屏设备或传感设备等。
上述的网络设备可以是一个通用网络设备或者是一个专用网络设备。在具体实现中,网络设备可以是主机、路由器或交换机等设备。本申请实施例不限定网络设备的类型。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如:同轴电缆、光纤、数据用户线(digital subscriber line,DSL))或无线(例如:红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如:软盘、硬盘、磁带)、光介质(例如:数字通用光盘(digital versatile disc,DVD))、或者半导体介质(例如:固态硬盘(solid state disk,SSD))等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述为本申请提供的实施例,并不用以限制本申请实施例,凡在本申请实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请实施例的保护范围之内。

Claims (15)

1.一种流式数据处理系统的操作方法,其特征在于,所述流式数据处理系统包括接口模块、编译模块以及运行模块;所述方法包括:
所述接口模块获取基于流式语言的第一应用程序,所述第一应用程序包括至少一个流式语言算子和目标精度;
所述编译模块根据所述至少一个流式语言算子和所述目标精度,将所述第一应用程序编译为基于数据概要sketch的第二应用程序;
所述编译模块将所述第二应用程序卸载至所述运行模块,以使所述运行模块运行所述第二应用程序。
2.如权利要求1所述的方法,其特征在于,所述接口模块包括编程界面;
所述接口模块获取基于流式语言的第一应用程序,包括:
所述接口模块响应于用户在所述编程界面输入的所述目标精度和所述至少一个流式语言算子,获取所述第一应用程序。
3.如权利要求1所述的方法,其特征在于,所述根据所述至少一个流式语言算子和所述目标精度,将所述第一应用程序编译为基于数据概要sketch的第二应用程序,包括:
确定所述至少一个流式语言算子中的至少一个有状态算子,所述有状态算子是指在每次计算时存储当前计算结果以在下一次计算时使用上一次计算结果继续计算的算子;
确定所述至少一个有状态算子中每个有状态算子对应的sketch;
根据所述目标精度确定每个有状态算子对应的sketch的参数值;
根据所述至少一个有状态算子中每个有状态算子对应的sketch的参数值,生成所述第二应用程序。
4.如权利要求3所述的方法,其特征在于,所述至少一个有状态算子包括第一有状态算子,所述第一有状态算子为所述流式语言的库中的有状态算子;
所述确定所述至少一个有状态算子中每个有状态算子对应的sketch,包括:
将所述第一有状态算子进行sketch映射,得到与所述第一有状态算子对应的sketch。
5.如权利要求4所述的方法,其特征在于,所述将所述第一有状态算子进行sketch映射,得到与所述第一有状态算子对应的sketch,包括:
获取算子映射关系,所述算子映射关系包括多个内置算子标识以及与所述多个内置算子标识分别对应的sketch标识,每个内置算子标识指示所述流式语言的库中的一个有状态算子,每个内置算子标识所指示的有状态算子与对应的sketch标识所指示的sketch的逻辑功能相同;
从所述算子映射关系中获取与所述目第一有状态算子的标识对应的sketch标识;
根据与所述第一有状态算子的标识对应的sketch标识,确定与所述第一有状态算子对应的sketch。
6.如权利要求3所述的方法,其特征在于,所述至少一个有状态算子包括第二有状态算子,所述第二有状态算子为自定义有状态算子;
所述确定所述至少一个有状态算子中每个有状态算子对应的sketch,包括:
编译与所述第二有状态算子对应的sketch。
7.如权利要求6所述的方法,其特征在于,所述编译与所述第二有状态算子对应的sketch,包括:
根据所述第二有状态算子生成抽象语法树,所述抽象语法树中任一子节点指示一个变量,所述任一子节点的父节点指示操纵所述任一子节点所指示的变量的逻辑语法;
将所述抽象语法树拆分为至少一个单状态变量子树,所述至少一个单状态变量子树中每个单状态变量子树的子节点指示的变量中存在不超过一个有状态变量;
根据每个单状态变量子树对应的逻辑功能,按照sketch数据结构编译类sketch,得到每个单状态变量子树对应的类sketch,将所述至少一个单状态变量子树分别对应的类sketch作为所述第二有状态算子对应的sketch。
8.如权利要求6所述的方法,其特征在于,所述第二应用程序运行在所述运行模块后,所述第二有状态算子对应的sketch的键和值存储在所述运行模块的不同存储空间。
9.如权利要求3所述的方法,其特征在于,所述根据所述目标精度确定每个有状态算子对应的sketch的参数值,包括:
确定每个有状态算子对应的sketch的初始参数值;
基于每个有状态算子对应的sketch运行时所需资源,根据所述目标精度对每个有状态算子对应的sketch的初始参数值进行优化,得到每个有状态算子对应的sketch的参数值。
10.如权利要求9所述的方法,其特征在于,所述基于所述第二应用程序运行时所需使用资源,根据所述目标精度对每个有状态算子对应的sketch的初始参数值进行优化,得到每个有状态算子对应的sketch的参数值,包括:
从初始配置开始,搜索满足所述目标精度的多个待测配置,所述初始配置包括所述多个有状态算子中每个有状态算子对应的sketch的初始参数值,所述多个待测配置中每个待测配置包括所述多个有状态算子中每个有状态算子对应的sketch的一个参数值;
确定所述多个待测配置中每个待测配置的资源开销指数,所述资源开销指数指示相应待测配置所需资源的大小;
根据所述多个待测配置中资源开销指数最小的待测配置,确定所述多个有状态算子中每个有状态算子对应的sketch的参数值。
11.如权利要求10所述的方法,其特征在于,所述确定所述多个待测配置中每个待测配置的资源开销指数,包括:
基于每个待测配置所需算数逻辑单元ALU的数量以及内存页的数量,确定所述多个待测配置中每个待测配置的资源开销指数。
12.如权利要求1所述的方法,其特征在于,所述运行模块部署于可编程交换机。
13.一种流式数据处理系统,其特征在于,所述流式数据处理系统包括接口模块、编译模块以及运行模块;
所述接口模块,用于获取基于流式语言的第一应用程序,所述第一应用程序包括至少一个流式语言算子和目标精度;
所述编译模块,用于根据所述至少一个流式语言算子和所述目标精度,将所述第一应用程序编译为基于数据概要sketch的第二应用程序;
所述编译模块,还用于将所述第二应用程序卸载至所述运行模块,以使所述运行模块运行所述第二应用程序。
14.一种网络设备,其特征在于,所述网络设备包括存储器和处理器;
所述存储器用于存储支持所述网络设备执行权利要求1-12任一项所述的方法的程序,以及存储用于实现权利要求1-12任一项所述的方法所涉及的数据;
所述处理器被配置为用于执行所述存储器中存储的程序。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行权利要求1-12任一项所述的方法。
CN202211387554.2A 2022-11-07 2022-11-07 流式数据处理系统及其操作方法、网络设备及存储介质 Pending CN117992300A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211387554.2A CN117992300A (zh) 2022-11-07 2022-11-07 流式数据处理系统及其操作方法、网络设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211387554.2A CN117992300A (zh) 2022-11-07 2022-11-07 流式数据处理系统及其操作方法、网络设备及存储介质

Publications (1)

Publication Number Publication Date
CN117992300A true CN117992300A (zh) 2024-05-07

Family

ID=90895063

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211387554.2A Pending CN117992300A (zh) 2022-11-07 2022-11-07 流式数据处理系统及其操作方法、网络设备及存储介质

Country Status (1)

Country Link
CN (1) CN117992300A (zh)

Similar Documents

Publication Publication Date Title
Horn et al. Delta-net: Real-time network verification using atoms
US20190286504A1 (en) Graph-based root cause analysis
Huang et al. Ld-sketch: A distributed sketching design for accurate and scalable anomaly detection in network data streams
CN110909015B (zh) 微服务的拆分方法、装置、设备及存储介质
US11379482B2 (en) Methods, systems, and computer readable mediums for performing an aggregated free-form query
CN107070709B (zh) 一种基于底层numa感知的nfv实现方法
US11863439B2 (en) Method, apparatus and storage medium for application identification
US11681606B2 (en) Automatic configuration of logging infrastructure for software deployments using source code
CN111984436A (zh) 一种数据采集系统
JP5108011B2 (ja) バス接続されたコンシューマとプロデューサとの間でのメッセージ・フローを削減するためのシステム、方法、およびコンピュータ・プログラム
CN117992300A (zh) 流式数据处理系统及其操作方法、网络设备及存储介质
CN115705294B (zh) 用于获取函数调用信息的方法、装置、电子设备和介质
CN114281842A (zh) 一种数据库分表查询的方法及设备
CN112311679B (zh) 状态检测方法、装置、电子设备及可读存储介质
US11435926B2 (en) Method, device, and computer program product for managing storage system
EP3793171B1 (en) Message processing method, apparatus, and system
CN115955323A (zh) 一种网络安全态势感知方法、装置及电子设备
CN117472787B (zh) 车机模糊测试的测试用例生成方法、装置、介质和设备
US11537611B2 (en) Generating filtered data sets for efficient query execution
KR102229554B1 (ko) 해시 키 생성 방법 및 그 장치
CN112308328B (zh) 面向Top-Down网络测量系统的并行测量任务的优化方法及系统
CN115396319B (zh) 数据流分片方法、装置、设备及存储介质
Li Comparison of Single-Machine and Distributed Calculation of Temporal Degree Metrics
CN118502944A (zh) 封装计算能力评估方法、装置
US10031788B2 (en) Request profile in multi-threaded service systems with kernel events

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication