基于软件的仪器化的实时报告的制作方法

文档序号:12512671阅读:243来源:国知局
基于软件的仪器化的实时报告的制作方法与工艺

本公开总体上涉及软件的仪器化,并且更具体地涉及基于由仪器化软件生成的数据流的实时报告。

软件开发人员通过对代码仪器化来监测他们开发的软件的不同方面。这些方面包括软件的执行、在执行软件期间遇到的错误、在执行软件期间遇到的重大事件、描述代码的哪些部分正在执行以及哪些部分未被执行的信息等等。用于对代码仪器化的传统技术包括用于记录不同类型的信息以在屏幕上记录文件或打印信息的代码中的语句。这种类型的仪器适用于简单应用,例如具有在单个处理器上执行的简单执行流程的应用。然而,这些用于对软件仪器化的技术对于可能分布在多个系统(其中每个系统执行多个执行进程或线程)上的复杂应用是不够的。

传统上用于仪器化这种复杂系统的一种技术是在对软件仪器化时使用专家的帮助。某些供应商提供有助于代码的仪器化的专家服务。然而,这些供应商通常提供通常不是非常灵活的标准服务。此外,这些基于供应商的解决方案在供应商对仪器代码所需的时间方面具有显著的开销。因此,这些解决方案适合于缓慢的开发周期,例如一年的开发周期。然而,软件产品的软件开发和发布周期已经变短了。例如,存在几个在线系统,其中软件开发人员每月、每周或甚至每天进行更改并且进行部署。由于基于供应商的仪器解决方案的巨大开销,开发人员发现在快节奏的开发环境中难以使用这些服务。

此外,用于对代码仪器化的传统技术在信息的同化、信息的存储和信息的分析以产生报告方面引起显著的延迟。因此,在软件中发生问题的时间与经由代码的仪器化检测到问题的时间之间可能会有显著的延迟。因此,用于基于软件的仪器化来生成报告的传统系统在复杂应用的快节奏开发周期中通常是不够的。



技术实现要素:

所描述的实施例处理由仪器化软件生成的数据。软件开发人员经常对通过在软件中包含用于对代码仪器化的代码片段而开发的软件进行仪器化。仪器化软件的实例在执行时生成数据流,并且将数据流发送给系统用于分析。分析仪器化软件的系统接收标识多个数据流的信息,每个数据流包括由仪器化软件的实例生成的数据值。在数据流中接收的数据值包括第一属性集合。系统还接收描述数据流的元数据。元数据规定与第一集合中的属性不同的数据流的属性。系统接收表达式的规定,该表达式跨数据流聚合数据值。表达式包括来自第一集合的一个或多个属性和来自第二集合的一个或多个属性。例如,该表达式可以将通过数据流接收的属性聚合,其通过元数据中规定的属性而被分组。系统通过对每个时间间隔执行以下步骤来在多个时间间隔上处理数据流的数据。系统在每个时间间隔从数据流中接收元组。每个元组包括与时间间隔内的时间点相关联的数据值。系统根据接收的元组的数据值计算表达式。系统对于随后的时间间隔重复这些步骤。

在实施例中,系统对于每个时间间隔接收的每个数据流量化数据值,并且基于时间间隔对量化的数据值进行对准。为了量化数据值,对于每个时间间隔,系统基于该时间间隔为每个数据流接收的数据来生成聚合值。系统使用每个时间间隔的量化数据基于元数据来评估表达式。

说明书中描述的特征和优点并非全部是包括性的,并且特别地,鉴于附图、说明书和权利要求书,很多附加的特征和优点对于本领域普通技术人员将是显而易见的。此外,应当注意,说明书中使用的语言主要是为了可读性和教示目的而选择的,并且可能没有被选择来描绘或限制所公开的主题。

附图说明

所公开的实施例具有由于详细描述、所附权利要求以及附图(或图)将更加明显的其他的优点和特征。下面简要介绍附图。

图1示出了根据实施例的用于基于仪器化软件的报告的整体系统环境。

图2示出了根据实施例的用于基于仪器化软件的报告的系统的架构。

图3示出了根据实施例的与从执行的仪器化软件的实例接收的数据流相关联地规定的元数据对象的示例层级。

图4示出了根据实施例的与元数据对象的层级相关联的数据流集合。

图5示出了根据实施例的用于基于仪器化软件来生成报告的整体过程。

图6示出了根据实施例的从仪器化软件接收的数据流的量化过程。

图7示出了根据实施例的用于组合从各种源接收的数据流的数据的整体过程。

现在将详细参考其示例在附图中示出的几个实施例的示例。值得注意的是,只要在可行的情况下,附图中可以使用类似或相似的附图标记,并且指示类似或相似的功能。附图仅出于说明的目的描绘了所公开的系统(或方法)的实施例。本领域技术人员将从以下描述中容易地认识到,在不背离本文中所描述的原理的情况下,可以采用本文中所描述的结构和方法的替代实施例。

具体实施方式

整体系统环境

图1示出了根据实施例的基于仪器化软件的报告的整体系统环境。整体系统环境包括仪器分析系统100、一个或多个开发系统120、管理系统160和报告系统150。在其他实施例中,可以使用与图1中所示的部件相比更多或更少的部件。例如,开发系统120、管理系统160和报告系统150可以经由网络(图1中未示出)与仪器分析系统100交互。此外,图1所示的每个系统可能存在或多或少的实例,例如,可以存在多个报告系统150。

图1和其它附图使用相同的附图标记来标识相同的元件。诸如“130a”等在附图标记之后的字母表示文本具体涉及具有该特定附图标记的元素。在没有后面的字母的文本中,如“130”等附图标记是指具有图中承载该附图标记的任何或所有元素(例如,“130”在文本中是指图中的附图标记“130a”和/或“130b”)。

仪器分析系统100接收包括由不同开发系统120发送的度量的值的数据(仪器分析系统100在本文中也可以被称为分析系统或数据分析系统;开发系统在本文中也可以被称为外部系统)。开发系统120执行已经被仪器化的软件,例如应用130。尽管在图1中将应用130示出为仪器化软件的示例,但是本文中所公开的技术不限于应用软件,而是适用于其他类型的软件,例如服务器软件、在客户端设备上执行的软件、网站等。

在开发系统120上执行的软件被配置为将由于对软件仪器化而生成的信息发送给仪器分析系统100。例如,应用130可以周期性地向仪器分析系统100发送数据。不同的应用130可以以不同的速率发送相同的度量或不同的度量。相同的应用可以以不同的速率发送不同的度量。应用将数据流形式的数据发送给仪器分析系统100。数据流在本文中也称为时间序列。应用130通过调用由仪器分析系统100支持的应用编程接口(API)来将数据发送给仪器分析系统100。

应用130(或任何其他软件)可以被仪器化以向应用添加计数器或测量仪。计数器包括存储在软件中发生特定事件时递增的值的指令。计数器可以用于确定代码的特定部分被执行的次数,例如函数或方法、条件代码的特定分支、异常、循环等。

通常,计数器值单调地变化,例如,计数器值可以单调增加,或者计数器值可以单调减小。可以比较计数器的值以确定在两个不同时间点的特定计数器值的变化。例如,可以通过计算从t1到t2的相应计数器值的变化,来确定特定事件在时间t1和t2之间的时间间隔内发生的次数。应用130调用仪器分析系统100的API,以周期性地将计数器的当前值发送给仪器分析系统100。

以下是应用130的仪器化代码的示例。被包括在被仪器化的代码中的以下指令创建用于跟踪动作或实体的计数的计数器对象。

counter1=createCounter(source=“web1”,metric=“metric1”);

上述指令创建计数器对象并且将其分配给变量counter1。创建计数器的指令还规定一个或多个属性值。例如,上述createCounter指令规定源属性和度量属性。源属性的值被规定为“web1”,并且度量属性的值被规定为“metric1”。换句话说,计数器对象与源“web1”和度量“metric1”相关联。由应用130创建的对象用作应用130发送给仪器分析系统100的数据流的源。在实施例中,源值和度量值唯一地标识与计数器(或测量仪)相关联的数据流。在其他实施例中,可以使用更多或更少的密钥值对来唯一地标识数据流。例如,多个服务器可以发送与源“web1”和度量“metric1”相关联的数据流,然而可以通过进一步将数据流与标识服务器的信息(例如,服务器的IP(互联网协议)地址或服务器的唯一名称)相关联来唯一地标识每个数据流。

在表示计数器的值的元组被应用130的仪器化代码发送给仪器分析系统100时,接收在计数器创建期间规定的一个或多个属性的值。例如,源值和度量值与在数据流中接收的值的每个元组以及所报告的数据值一起被接收。可选地,值的元组可以包括时间戳,例如当所报告的数据值被仪器化软件捕获时的时间戳。

应用130的仪器化代码可以包括用于更新代码中的不同位置的计数器值的指令。例如,计数器counter1可以通过执行指令“counter1.increment()”来递增。计数器可以递增以跟踪与代码相关联的各种动作或实体。例如,每当调用特定的函数或方法时,计数器可以递增,每当执行条件表达式的特定分支时,计数器可以递增,每当创建特定类型的对象时,例如,在对象的构造函数中,计数器可以递增。计数器的递增指令可以被有条件地调用,例如,如果使用特定的参数组合调用函数。应用130通过调用仪器分析系统100的API来将计数器值传送给仪器分析系统100。

在仪器化代码中定义的计数器可以周期性地重置自身。例如,计数器可以在可配置的特定时间间隔之后重置。在这种情况下,接收的计数器值可能不会单调增加(或减小),因为该值可能会在间隔结束时重置。计数器可以是累积的,即计数器不会重置(除非提供明确的指令来重置)。在这种情况下,累积计数器的值单调地变化,即单调增加(或减少),除非由用户明确地重置。

测量仪包括用于测量应用130的某些运行时特性的指令,例如堆大小、高速缓存未命中或命中次数、所使用的活动存储器、CPU(中央处理单元)利用率、响应请求所需的总时间、连接到服务所花费的时间等等。还可以使用测量仪来跟踪某些特定于应用的参数或业务相关值,例如事务数、用户数等。可以基于可配置的间隔来周期性地调用测量仪。测量仪的值被定期发送给仪器分析系统100。

管理系统160允许特权用户(例如,系统管理员)将数据流与元数据相关联。管理系统160包括向系统管理员提供用于规定元数据的用户界面的管理应用170。元数据包括各种属性,例如名称-值对。仪器分析系统100接收描述数据流的元数据并且存储元数据。

元数据包括描述与作为数据流本身的一部分而被接收的属性不同的数据流的属性。例如,数据流可以提供属性的数据值,诸如高速缓存命中、高速缓存未命中、存储器使用等。而元数据可以规定各种属性,诸如数据流正在其中执行的数据中心、与数据流相关联的组织的分支等。还可以从不同于数据流的源的源接收元数据属性。例如,数据流可以从开发系统120接收,而元数据属性值可以由系统管理员使用管理系统160来规定。

独立于为数据流接收的数据规定元数据的能力使得应用130能够以每个数据流发送的较少量的信息来对应用130进行仪器化。更具体地,可以使用元数据将若干属性与数据流相关联,但是只有与数据流相关联的一些属性被仪器化软件作为元组发送。这减少了由于对代码进行仪器化而在应用130中引入的开销量。

通常,与在数据流中接收到的动态地变化的属性相比,与数据流相关联的元数据属性是静态的。尽管元数据属性也可以改变,但是与通过数据流接收的属性相比,它们的变化较少。例如,可以将服务器从组织的一部分分配给组织的另一部分,从而引起描述与由该服务器发送的数据流相关联的组织的部分的元数据属性发生改变。然而,与通过值可以每秒或每毫秒或更频繁地改变的数据流接收的属性相比,这些更改不太频繁。

独立于从每个数据流接收的数据来规定描述数据流的元数据的能力在基于数据流生成报告方面提供了若干益处。作为示例,仪器分析系统100可以接收对描述每个数据流的元数据的修改,而不需要对应用130的仪器化软件进行任何修改。因此,仪器分析系统100接收新报告的规定和对现有报告的修改,并且基于新报告/已修改报告来生成结果,而不需要开发人员修改应用130。

这提供了用于仪器化软件的新的范例,因为开发人员不需要考虑在仪器化软件时将从仪器化数据生成的报告的类型。开发人员简单地对其软件进行仪器化,以独立于元数据属性生成原始数据。可以独立于数据流的数据来规定元数据属性。报告系统150可以使用元数据属性以各种方式组合数据流的数据来生成报告。例如,原始数据可以指示每秒在每个服务器上的负载。仪器分析系统100可以聚集由数据中心分组、并且随着数据流到达而计算的每个服务器上的负载(其是独立于数据流的源规定的元数据属性)。所得到的报告可以实时呈现,即随着数据流的数据被接收而更新。

此外,在基于仪器化软件来生成报告方面的专家人员可能与软件开发人员不同。例如,不是开发人员的数据分析方面的专家可以定义数据流的元数据,并且生成报告,而不参与开发过程。这与需要在仪器化代码中编码元数据的、传统的对软件进行仪器化的技术相比,是一个显著的改进。这是因为,分析数据所需的技能通常与开发软件所需的技能不同。

此外,仪器分析系统100还可以通过组合现有报告、并且添加新的分析功能,来接收和处理建立在现有报告之上的报告。仪器分析系统100生成新报告的结果,并且随着仪器分析系统100从仪器化软件接收数据流而实时发送它们以进行呈现。仪器分析系统100生成这些附加报告,并且修改现有报告,而不需要对应用130的仪器化代码的任何修改。此外,可以为之前接收到的数据流定义新的元数据。相应的,可以生成新的报告,其基于被接收作为数据流的数据以及先前存储的数据(在元数据与数据流相关联之前)。例如,可以生成在大的时间间隔内提供移动平均的报告。该报告基于当前正在接收的数据以及先前接收的数据(在报告中使用的元数据与数据相关联之前),计算移动平均值。此外,可以定义这些新的报告,而无需修改仪器化软件(通过重新仪器化软件),也无需重新部署已经仪器化的软件。

此外,仪器分析系统100提供描述数据流的元数据与数据流的数据的分离。因此,需要从开发系统120传输给仪器分析系统100的数据量减少。每个应用130仅传输度量的数据值和标识度量的信息。元数据信息从独立于数据流的数据源的源独立地接收。因此,可以引入任何量的元数据,而不增加每个数据流的数据量。

报告系统150可以是客户端设备。报告系统150包括使得用户能够与仪器分析系统100交互的客户端应用140。在实施例中,客户端应用140是互联网浏览器,其可以包括用于访问仪器分析系统100的客户端侧代码(例如,Java脚本)。在其他实施例中,客户端应用140是被开发用于与仪器分析系统100交互的专有应用。报告可以由仪器分析系统100生成、并且经由报告系统150发送用以呈现。

报告系统150可以是传统的计算机系统(例如,台式或膝上型计算机)、平板电脑、或具有计算机功能的设备,例如个人数字助理(PDA)、移动电话、智能电话或另一合适的设备。报告系统150经由网络与仪器分析系统100交互。网络可以包括使用有线和/或无线通信系统的局域网和/或广域网的任何组合。在一个实施例中,网络使用标准通信技术和/或协议。

仪器分析系统100可以被托管在包括一个或多个处理器、存储器、辅助存储装置和输入/输出控制器的计算系统上。与例如用作报告系统150的典型计算系统相比,用于托管仪器分析系统100的计算系统通常是使用强大处理器、大存储器和快速输入/输出系统的服务器级系统。

在实施例中,来自若干开发系统120的数据可以例如由服务器进行合并,并且组合数据被发送给仪器分析系统100。例如,企业可以安装从不同的开发系统120内部接收数据流的服务器,并且将组合数据以批量形式周期性地发送给仪器分析系统100。这样可以提高企业外部沟通的效率。然而,该配置可能导致向仪器分析系统100传送信息的延迟、以及由报告系统150报告数据的相应延迟。

仪器分析系统的系统架构

图2示出了根据实施例的仪器分析系统100的系统架构。仪器分析系统100包括接口模块210、量化模块240、元数据模块220、元数据储存库230、数据点路由模块250、分析引擎270和时间序列数据储存库260。在其他实施例中,仪器分析系统100可以包括本文中未描述的其他模块。由特定模块提供的功能可以由其他模块来代替实现。

接口模块210接收来自外部系统的请求,例如与仪器分析系统100通信的开发系统120。接口模块210支持外部系统可以调用的各种应用编程接口(API)。接口模块210可以接收和处理由应用130提供的数据,这些应用使用由不同供应商提供的功能进行仪器化,只要仪器化代码以可以由接口模块210处理的格式来发送信息即可。在实施例中,接口模块210支持使得开发者系统120能够执行与数据流相关联的各种动作的API,例如注册数据流、提供表示数据流的数据值的元组、规定与数据流相关联的属性(例如,添加新属性)等。

接口模块210以数据流的形式从开发系统120接收数据。接口模块210接收数据,并且将其表示为元组。由接口模块接收的数据元组包括各种元素,包括度量标识符,例如与元组相对应的度量的名称和度量的值。接收的数据的元组还可以包括其他元素,例如对应于发送数据的应用130捕获数据的时间的时间戳、与数据相关联的一个或多个属性。在实施例中,与元组相关联的时间戳表示由仪器分析系统100接收数据值的时间。

与数据相关联的属性可以以名称、值对的形式提供。这些属性可以提供描述所接收的数据的附加信息,例如描述数据源的信息(例如与源相关联的主机名、服务器名称、设备名称或服务名称)、与数据相关联的方法或功能名称、应用实例标识符等。

在实施例中,接口模块210生成标识符,并且将标识符分配给由接口模块210接收的记录。标识符在本文中被称为时间序列标识符(本文中也称为tsid或TSID)。将唯一的时间序列标识符分配给匹配度量名称的所有元组和使用元组接收的属性集合。因此,元组(度量名称、属性、度量值、时间戳)被映射到元组(tsid、度量值、时间戳)。例如,如果元组提供度量名称m1和主机名h1,则为度量名称为m1和主机名为h1的所有元组分配相同的时间序列标识符。因此,tsid唯一地标识由仪器分析系统100接收的数据流的所有元组。

量化模块240处理接收到的数据值,以便将其中数据以任何时间间隔可用的输入数据流变换成其中数据以规则的时间间隔可用的数据流。例如,在输入数据流中接收的数据值可以以不规则的间隔发生,不规则的间隔可以从接收到的一对连续的数据值变换成接收到的下一对数据值。然而,量化模块240处理数据流的数据,以生成具有周期性地(以规则的时间间隔)(例如每秒或每5秒或每15秒等)发生的数据的数据流。该处理在本文中被称为数据流或时间序列的量化。在实施例中,接口模块210创建多个线程或进程,每个线程或进程被配置为接收对应于数据流的数据。每个线程或进程调用量化模块240,以在每个时间间隔对每个数据流接收的数据执行量化。

分析引擎270基于通过数据流接收的属性和/或被规定为元数据的一部分的属性,来评估规定表达式的报告。表达式可以基于各种操作,例如聚合和变换。在实施例中,表达式聚合在随后的时间间隔中通过数据流接收的属性值。

与属性相关联的属性可以被认为属于两个集合,第一属性集合和第二属性集合,第一属性集合的属性的值被提供作为数据流的数据的一部分,第二属性集合的属性的数据值被规定为元数据的一部分、并且存储在元数据储存库230中。由分析引擎270处理的表达式可以基于第一属性集合和第二属性集合。换句话说,表达式可以基于其值通过数据流接收的属性、以及被规定为元数据的一部分的属性。示例表达式可以计算通过数据流接收的属性值的和,使得聚合值在元数据属性上被分组。例如,如果数据流每秒钟向组织的几个服务器发送服务器的负载,并且存在与每个服务器相关联的元数据属性“数据中心”,则表达式可以确定在数据中心上被分组的服务器的平均负载。

仪器分析系统100周期性地确定输入表达式的值,并且发送结果用于显示,例如经由诸如在客户端设备上执行的浏览器应用等客户端应用。表达式可以通过以下方式来获得:以各种方式组合各种函数(包括聚合和变换),以及组合其他先前定义的表达。在实施例中,分析引擎270解析表达式,生成程序的可执行表示,并且执行所生成的表示。

作为表达式的评估结果,分析引擎270可以生成多个输出数据流。例如,假定分析引擎270接收和评估如下表达式:其跨与组织相关联的所有输入数据流中聚合在数据流中接收的属性值,并且通过元数据属性“数据中心”对它们聚合值进行分组。因此,分析引擎270生成与“数据中心”属性的不同值一样多的输出数据流。此外,由分析引擎270生成的输出数据流的数目可以随着时间间隔的不同而改变。例如,如果新的数据中心被添加到组织并且变为活动,则由于添加了新的数据中心,输出数据流的数目可能会增加。类似地,如果现有数据中心的服务器关闭,则输出数据流的数目可以在随后的时间间隔减少。因此,作为在不同时间间隔上评估相同表达式的结果,分析引擎270可以生成动态地变化的数目的输出流。输出流数目的变化可能是由于在随后的时间间隔内输入数据流的数目的改变、或者是由于在随后的时间间隔内在相同数据流集合中接收到的数据值的改变而发生的。

元数据模块220接收并且存储描述从开发系统120接收的各种数据流的元数据信息。在实施例中,存储在元数据模块220中的元数据从用户接收,例如,经由管理系统170的客户端管理应用170与仪器分析系统100交互的系统管理员。元数据可以被表示为名称-值对。在实施例中,元数据被表示为元数据对象,每个对象定义可以被表示为名称-值对的属性集合。数据流集合可以与元数据对象相关联。因此,由元数据对象表示的所有属性都与和元数据对象关联的每个数据流相关联。

元数据数据储存库230存储元数据对象及其与数据流的关联。元数据数据储存库230存储每个元数据对象的标识符(ID)和由元数据对象表示的属性。在实施例中,每个数据流与唯一地标识数据流的时间序列标识符相关联。元数据数据储存库230存储将每个元数据对象映射到一组时间序列标识符值的索引。元数据数据储存库230存储将各种标签(即,属性或名称-值对)映射到时间序列标识符值的集合的索引。

元数据储存库230可以基于所接收的指令来修改元数据对象。例如,元数据储存库230可以修改、添加或删除由元数据对象表示的一些属性。或者,元数据储存库230可以基于所接收的指令来修改从元数据对象到数据流的映射。例如,元数据储存库230可以将数据流与元数据对象相关联,或者删除元数据对象和数据流之间的关联。

在实施例中,元数据储存库230被表示为关系数据库,但是可以被表示为任何其他类型的数据库或数据储存库。例如,元数据储存库230可以是存储将元数据对象ID映射到标识数据流的时间序列标识符的表的关系数据库。其他数据库表可以存储与每个元数据对象相关联的属性,作为从元数据对象ID到被表示为名称-值对的每个属性的映射。属性在本文中也被称为元数据标签或标签。

时间序列数据储存库260存储从各种源(例如开发系统120)接收的数据流。在实施例中,时间序列数据储存库260还在数据被量化之后存储数据流。作为评估表达式的结果,时间序列数据储存库260还可以存储由分析引擎270生成的输出数据流。例如,如果表达式导致生成多个数据流,则分析引擎270确定这些输出数据流中的每个的tsid,并且将每个输出数据流存储在时间序列数据储存库260中。

时间序列数据储存库260还可以存储每个数据流的累计数据。时间序列数据储存库260还存储各种分析请求的结果,例如用户请求的各种报告的结果。分析引擎270通过将存储在时间序列数据储存库260中的数据与作为数据流从各种来源实时地获得的数据进行组合,来计算例如在多个时间间隔内的移动平均值的某些报告的结果。

元数据表示

在实施例中,以分层方式组织元数据对象,从而使得能够重用元数据定义以及简化对元数据定义的修改。图3示出了根据实施例的、与从执行仪器化软件的实例接收的数据流相关联地规定的元数据对象的示例层级。如图3所示,每个元数据对象310表示属性集合。可以在仪器分析系统100中定义一些元数据对象,使得它们可用于系统的所有用户。其他元数据对象可以由用户定义,例如由使用仪器分析系统100来生成用于仪器化软件的报告的企业。

图3所示的元数据对象被组织为层级。因此,元数据对象310a在层级中在元数据对象310c之上,元数据对象310b在层级中在元数据对象310d之上,并且元数据对象310a、310b、310c和310d都在元数据对象310e之上。

元数据对象包括(即继承)在层级中在元数据对象之上的对象的属性。例如,元数据对象310c从元数据对象310a继承属性“critical:true”,元数据对象310d从元数据对象310b继承属性“datacenter:east”,元数据对象310e从在元数据对象310e之上的元数据对象继承属性“source:web1”、“datacenter:east”、“metric:errors”和“critical:true”。

除了从在层级中在元数据对象之上的元数据对象继承的属性之外,元数据对象可以定义附加属性。例如,元数据对象310c除了从元数据对象310a继承的属性“critical:true”之外,还定义了“metric:errors”,元数据对象310d除了从元数据对象310b继承的属性“datacenter:east”之外,还定义了“source:web1”,元数据对象310e除了从在层级中在元数据对象310e之上的元数据对象继承的属性之外,还定义了新的属性“administrator:admin1”。但是,元数据对象不是必须定义除了从在层级中在该元数据对象之上的元数据对象继承的属性之外的其他属性。

在实施例中,具有源和度量属性的元数据对象也被称为度量时间序列对象(MTS对象)。MTS元数据对象基于度量值和源值唯一地标识。因此,度量值和源值形成用于唯一地标识MTS对象的密钥(例如,主密钥)。定义数据流的数据点的值的任何元组可以基于元组的源值和度量值与MTS对象相关联。在实施例中,MTS对象X具有通过得到在层级中在元数据对象X之上的元数据对象的所有属性的并集而获得的属性集合。没有规定源值和度量值的元数据对象(诸如310a和310b)作为用于规定属性集合的抽象对象(这些元数据对象也称为标记)。

数据流的特征在于属性集合。数据流与具有匹配属性的元数据对象相关联。可以创建元数据对象的多个实例,每个实例用于具有匹配的属性集合的数据流。属性使得仪器分析系统100能够基于密钥值对来查询满足特定标准的MTS对象。例如,给定密钥值对的集合,仪器分析系统100可以标识与给定的密钥值对集合匹配的所有数据流。来自这些匹配数据流的数据点可以被提供给基于这些数据点来评估某些表达式的分析作业。

图4示出了根据实施例的与图3所示的元数据对象的层级相关联的数据流集合。图3所示的元数据对象的层级使用图4所示的相应的数据流集合来说明。假定图4所示的每个椭圆形状表示数据流的集合410。此外,图3所示的任何集合410x(其中x表示可以取值“a”、“b”、“c”等的变量)对应于图3所示的元数据对象310x。例如,集合410a对应于元数据对象310a,集合410b对应于元数据对象310b,集合410c对应于元数据对象310c,等等。

注意,元数据对象410可以不与任何数据流相关联,例如,可以添加元数据对象作为与在添加元数据对象时可用的任何数据流不相关联的建模构造。然而,可以修改从元数据对象410到数据流的映射。例如,可以将元素添加到与元数据对象相关联的数据流的集合或从集合中去除元素。因此,即使当元数据对象被添加到元数据储存库230时元数据对象不与任何数据流相关联,元数据对象可以在稍后阶段与一个或多个数据流相关联。

如图4所示,集合410a表示与元数据对象310a相关联的所有数据流,因此属性名称为“critical”并且值为“true”。用户(例如,系统管理员)可以使用管理系统160将数据流分配给元数据对象。例如,系统管理员可以确定被确定为对企业的操作至关重要的所有数据流并且将其与元数据对象310a相关联。

作为另一示例,集合410b表示与元数据对象310b相关联的所有数据流,并且因此属性名称为“datacenter”并且值为“east”。如上所述,系统管理员可以确定在被标记为“east”的数据中心中执行的仪器化软件的实例,并且将其与元数据对象310b相关联。或者,可以执行脚本或自动化进程以标识满足与元数据对象的属性相对应的特定标准的仪器化软件的实例。例如,可以执行爬行器来标识在数据中心“east”中执行的所有服务器,并且将其与元数据对象310b相关联。

集合410c表示与属性“critical:true”和“metric:errors”相关联的所有数据流。因此,集合410c是集合410a的所有数据中心的子集。这是因为可能存在满足“critical:true”但不满足“metric:errors”的附加数据流。注意,集合410a和410b可以包括一些交叠的数据流,但不是必需的。类似地,集合410c和410d可以包括一些交叠的数据流,但不是必需的。如图4所示,集合410a和410b包括一些交叠的数据流,类似地,集合410c和410d包括一些交叠的数据流。集合410e包括集合410c和410d的交集的子集,因为它除了继承的属性之外还定义了属性“administrator:admin1”。如果集合410e除了继承的属性之外没有定义属性,则集合410e将是集合410c和410d的交集。

通常,如果元数据对象X除了继承的属性之外没有定义任何新的属性,则对应于元数据对象X的集合是与在层级中在元数据对象X之上的元数据对象相对应的集合的交集。此外,如果元数据对象Y除了继承的属性之外还定义了新的属性,则对应于元数据对象Y的集合可以是与在层级中在元数据对象Y之上的元数据对象相对应的集合的交集的子集。

在一些实施例中,仪器分析系统100接收从一些元数据对象到数据流集合的映射。元数据模块220基于被映射到在层级中在元数据对象下面的其他元数据对象的数据流集合来确定与元数据对象相关联的数据流集合的元素。例如,元数据模块220基于被映射到在层级中在元数据对象下面的元数据对象的数据流集合的并集来确定与元数据对象相关联的所有数据流的集合。例如,在图3和图4中,元数据模块220接收从每个元数据对象310到一个或多个数据流的映射。元数据模块220将与元数据对象310a相关联的数据流集合确定为被映射到元数据对象310a、301c和310e的数据流的并集。

元数据对象的分层定义使得能够容易地将数据中心分配给各种属性并且还定义新的元数据对象。分析引擎270基于在元数据对象中定义的属性来接收和处理表达式。分析引擎270确定适用于表达式的数据流集合。例如,如果分析引擎270接收到规定计算满足“critical:true”的所有数据流的第95百分位数的表达式,则分析引擎270确定对应于元数据对象310a的所有数据流的第95百分位数,即,集合410a。如果分析引擎270接收到规定计算满足“critical:true”和“metric:errors”的所有数据流的第95百分位数的表达式,则分析引擎270确定与元数据对象310c相对应的所有数据流的第95百分位数,即集合410c。

每当元数据被修改时,仪器分析系统100确定适用于已修改元数据的所有数据流并且更新将元数据与数据流相关联的索引结构。例如,如果新的标签(即,属性或名称-值对)被定义并且与数据流集合相关联,则仪器分析系统100更新将标签与数据流相关联的索引。注意,对元数据对象的层级(例如,如图3所示)中的高层级的元数据对象的修改可能会影响在该层级中在该元数据对象下面的多个元数据对象。仪器分析系统100更新将受影响的这些元数据对象中的每个与适当数据流相关联的索引。

整体过程

图5示出了根据实施例的用于基于仪器化软件来生成报告的整体过程。元数据模块220接收510描述数据流的元数据。元数据定义独立于数据流本身的数据来接收。例如,数据流可以提供包括数据值和与数据值相关联的时间戳的元组,而不提供描述在元数据中规定的数据流的属性的值(例如,数据中心属性)。元数据模块220从不同于提供数据流的源的源来接收描述数据流的属性。例如,数据流由正在执行的仪器化软件的实例提供,而元数据定义由系统管理员经由管理系统160提供。

分析引擎270基于元数据接收520表达式,例如使用在元数据中规定的属性的表达式。接收的表达式520可以是查询的一部分,例如,由仪器分析系统100接收以生成描述仪器化软件的报告并且实时地(即,在数据流的数据被接收到时)提供结果的查询。

示例表达式基于来自多个数据流的数据的聚合生成值。例如,表达式可以基于来自多个数据流的数据的固定百分位数生成值,或者表达式可以生成作为来自多个数据流的数据的最大值(或最小值或平均值或任何其他统计测量值)的值。另一示例表达式累计来自多个流的数据并且通过元数据属性对数据值进行分组,从而生成多个输出数据流(假定元数据属性可以取多个数据值,并且多个输入数据流包括与元数据属性的多个数据值相关联的数据流)。

当各种数据流的数据由仪器分析系统100从各种开发系统120接收到时,仪器分析系统100重复以下步骤(530、540、550和560)。接口模块210分析530接收的表达式以标识适用于表达式的数据流。例如,在特定时间间隔中,接口模块210可以确定第一数据流集合适用于表达式。然而,在第二(且随后)时间间隔中,接口模块210可以确定第二数据流集合适用于表达式。例如,如果表达式基于从使用属性datacenter=east规定的数据中心“east”到达的数据流来评估某些值,则接收到的数据流的数目可能会增加(因为软件的新实例由数据中心中的服务器执行)或者接收的数据流的数目可能会减少(如果某些服务器关闭)。

接口模块210周期性地分析530表达式以标识适用于表达式的所有数据流。在实施例中,接口模块210分析530接收到的表达式的速率与剩余步骤540、550和560被执行的速率不同。例如,接口模块210分析530接收到的表达式的速率可能比剩余步骤540、550和560被执行的速率慢。

在实施例中,一旦适用于表达式的数据流可用,则仪器分析系统100更新与表达式相关联的数据流集合。仪器分析系统100保持与正在评估的每个表达式相关联的数据流集合的表示。一旦新数据流被注册或接收到适用于表达式的数据流的数据,则仪器分析系统100将数据流添加到与表达式相关联的数据流集合。类似地,如果数据流不再适用于表达式,则仪器分析系统100从与仪器分析系统100相关联的数据流集合中去除数据流。例如,如果描述数据流的元数据被修改,则数据流可以不与表达式相关联。因此,仪器分析系统100不必周期性地评估适用于表达式的数据流集合。一旦发生引起与表达式相关联的数据流改变的对输入数据流的改变,适用于每个表达式的数据流集合被确定。

接口模块210接收540不同数据流的数据点(被表示为值的元组)。在实施例中,接口模块210等待固定时间间隔,例如1秒或几秒,并且在固定时间间隔期间收集从不同数据流接收的所有数据。在实施例中,量化模块240在每个时间间隔执行数据的量化。因此,来自每个数据流的数据被聚合成与时间间隔的数据流相关联的单个值。量化数据流的表示被维持,包括从数据流的源到达的数据的存储器内表示以及在时间序列数据储存库260中作为数据流或时间序列存储的较旧的数据值。

分析引擎270基于时间间隔的数据流的数据来评估550表达式。如果为每个数据流量化数据,则分析引擎270使用来自每个数据流的量化值来评估550表达式。分析引擎270将用于呈现的表达式的评估结果发送560给例如用户界面。

分析引擎270还将作为评估表达式的结果获得的输出数据流(或多个输出数据流)存储在例如时间序列数据储存库260中。在实施例中,分析引擎270创建表示作为评估表达式的结果而获得的每个输出数据流的新数据流。新数据流存储在时间序列数据储存库260中。这允许将表达式的结果用作其他表达式的输入。例如,表达式可以表示作为多个数据流接收的值的第95百分位数。表达式的结果可以作为新的数据流存储在时间序列数据储存库260中。分析引擎270还可以执行基于生成的数据流来计算移动平均值的表达式。

在实施例中,仪器分析系统100执行评估所接收的表达式并且执行步骤530、540、550和560的作业(或过程)。该作业动态地评估查询以确定对应于表达式的MTS对象的实例(和关联的数据流)。确定与基于表达式匹配查询的所有数据流。在评估表达式时考虑匹配的数据流的数据点。

量化

仪器分析系统100通过以下方式来执行数据流的量化:处理具有以不规则时间间隔到达的数据值的数据流,并且生成以规则的时间间隔具有数据的等效数据流。如果两个连续数据值对之间的时间间隔不同,则数据流的数据值以不规则的时间间隔到达。例如,值v1和v2的到达之间的时间间隔与值v2和v3的到达之间的时间间隔不同。

输入数据流的量化简化了使用量化数据流的数据处理。例如,可以通过简单地从每个量化数据流聚合时间间隔的单个数据值来为每个时间间隔确定基于接收的多个数据流的聚合值。此外,仪器分析系统100使用相同的量化数据流集合来评估与不同报告相对应的不同表达式。结果,对于每个固定时间间隔,被执行用于对用于执行量化的数据值进行聚合的计算被重新用于评估每个表达式。

在实施例中,仪器分析系统100在每个固定时间间隔结束时执行输入数据流的量化,使得时间间隔的量化数据可用于在该固定时间间隔内进行处理。此外,仪器分析系统100存储量化数据流,使得跨多个数据流的数据可以以各种方式组合。换句话说,用户可以发送以第一方式跨数据流集合组合数据的第一请求;随后用户可以发送以不同的方式跨不同数据流集合组合数据的新请求。如果两组数据流交叠,则交叠数据流的时间间隔的数据值可以在两次计算中重用。

作为示例,仪器分析系统100可以接收并且处理跨多个数据流组合数据的报告,以查看在各种数据中心上计算的聚合。然而,随后,用户可以改变请求以查看在不同类型的应用、不同类型的服务器、不同地理区域等之上的计算的聚合。仪器分析系统100对这些计算中的每一个重用量化数据流的数据值。

仪器分析系统100还可以接收用户修改数据流集合的请求,在该数据流集合上评估聚合数据流的数据的先前表达式。例如,用户可以请求仪器分析系统100从数据流集合中去除一个或多个数据流,并且基于已修改集合请求聚合。用户可以发送这样的请求,以分析去除或添加新服务器、应用或对系统配置进行任何其他修改的影响。仪器分析系统100保持量化数据流(或量化时间序列数据),并且基于这些请求将不同时间间隔的量化数据流组合。由于仪器分析系统100存储量化数据流,因此仪器分析系统100具有根据需要有效地跨数据流组合数据的能力。

仪器分析系统100可以跨数据流组合数据以跨多个数据流执行移动聚合计算。仪器分析系统100可以连续计算在给定长度的时间间隔内的任何移动聚合值,例如,一小时移动平均值、15分钟移动平均值等等。

量化模块的架构

量化模块240针对每个时间间隔聚合输入数据流的值,并且生成时间间隔的聚合值。因此,量化模块240接收其中数据值可以在任意时间间隔之后发生的数据流。量化模块240处理输入数据流以生成其中数据以规则的时间间隔可用的数据流。本文中还描述量化模块240的细节。

量化模块240接收描述在数据流中接收的值的类型的信息,例如,该值是否是特定动作或实体的计数,该值是否通过某个值的聚合获得,该值是否表示给定值集合中的最大值/最小值,等等。数据流与描述由仪器化软件执行以获得该值的操作类型的值的类型相关联。由量化模块240接收和处理的数据流的各种类型的值的示例包括作为执行诸如计数(基数)、平均值、中值、百分位数、最新值等统计操作的结果而获得的值。对描述由仪器化软件表示的实体或由仪器化软件执行的动作来执行统计操作。

在实施例中,量化模块240存储从数据流的各种类型的值到在某个间隔针对数据流的输入值执行的操作类型的映射以获得对应于量化数据流的固定时间间隔的结果值的。该映射可以存储为结构,或者被编码在量化模块240的指令内,例如,作为if、then、else命令的序列。例如,量化模块240可以被配置为包括该形式的指令,如果数据流与操作类型“计数”相关联,则执行第一功能,否则如果数据流与操作类型“求和”相关联,然后执行第二功能,等等。

在实施例中,量化模块240包括用于存储在特定时间间隔作为输入而接收的数据值的缓冲器。量化模块240的缓冲器使用被配置为存储任意数目的值的数据结构,因为在时间间隔中接收的值的数目不是预先已知的,并且可以随着时间间隔不同而改变。例如,量化模块240可以使用列表数据结构或堆栈数据结构来存储输入数据流的值。

量化模块240收集针对每个固定时间间隔接收的数据流的数据值。量化模块240存储表示固定时间间隔的长度的常数值L。量化模块240跟踪从在先固定时间间隔关闭的时间以确定当前时间间隔的长度。量化模块240将当前时间间隔的长度与L进行比较,以确定何时达到当前时间间隔的结束。量化模块240处理在当前时间间隔中接收的所有数据值,以确定表示当前时间间隔的聚合值。

量化模块240将聚合值存储为表示对应于当前时间间隔的固定时间间隔的量化数据流值。量化模块240随后清除用于表示当前时间间隔的输入值的缓冲器,并且使用它来存储下一固定时间间隔的值。在实施例中,量化模块240使用多个缓冲器,使得当处理存储在缓冲器中的先前时间间隔的数据时,可以将下一时间间隔的新数据存储在另一缓冲器中。

图6示出了根据实施例的从仪器化软件接收的数据流的量化过程。图6示出了时间轴620a和620b,每个时间轴表示具有一系列数据值的时间线。时间轴620a示出了输入数据流600的数据值,时间轴620b示出了由量化模块240生成的量化数据流610的结果值的数据流。

时间间隔I1、I2、I3等表示对应于量化数据流的固定时间间隔。如图6所示,在时间间隔I1(表示从T0到T1的时间)中接收四个数据值D11、D12、D13和D14;在时间间隔I2(表示从T1到T2的时间)中接收两个数据值D21和D22;并且在时间间隔I3(表示从T2到T3的时间)中接收三个数据值D31、D32和D33。

可以假定Tm和Tn之间的时间间隔包括开始时间点Tm(使得结束时间点Tn被包括在下一时间间隔中)。可以使用Tm和Tn之间的时间间隔的任何其它解释,例如,结束时间点Tn被包括在时间间隔中,并且起始时间点Tm被包括在前一时间间隔中的。

量化模块240处理每个时间间隔的数据值,以生成时间轴620b所示的相应结果值。例如,量化模块240聚合在时间间隔I1中接收的值D11、D12、D13和D14,以生成时间轴620b所示的值D1;量化模块240聚合在时间间隔I2中接收的值D21和D22以生成时间轴线620b所示的值D2;并且量化模块240聚合在时间间隔I3中接收的值D31、D32和D33,以生成时间轴620b所示的值D3。

在实施例中,量化模块240接收定义量化策略的配置参数(例如,用户定义的配置参数),量化策略定义如何量化数据。不同类型的数据可能会被不同地量化。换句话说,用于聚合数据流的输入值的所执行的操作类型取决于由输入数据流表示的数据的类型。

如果输入数据流的每个元组是某个值的计数,例如由软件执行的动作的计数,则量化模块240聚合输入值以通过添加计数来确定每个时间间隔的输出数据流值。如果接收的输入数据流的每个元组是值集合中的最小值(或最大值),则量化模块240聚合某个时间间隔的输入值,以通过确定该时间间隔的输入值的最小值(或最大值)来确定该时间间隔的输出值。如果接收的输入数据流的每个元组是来自值集合中的最新值,则量化模块240聚合一定时间间隔的输入值,以通过确定该时间间隔的最新输入值(并且忽略在该时间间隔期间接收的在先值)来确定该时间间隔的输出值。如果接收的输入数据流的每个元组是值集合中的平均值,则量化模块240可以聚合与时间间隔相关联的输入值,以通过确定时间间隔的输入值的平均值来确定每个时间间隔的输出数据流值。平均值的集合的平均值不一定是用于确定平均值集合的输入的平均值。

在实施例中,量化模块240通过从集合中选择最新值来聚合包括平均值集合的输入值。如果接收的输入数据流的每个元组是在该时间点的度量的最后可用值,则量化模块240聚合时间间隔的输入值,以通过简单地使用数据流的最后值来确定该时间间隔的输出值。

在实施例中,输入数据流包括表示某些输入值的平均值的数据值。每个数据值被表示为包括用于确定平均值的数据值的计数的元组。元组可以包括平均值和用于确定平均值的数据值的数目的计数。量化模块240如下基于多个元组来确定总平均值。量化模块240通过将平均值与计数值相乘来确定每个元组的和值。量化模块240通过确定为每个元组添加和值来确定多个输入元组的总和值。量化模块240通过添加元组的计数值来确定总计数值。量化模块240通过将总和值除以总计数值来确定总平均值。

或者,每个元组可以包括和值以及用于确定和值的计数值。量化模块240可以通过将和值除以计数值来确定对应于每个元组的每个单独的平均值。量化模块240如下组合元组以确定总平均值。量化模块240将所有的和值相加以确定总和值。量化模块240将所有计数值相加以确定总计数值。量化模块240通过将总和值除以总计数值来确定总平均值。

在一些实施例中,量化模块240执行累计操作。累计操作对应于在较大的时间间隔(本文中称为累计时间间隔)上的进一步聚合数据。例如,假定量化模块240进行量化,以便将具有以各种时间间隔不规则地到达的数据的输入数据流变换为具有以一秒间隔可用的数据的数据流。量化模块240还可以执行累计操作以在更大的时间间隔(即,累计时间间隔)(例如,一分钟的时间间隔)上聚合数据。

在实施例中,在累计时间间隔结束时执行累计操作。这使得仪器分析系统100能够保持累计数据准备好用于每个数据流,使得仪器分析系统100可以有效地跨多个数据流执行累计操作。如上所述,仪器分析系统100可以以不同的方式跨多个数据流有效地组合累计数据,即用于累计的不同类型的函数、数据流的不同组合、跨其执行累计的不同集合。在实施例中,量化模块240在其上执行量化或累计的时间间隔的长度是可配置的。

图7示出了根据实施例的用于组合从各种源接收的数据流的数据的整体过程。本文中所描述的步骤可以由除了所示的模块之外的模块来执行。此外,可以以与图7中指示的顺序不同的顺序执行某些步骤。

该仪器分析系统100从多个开发系统120接收数据流,并且在数据被接收到时组合数据流的数据,以便基于该数据实时地生成报告。因此,与输入数据流相对应的报告的结果值被生成并且被发送以便在接收到数据时持续地呈现。例如,接收每个时间间隔的数据流的数据值,并且处理在随后时间间隔的结果值之前计算和被发送用于呈现的结果值。或者,可以在发送当前时间间隔的结果值用于呈现的同时,并行地接收并且处理下一时间间隔的数据值。图7示出了对于每个时间间隔重复的步骤。

接口模块210从一个或多个数据流接收710数据。例如,接口模块接收710a、710b、710c第一数据流、第二数据流、第三数据流等的数据。量化模块240量化对某个时间间隔对每个数据流接收的数据。例如,量化模块240量化720a、720b、710c第一数据流、第二数据流、第三数据流等的数据。因此,基于在时间间隔期间接收的每个数据流的数据值生成量化的聚合值。

分析引擎270评估730聚合与时间间隔的数据流相对应的量化数据值的表达式。可以使用描述存储在元数据储存库230中的数据流的元数据来规定表达式。分析引擎270将表达式的评估结果存储740在时间序列数据储存库260中。在实施例中,分析引擎270发送作为评价表达式的结果而获得的输出数据流用于呈现。

对于每个随后时间间隔,仪器分析系统100重复上述步骤710、720、730和740。结果,生成表示由分析引擎270接收的表达式的结果的新数据流并且将其存储在时间序列数据储存库260中。此外,当从输入数据流接收到每个固定时间间隔的数据时,表达式的结果被发送用于在每个固定时间间隔实时地显示。

替代实施例

尽管本文中所描述的实施例公开了从仪器化软件接收的数据流的分析,但是本文中所公开的技术适用于其他类型的数据流。例如,仪器分析系统100可以用于分析表示由传感器生成的数据的数据流、表示飞行跟踪信息的数据流、表示由传感器生成的天文信息的数据流、表示天气信息的数据流等。仪器分析系统100使得用户能够定义数据流本身不提供的描述数据流的元数据属性。因此,通过独立于数据流本身的源的源可以定义描述数据流的任何数目的元数据属性。此外,仪器分析系统100可以基于元数据属性以及作为数据流的一部分接收的属性来接收对表达式的规定。可以通过用户界面生成和呈现基于这样的表达式的实时报告。

在实施例中,若干传感器向仪器分析系统100注册,以提供标识每个传感器的信息。每个传感器将数据流发送给仪器分析系统100。仪器分析系统100还接收描述规定描述未提供数据流的数据流的属性的数据流的元数据。例如,元数据属性可以规定传感器的地理位置,可以将组织或组织内的组与传感器相关联,可以将一个或多个用户名与每个传感器相关联,将制造商名称与每个传感器相关联,等。仪器分析系统100还接收基于传感器数据和一个或多个元数据属性定义报告的表达式。仪器分析系统100基于固定时间间隔量化每个数据流。仪器分析系统100还周期性地评估表达式,并且将结果作为输出数据流发送,以经由用户界面显示。

由仪器分析系统100使用传感器数据生成的示例性报告确定从通过各种位置(例如,与制造设施相关联的每个位置)分组的传感器接收的数据值的总和,其中传感器提供与特定的制造过程相关联的数据。由仪器分析系统100使用传感器数据生成的另一示例报告确定由每个传感器的制造商分组的有源传感器的计数,假定仪器分析系统100可以基于接收到的数据流(或基于从传感器预期的数据流缺乏)区分有源传感器与故障传感器。由仪器分析系统100使用传感器数据生成的示例报告基于由组织内的组分组的传感器数据确定活动的度量(假定不同的传感器与组织的组相关联)。这些示例说明了本文中所公开的技术如何应用于从除了仪器化软件之外的其他源接收的数据流。

应当理解,已经简化了本发明的附图和描述以示出与清楚理解本发明相关的元件,同时为了清楚起见,删除了在典型系统中能够找到的很多其他元件。本领域普通技术人员可以认识到,在实现本发明时,期望和/或需要其它元件和/或步骤。然而,因为这些元件和步骤在本领域中是众所周知的,并且因为它们不利于更好地理解本发明,所以本文中没有提供对这些元件和步骤的讨论。本文中的公开内容涉及本领域技术人员已知的对这样的元件和方法的所有这样的变化和修改。

以上描述的一些部分在关于信息的操作的算法和符号表示方面来描述实施例。这些算法描述和表示通常由数据处理领域的技术人员使用以便将其工作的实质有效地传达给本领域技术人员。在功能上、计算上或逻辑上描述的这些操作被理解为由计算机程序或等效电路、微代码等实现。此外,有时也可以方便地将这些操作布置称为模块,而不失一般性。所描述的操作及其相关联的模块可以以软件、固件、硬件或其任何组合来实施。

如本文中所使用的,对“一个实施例”或“实施例”的任何引用表示结合该实施例描述的特定元件、特征、结构或特性被包括在至少一个实施例中。在说明书中的各个地方的短语“在一个实施例中”的出现不一定都指代相同的实施例。

可以使用表达“耦合”和“连接”以及它们的派生词来描述一些实施例。应当理解,这些术语不是作为彼此的同义词。例如,可以使用术语“连接”来描述一些实施例,以指示两个或多个元件彼此直接物理或电接触。在另一示例中,可以使用术语“耦合”来描述一些实施例,以指示两个或多个元件处于直接的物理或电接触。然而,术语“耦合”也可能表示两个或更多个元件彼此不直接接触,但仍然彼此协作或相互作用。实施例不限于在本上下文。

如本文中所使用的,术语“包括(comprises)”、“包括(comprising)”、“包括(includes)”、“包括(including)”、“具有(has)”、“具有(having)”或其任何其它变体旨在涵盖非排他性的包括。例如,包括元素列表的过程、方法、物品或装置不一定仅限于这些元素,而是可以包括未明确列出的或中央的过程、方法、物品或装置所固有的元素。此外,除非有明确的相反说明,否则“或”是指包括性的或不是排他性的或。例如,以下任一情况下A或B条件满足:A为真(或存在)而B为假(或不存在),A为假(或不存在)而B为真(或存在),以及A和B都为真(或存在)。

此外,使用“一个(a)”或“一个(an)”来描述本文中的实施例的元件和部件。这只是为了方便,并且给出本发明的一般意义。该描述应当被理解为包括一个或至少一个,并且单数也包括复数,除非显而易见地表示单数。

在阅读本公开之后,本领域技术人员通过本文中所公开的原理将会理解用于基于仪器化软件来生成报告的系统和过程的另外的替代结构和功能设计。因此,虽然已经示出和描述了特定实施例和应用,但是应当理解,所公开的实施例不限于本文中所公开的明确构造和部件。在不脱离所附权利要求限定的精神和范围的情况下,可以对本文中所公开的方法和装置的布置、操作和细节进行对本领域技术人员显而易见的各种修改、改变和变化。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1