对分布式应用程序的监测的制作方法

文档序号:6348741阅读:232来源:国知局
专利名称:对分布式应用程序的监测的制作方法
对分布式应用程序的监测背景当软件应用程序跨各种物理组件分布时会难以监测它们。此外,各个组件可能不可被操作,不同的组件可以处于不同的企业操作团队的管辖下。应用程序也可以包括多种技术。虽然分布式应用程序可以是异质的,但是,对于分布式应用程序的监测系统常常是技术专用的(例如,某一系统可以监测Java应用程序组件,但不可监测.NET应用程序组件)。 另外,监测系统可能对正在被监测的分布式应用程序的性能产生负面影响。即,为了监测分布式应用程序上的每一事务,监测系统可能会引入重大的处理和存储器开销,干扰操作或显著地影响分布式应用程序的性能。这样的性能影响在实时、几乎实时、或任务关键的分布式应用程序中可能是有问题的。

发明内容
本公开描述了对于分布式应用程序的监测系统。对各种硬件和软件分布式应用程序组件(如数据库、服务器以及web服务)进行监视得到支持。对诸如.NET、Java、Wind0WS 通信基础(WCF)、因特网信息服务(IIS)、基于Windows的技术、以及基于UNIX的技术之类的多种技术进行监视也得到支持。监测系统包括技术不可知的拦截器管理器以及能够拦截由分布式应用程序的组件所发送的和接收到的消息的一个或多个技术专用的拦截器。技术专用的拦截器中的每一个都是特定技术所专用的,并被附加到与特定技术相关联的分布式应用程序组件(例如,.NET拦截器被附加到包括.NET应用程序或服务的分布式应用程序组件)。技术专用的拦截器可以被配置成跟踪对特定函数的调用,沿着分布式应用程序的特定执行路径跟踪活动,或跟踪分布式应用程序中发生的事件(例如,软件异常或报告的错误)。技术专用的拦截器基于拦截的消息来生成工作项,并将工作项发送到技术不可知的拦截器管理器。技术不可知的拦截器管理器可以调度接收到的工作项供执行。例如,技术不可知的拦截器管理器可以将分布式应用程序的已发现的依赖关系存储在存储位置,将活动信息存储在该存储位置,并将事件的发生报告给诸如IT管理员或管理应用程序之类的客户端。 技术不可知的拦截器管理器也可以包括节制功能,如工作项排队、依赖关系缓存、后台线程化以及垃圾回收,以减轻监测系统的性能影响。提供本发明内容是为了以精简的形式介绍将在以下具体实施方式
中进一步描述的一些概念。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。


图1是监测分布式应用程序的系统的特定实施例的框图;图2是监测分布式应用程序的系统的另一特定实施例的框图;图3是可以和监测分布式应用程序的系统一起使用的身份监测器的特定实施例的框图4是示出了监测分布式应用程序的消息拦截的框图;图5是监测分布式应用程序的方法的特定实施例的流程图;图6是监测分布式应用程序的方法的另一特定实施例的流程图;图7是监测分布式应用程序的方法的特定实施例的流程图;图8是监测分布式应用程序的方法的另一特定实施例的流程图;图9是监测分布式应用程序的方法的另一特定实施例的流程图;图10是在技术不可知的拦截器管理器上有选择地调度工作项的方法的特定实施例的流程图;图11是示出了分布式计算环境的特定实施例的一般示意图;以及图12是一种计算环境的框图,包括可以支持如图1-11所示的计算机实现的方法、 计算机程序产品以及系统组件的实施例的计算设备。
具体实施例方式在一特定实施例中,公开了包括标识分布式应用程序的多个组件以及标识与多个组件中的特定组件相关联的特定技术的方法。该方法还包括基于所标识的特定技术来将技术专用的拦截器附加到该特定组件,使用附加的技术专用的拦截器来拦截由该特定组件所发送的或接收到的消息。该方法还包括基于拦截的消息,生成至少一个潜在的工作项,并基于该至少一个潜在的工作项对分布式应用程序的性能的预测影响,来确定是否要调度该至少一个潜在工作项以便执行。在一特定实施例中,该至少一个潜在工作项是响应于确定特定指令或指令集要求处理而生成的可执行的工作项。在另一特定实施例中,公开了包括多个技术专用的拦截器的系统,包括第一技术专用的拦截器和第二技术专用的拦截器以及技术不可知的拦截器管理器。第一技术专用的拦截器与第一技术相关联,第二技术专用的拦截器与不同于第一技术的第二技术相关联。 第一技术专用的拦截器被配置成跟踪与第一技术相关联的第一分布式应用程序组件的操作,包括拦截由第一分布式应用程序组件所发送的消息以及接收到的消息。第一技术专用的拦截器还被配置成基于所跟踪的第一分布式应用程序组件的操作来生成工作项,并将工作项发送到技术不可知的拦截器管理器。第二技术专用的拦截器被配置成跟踪与第二技术相关联的第二分布式应用程序组件的操作,包括拦截由第二分布式应用程序组件所发送的消息以及接收到的消息。第二技术专用的拦截器还被配置成基于所跟踪的第二分布式应用程序组件的操作来生成工作项,并将工作项发送到技术不可知的拦截器管理器。技术不可知的拦截器管理器包括多个工作项管理器,包括与第一技术专用的拦截器相关联的第一工作项管理器,以及与第二技术专用的拦截器相关联的第二工作项管理器。每一工作项管理器都与特定技术专用的拦截器相关联,并被配置成从特定技术专用的拦截器接收工作项并将接收到的工作项排队在工作项队列中。每一工作项管理器还被配置成将由特定技术专用的拦截器跟踪的特定工作项对分布式应用程序组件的性能的影响与可以接受的性能影响阈值进行比较。每一工作项管理器还被配置成当影响小于可以接受的性能影响阈值时,调度特定工作项以便执行,而当影响大于可以接受的性能影响阈值时,丢弃特定工作项,而不调度特定工作项来执行。在另一特定实施例中,公开了计算机可读介质。该计算机可读介质包括当由计算
6机执行时导致计算机在技术不可知的拦截器管理器上从被附加到分布式应用程序的第一组件的第一技术专用的拦截器接收第一工作项的指令。第一技术专用的拦截器是第一技术专用的,并且,第一组件与第一技术相关联。该计算机可读介质还包括当由计算机执行时导致计算机在技术不可知的拦截器管理器上从被附加到分布式应用程序的第二组件的第二技术专用的拦截器接收第二工作项的指令。第二技术专用的拦截器是第二技术专用的。第二组件与第二技术相关联,并且,第二技术不同于第一技术。该计算机可读介质还包括当由计算机执行时导致计算机基于第一工作项对分布式应用程序的第一影响并基于第二工作项对分布式应用程序的第二影响,来确定是否要调度第一工作项和第二工作项以便执行的指令。图1是监测分布式应用程序102的系统100的特定实施例的框图。分布式应用程序102包括诸如第一计算设备104上的Windows通信基础(WCF)组件110和第二计算设备106上的.NET组件120之类的组件。第一计算设备104和第二计算设备106是分布式的(例如,使用单独的硬件操作或彼此相距较远)。分布式应用程序102还包括附加到组件的技术专用的拦截器,如附加到WCF组件110的WCF拦截器112和附加到.NET组件120 的.NET拦截器122。分布式应用程序102的组件能够发送和接收消息,而附加到组件的技术专用的拦截器能够拦截消息。技术专用的拦截器也可以能够基于拦截的消息生成工作项,并将所生成的工作项发送到技术不可知的拦截器管理器130。分布式应用程序102的每一组件都可以被配置成将消息发送到分布式应用程序 102的其他组件,并从分布式应用程序102的其他组件接收消息。例如,WCF组件110和.NET 组件120可以被配置成向彼此发送消息并从彼此接收消息。在一特定实施例中,消息是可扩展标记语言(XML)消息。每一技术专用的拦截器都可以被配置成跟踪对技术专用的拦截器被附加到的组件上的特定函数的调用。例如,WCF拦截器112可以被配置成跟踪对WCF组件110上的特定函数的调用。在一特定实施例中,特定函数包括处于分布式应用程序102的不同的组件上的源操作和目标操作。例如,特定函数可以具有WCF组件110上的源操作以及.NET组件 120上的目标操作。然后,WCF拦截器112可以通过拦截指出对特定函数的调用的消息来发现WCF组件110上的源操作和.NET组件120上的目标操作之间的依赖关系。每一技术专用的拦截器也可以被配置成监测分布式应用程序102的包括技术专用的拦截器被附加到的组件的特定执行路径上的活动。例如,WCF拦截器112可以拦截WCF 组件110和.NET组件120之间的消息,并确定拦截的消息表示沿着包括WCF组件110的特定执行路径的活动。每一技术专用的拦截器也可以被配置成跟踪在分布式应用程序102上发生的特定事件(例如,软件异常或报告的错误)。在一特定实施例中,特定事件是在特定时间内跟踪的。例如,WCF拦截器112可以跟踪一分钟内在WCF组件110上发生的软件异常的数量, 以便计算WCF组件110上的每分钟异常率。可另选地,可以连续地跟踪特定事件。例如, WCF拦截器112可以拦截WCF组件110和.NET组件120之间的拦截,并根据拦截的消息来确定在WCF组件110或者.NET组件120上发生了软件异常(例如,事件)。每一技术专用的拦截器都可以被配置成基于在技术专用的拦截器上拦截的消息生成工作项,并将所生成的工作项发送到技术不可知的拦截器拦截器130。例如,WCF拦截器112可以生成包括存储WCF组件110上的源操作和.NET组件120上的目标操作之间的已发现的依赖关系的指令的工作项,并将该工作项发送到技术不可知的拦截器管理器130。 作为另一个示例,WCF拦截器112可以生成包括存储涉及包括WCF组件110的特定执行路径的活动信息的指令的工作项,并将该工作项发送到技术不可知的拦截器管理器130。作为再一个示例,WCF拦截器112可以生成包括报告WCF组件110上或者.NET组件120上的软件异常的发生的指令的工作项,并将该工作项发送到技术不可知的拦截器管理器130。. NET拦截器122可以类似地生成工作项。可另选地,WCF拦截器112可以生成包括所有三个任务的指令的单一工作项。应该注意,多个拦截器也可以被附加到单个组件。例如,当web服务器包括.NET 技术和WCF技术两者时,诸如图1的.NET拦截器122之类的.NET拦截器和诸如图1的WCF 拦截器112之类的WCF拦截器两者都可以被附加到分布式应用程序102的web服务器。技术不可知的拦截器管理器130可以位于分布式应用程序102的web服务中或位于分布式应用程序102的管理应用程序中。技术不可知的拦截器管理器130可包括多个工作项管理器,其中,多个工作项管理器中的每一个都被配置成从特定技术专用的拦截器接收工作项。例如,在图1中所示出的实施例中,技术不可知的拦截器管理器包括被配置成从 WCF拦截器112接收工作项的WCF工作项管理器140,以及被配置成从.NET拦截器122接收工作项的.NET工作项管理器150。工作项管理器中的每一个也都可以被配置成将工作项存储在工作项队列中。例如,WCF工作项管理器142可以将工作项存储在WCF工作项队列 142中,而.NET工作项管理器可以将工作项存储在.NET工作项队列152中。在一特定实施例中,工作项按照工作项由技术不可知的拦截器管理器130接收的顺序被存储在工作项队列中。例如,当从WCF拦截器112接收到的第一工作项在从WCF拦截器接收到的第二工作项之前被技术不可知的拦截器管理器130接收到时,第一工作项可以被存储在WCF工作项队列142中,排在第二工作项之前。工作项管理器中的每一个还被配置成当工作项队列已满时丢弃接收到的工作项。例如,当WCF工作项管理器140确定WCF工作项队列142已满时(例如,当WCF工作项队列142的大小等于WCF工作项管理器140已知的最大工作项队列大小变量时),WCF工作项管理器140可以丢弃接收到的工作项。工作项管理器中的每一个都可包括被配置成调度排队的工作项以便执行的工作项调度逻辑。例如,WCF工作项管理器140可包括WCF工作项调度逻辑144,而.NET工作项管理器150可包括.NET工作项调度逻辑154。在一特定实施例中,WCF工作项调度逻辑144 或.NET工作项调度逻辑IM可以基于所预测的特定工作项对分布式应用程序102的性能的影响来确定是否要调度该特定工作项以便执行。例如,当所预测的特定工作项的影响低于可以接受的性能影响阈值时(例如,的可以接受的处理器使用率影响、1秒的可以接受的消息延迟影响、或三个可执行操作的可以接受的执行队列长度影响),WCF工作项调度逻辑144可以调度特定工作项以便执行。或者,WCF工作项调度逻辑144可以基于所预测的特定工作项对WCF组件110的影响来确定是否要调度特定工作项以便执行。在一特定实施例中,技术专用的拦截器被配置成向工作项管理器请求空工作项, 通过将信息和执行指令存储在空工作项中来生成工作项。可以理解,在这样的实施例中, 工作项管理器可以通过拒绝对空工作项的请求来降低在特定分布式应用程序组件上监测的性能影响。例如,在发现.NET组件120的依赖关系时,.NET拦截器122可以向.NET工作项管理器150请求空工作项。如果.NET工作项管理器150允许请求并将空工作项发送到.NET拦截器122,则.NET拦截器122可以通过将发现的依赖关系存储在空工作项中来生成工作项,并将所生成的工作项发送到.NET工作项管理器150。在一特定实施例中,工作项具有有效期,如果在有效期内它们没有被调度来执行,则将它们从工作项队列中丢弃。例如,如果由.NET拦截器122所生成的工作项没有在由.NET工作项管理器150生成的10秒的空工作项内被调度,则可以它将过期并可以被丢弃。在一特定实施例中,诸如工作项管理器140和工作项管理器150之类的工作项管理器可以根据下列示例性C#类模板和接口来实现
public class WorkItemManager<T> where T : class, IWorkItem, new ()
public T RequestWorkItem();
public void QueueWorkItem(T workltem);
public void ReturnWorkItem(T workltem);
public interface IWorkItem
void Initialize (); void SetupO ; void DoProcess(); void Cleanup ();
}在操作中,技术专用的拦截器可以被附加到分布式应用程序102的组件。例如, WCF拦截器112可以被附加到WCF组件110,而.NET拦截器122可以被附加到.NET组件 120。每一技术专用的拦截器可以被配置成在分布式应用程序102中跟踪函数调用、跟踪活动信息、跟踪性能事件或其任何组合。例如,WCF拦截器112可以被配置成跟踪对WCF组件 110上的特定WCF函数的调用,跟踪分布式应用程序102的包括WCF组件110的特定执行路径上的活动信息,以及跟踪在WCF组件110上发生的软件异常。类似地,.NET拦截器122 可以被配置成跟踪对.NET组件120上的特定.NET函数的调用,跟踪涉及分布式应用程序 102的包括.NET组件120的特定执行路径的活动信息,以及跟踪在.NET组件120上发生的软件异常。在操作过程中,技术专用的拦截器可以拦截分布式应用程序102的各种组件之间的一个或多个消息,并可以基于一个或多个拦截的消息来生成工作项。技术专用的拦截器也可以将所生成的工作项发送到技术不可知的拦截器管理器130。例如,WCF拦截器112可以拦截由WCF组件110发送到.NET组件120的消息,基于拦截的消息,来生成工作项,并将工作项发送到技术不可知的拦截器管理器130。在一特定实施例中,拦截的消息表示WCF组件110上的源操作和.NET组件120上的目标操作之间的依赖关系,工作项包括存储依赖关系的指令。在另一特定实施例中,拦截的消息包括涉及WCF拦截器112被配置成跟踪的分布式应用程序102的执行路径的活动信息,而工作项包括存储活动信息的指令。在另一特定实施例中,拦截的消息指出在WCF组件110上或者.NET组件120上发生了软件异常,而工作项包括报告软件异常的发生的指令。当技术不可知的拦截器管理器130从技术专用的拦截器接收到工作项时,工作项管理器(例如,WCF工作项管理器140或.NET工作项管理器150)可以将接收到的工作项添加到项队列中(例如,WCF工作项队列142或.NET工作项队列152)。对于WCF工作项队列142中的每一个潜在的工作项,WCF工作项调度逻辑144可以基于所预测的潜在工作项对分布式应用程序102的性能的影响来确定是否要调度潜在工作项以便执行。当所预测的潜在工作项的影响低于可以接受的性能影响阈值时,WCF工作项调度逻辑144可以调度潜在工作项以便执行。例如,当所预测的潜在工作项对分布式应用程序102上的消息延迟的影响小于1秒时,可以调度潜在工作项。当特定工作项的潜在影响高于可以接受的性能影响阈值时,WCF工作项调度逻辑144可以从WCF工作项队列142 中丢弃潜在工作项。例如,当所预测的潜在工作项对分布式应用程序102上的消息延迟的影响超过1秒时,可以丢弃潜在工作项。类似地,对于.NET工作项队列152中的每一个潜在工作项,.NET工作项调度逻辑可以基于所预测的潜在工作项对分布式应用程序102的性能的影响,来可选择性地调度潜在工作项。可以理解,可以使用图1的系统100来监测跨各种组件分布的并且包括各种技术的分布式应用程序。还可以理解,图1的系统100包括节制功能(例如,拒绝对空工作项的请求、限制工作项队列的大小、丢弃具有所预测的的对性能的高度影响的工作项、并在有效期之后让工作项自动过期),以减轻这样的监测对分布式应用程序的总体性能影响。因此, 可以理解,图1的系统100可以根据需求牺牲对于性能的监测准确性,以使得实时的、几乎实时、或任务关键的分布式应用程序的操作不被图1的系统100干扰。图2是监测分布式应用程序201的系统200的另一特定实施例的框图。分布式应用程序201包括多个技术专用的拦截器,如附加到.NET组件205的.NET拦截器202,附加到WCF组件206的WCF拦截器203,以及附加到Java组件207的Java拦截器204。每一技术专用的拦截器可以被配置成将工作项发送到技术不可知的拦截器管理器230。在一说明性实施例中,.NET拦截器202包括图1的.NET拦截器122,WCF拦截器203包括图1的WCF 拦截器112,技术不可知的拦截器管理器230包括图1的技术不可知的拦截器管理器130。由技术专用的拦截器所生成的并发送到技术不可知的拦截器管理器230的工作项可包括存储分布式应用程序201的已发现的依赖关系、存储涉及分布式应用程序201的特定执行路径的活动信息、报告在分布式应用程序201上发生了事件、或其任何组合的指令。技术不可知的拦截器管理器230可包括多个工作项管理器,如工作项管理器对0,其中, 每一工作项管理器都被配置成将从特定技术专用的拦截器接收到的工作项存储在诸如工作项队列242之类的工作项队列中。例如,工作项管理器240可以是.NET工作项管理器, 并将从.NET拦截器202接收到的工作项存储在工作项队列242中。作为另一个示例,工作项管理器240可以是WCF工作项管理器,并将从WCF拦截器203接收到的工作项存储在工作项队列242中。作为另一个示例,工作项管理器240可以是Java工作项管理器,并将从 Java拦截器204接收到的工作项存储在工作项队列M2中。工作项管理器240也可以包括工作项调度逻辑对4,其被配置成调度工作项队列 242中的工作项一般执行,并且一旦工作项被调度以便执行就从工作项队列M2中删除工作项。在一特定实施例中,工作项调度逻辑244可以基于所预测的特定工作项对分布式应用程序201的性能的影响来确定是否要调度特定工作项以便执行。例如,当所预测的特定工作项的影响低于可以接受的性能影响阈值时,工作项调度逻辑244可以调度特定工作项以便执行。工作项调度逻辑244可以访问线程池220,其中,线程池220包括一个或多个前台线程222和一个或多个后台线程224。当工作项调度逻辑244可以访问线程池220时,工作项调度逻辑244可以调度工作项以便在线程池220的前台线程222中的一个或后台线程 2M中的一个中执行。工作项调度逻辑244也可以被配置成限制同时执行的工作项的数量, 并限制线程池220的同时执行的线程的数量。技术不可知的拦截器管理器230上的依赖关系管理器272可以被配置成执行包括存储已发现的依赖关系的指令的工作项。在一特定实施例中,依赖关系管理器272将已发现的依赖关系暂时地收集在依赖关系缓存282中,并成批地存储收集的依赖关系。例如,依赖关系管理器272可以将已发现的依赖关系收集在依赖关系缓存观2中,每当依赖关系缓存观2的大小到达固定的批量大小(例如,20)时,存储来自依赖关系缓存观2的收集的已发现的依赖关系。可另选地,依赖关系管理器272可以将已发现的依赖关系收集在依赖关系缓存观2中,并在固定时间间隔(例如,120秒)存储来自依赖关系缓存观2的收集的已发现的依赖关系。如果由依赖关系缓存282收集的依赖关系在有效期内没有被存储,则它们会过期。依赖关系管理器272可以通过将一批已发现的依赖关系发送到负责将项存储在一个或多个存储位置的存储服务290来存储该批已发现的依赖关系。例如,存储服务290 可以将已发现的依赖关系可以存储在数据库或某种其他数据存储中。在一特定实施例中, 存储服务290可以响应于确定特定依赖关系先前没有被存储而存储该特定依赖关系。依赖关系管理器272也可以被配置成在分布式应用程序201的每一个各个技术专用的拦截器中打开或关闭依赖关系发现。例如,依赖关系管理器272可以在.NET拦截器202、WCF拦截器 203以及Java拦截器204中的每一个中打开或关闭依赖关系发现。技术不可知的拦截器管理器230上的活动管理器270可以被配置成执行包括存储涉及分布式应用程序201的特定执行路径的活动信息的指令的工作项。在一特定实施例中,活动管理器270将这样的工作项排队在活动队列280中,并当活动队列280满时丢弃接收到的这样的工作项。活动管理器270可以通过将活动信息从活动队列观0中传输到存储服务290来存储活动信息。在一特定实施例中,活动管理器270被配置成在特定技术专用的拦截器上初始化活动信息收集。例如,当Java组件207通过Java数据库连接(JDBC)与数据库连接时,活动管理器270可以通过指示Java拦截器204跟踪Java组件207上的包括JDBC调用的所有消息来跟踪数据库操作。应该注意,虽然图2中所示出的特定实施例只示出了一个存储服务(即,存储服务四0),可由技术不可知的拦截器管理器230访问多个存储服务。例如,依赖关系管理器272可以使用第一存储服务来存储已发现的依赖关系,而活动管理器270可以使用第二存储服务来存储活动信息。第一存储服务和第二存储服务可以将数据存储到相同的存储位置或不同的存储位置。技术不可知的拦截器管理器230上的身份监测器260可包括对于分布式应用程序 201的每一个组件的身份监测器。例如,身份监测器260可包括对于分布式应用程序201 的web服务的端点监测器。在一特定实施例中,对于特定组件的身份监测器存储涉及由附加到特定组件的技术专用的拦截器检测到的事件(例如,软件异常或错误)的数据。每一个身份监测器都可以具有一个或多个客户端,而每一个身份监测器都可以执行包括通过将特定事件的发生报告到一个或多个客户端来报告特定事件的发生的指令的工作项。例如, 当.NET拦截器202生成包括报告.NET组件205上的错误的指令的工作项,对于.NET组件 205的身份监测器可以通过向.NET组件205的身份监测器的客户端报告错误来执行工作项。每一个身份监测器都可以将事件数据存储在监测树中,该监测树包括分配的监测器,如组件监测器、端点监测器、活动监测器、业务角度监测器、操作调用监测器、仪器监测器或其任何组合。此处参考图3进一步描述了监测树。技术不可知的拦截器管理器230也可以包括垃圾回收器观4。垃圾回收器观4可以被配置成以固定时间间隔运行,并解除分配在固定时间间隔内没有被使用的监测器。在一特定实施例中,技术不可知的拦截器管理器230包括一个或多个配置设置 212。可以通过配置文件210来设置配置设置212。配置文件210可以被以任何格式(例如,XML)存储,并可包括对于依赖关系管理器272、活动管理器270、工作项管理器MO以及垃圾回收器观4的设置。例如,配置文件210可以按照XML存储,并包括下列示例性XML片

CinterceptorManagerConfiguration> <dependencyManager
s torageClient=·’ DependencyS torageClient" submitBatchSize="2" submitFrequency="20" cacheExpiration="60"/> CworkItemManager
maxWorkItemQueueSize="40000" maxWorkItemThreads="2" requestedWorkItemExpiration="20"/> <activityManager storageClient="ActivityStorageClient"/> <garbageCollector
frequency="60"/> </interceptorManagerConfiguration>
12
在一特定实施例中,可以根据下列示例性C#接口来实现技术专用的拦截器public interface IlnterceptorService
bool ProcessDependencyDiscovery(bool turnOn), bool ProcessActivityMonitoring(bool turnOn); Guid SetupInstrument(
stringaddress,stringaction,stringbpXPath,stringbpNamespacestringcounterNamestring counterConfig, int instrumentlnterval); Guid SetupOperationCalllnstrument( string sourceAddress,
string sourceAction, string targetAddress, string targetAction, string bpXPath, string bpNamespace, string counterName, string counterConfig, int instrumentlnterval); Guid SetupActivityInstrument( string address, string action, string bpXPath, string bpNamespace, string counterName, string counterConfig, int instrumentlnterval); InstrumentData [ ] GetInstruments (Guici [] ids) /
public enum InstrumentDataState
InstrumentNotFound,
InstrumentDataValidf
IntrumentProcessingErrorpublic class InstrumentData {
public InstrumentDataState State { get; } public double Value { get; }
public InstrumentValueState ValueState { get; } public DateTime WindowStart { get; } public DateTime WindowEnd { get; }
public enum InstrumentValueState
NotSet,
WindowSet,
Set,
SetWithOverflow
}可以理解,当如上文那样实现技术特定拦截器时,可以通过调用方法 ftOcessD印endencyDiscoveryO (进程依赖关系发现)来打开或关闭技术专用的拦截器上的依赖关系发现,并通过方法ftOcessActivityMonitoringO (进程活动检测)来打开或关闭活动监测。此外,还可以通过方法ktupInstrument ()(设置工具)来设置事件跟踪,可以通过方法ktupOperationCalIInstrument ()(设置操作调用工具)来设置函数调用跟踪, 并可以通过方法^^叩々(^&^7111计1~1111161^()(设置活动工具)来设置活动跟踪。在一特定实施例中,技术不可知的拦截器管理器230可以位于分布式应用程序 201外部的代理208中。在这样的实施例中,分布式应用程序上的诸如技术专用的拦截器 202-204之类的技术专用的拦截器可以被配置成通过外部代理208来跟踪函数调用、跟踪活动信息以及跟踪事件。在操作中,可以通过配置文件210来配置技术不可知的拦截器管理器230。技术不可知的拦截器管理器230可以标识分布式应用程序201的组件,如.NET组件205、WCF组件 206以及Java组件207。技术不可知的拦截器管理器230还可以标识与组件中的一个或多个相关联的特定技术,并将技术专用的拦截器附加到一个或多个组件。例如,技术不可知的拦截器管理器230可以将.NET拦截器202附加到.NET组件205,将WCF拦截器203附加到 WCF组件206,并将Java拦截器204附加到Java拦截器207。技术不可知的拦截器管理器 230可以配置技术专用的拦截器以发现依赖关系、跟踪活动信息以及跟踪分布式应用程序201中的事件。例如,依赖关系管理器272可以在.NET拦截器202处打开依赖关系发现, 并配置.NET拦截器202以跟踪对.NET组件205上的特定.NET函数的调用。作为另一个示例,活动管理器270可以指示Java组件204以跟踪Java组件207和数据库之间的JDBC 调用。作为再一个示例,技术不可知的拦截器管理器230可以配置WCF拦截器203,以报告 WCF组件206上的软件异常的每一次发生。技术专用的拦截器可以拦截分布式应用程序201的各种组件之间的一个或多个消息,并可以基于一个或多个拦截的消息来生成一个或多个工作项。例如,.NET拦截器202 可以拦截涉及对特定.NET函数的调用的消息,并发现WCF组件206上的源操作和.NET组件205上的目标操作之间的依赖关系。.NET拦截器202可以将相关的依赖关系工作项发送到技术不可知的拦截器管理器230。作为另一个示例,Java拦截器204可以检测到Java 组件207已经进行了 JDBC调用,并将相关的活动工作项发送到技术不可知的拦截器管理器 230。作为再一个示例,WCF拦截器203可以检测到软件异常在WCF组件206上的发生,并将相关的事件工作项发送到技术不可知的拦截器管理器230。当技术不可知的拦截器管理器230从.NET拦截器202接收到依赖关系工作项时,.NET工作项管理器(例如,当工作项管理器240是.NET工作项管理器时的工作项管理器M0)可以将依赖关系工作项添加到工作项队列中(例如,当工作项管理器240是.NET工作项管理器时的工作项队列M2)。工作项管理器上的工作项调度逻辑(例如,当工作项管理器240是.NET工作项管理器时的工作项调度逻辑M4)可以基于所预测的依赖关系工作项对分布式应用程序201的性能的影响来确定是否要调度依赖关系工作项以便执行。当所预测的依赖关系工作项的影响低于可以接受的性能影响阈值时,工作项调度逻辑2M可以调度依赖关系工作项供在线程池220的前台线程222或后台线程224中的一个中执行。依赖关系管理器272可以通过将WCF组件206上的源操作和.NET组件205上的目标操作之间的已发现的依赖关系添加到依赖关系缓存观2中来执行依赖关系工作项。在将已发现的依赖关系添加到依赖关系缓存观2中之后,依赖关系管理器272可以通过存储服务290存储已发现的依赖关系。可另选地,当所预测的依赖关系工作项的影响超出可以接受的性能影响阈值时,可以丢弃依赖关系工作项。当技术不可知的拦截器管理器230从Java拦截器204接收到活动工作项时,Java 工作项管理器(例如,当工作项管理器240是Java工作项管理器时的工作项管理器M0) 可以将活动工作项添加到工作项队列中(例如,当工作项管理器240是Java工作项管理器时的工作项队列M2)。工作项管理器上的工作项调度逻辑(例如,当工作项管理器240是 Java工作项管理器时的工作项调度逻辑M4)可以基于所预测的活动工作项对分布式应用程序201的性能的影响来确定是否要调度活动工作项以便执行。当所预测的活动工作项的影响低于可以接受的性能影响阈值时,工作项调度逻辑244可以调度活动工作项以便在线程池220的前台线程222或后台线程224中的一个中执行。活动管理器270可以通过将由 Java组件207作出的JDBC调用添加到活动队列观0中来执行活动工作项。在将JDBC调用添加到活动队列观0中之后,活动管理器270可以通过存储服务290来存储JDBC调用。可另选地,当所预测的活动工作项的影响超出可以接受的性能影响阈值时,可以丢弃活动工作项。当技术不可知的拦截器管理器230从WCF拦截器203接收到事件工作项时,WCF工作项管理器(例如,当工作项管理器240是WCF工作项管理器时的工作项管理器M0)可以将事件工作项添加到工作项队列中(例如,当工作项管理器240是WCF工作项管理器时的工作项队列M2)。工作项管理器上的工作项调度逻辑(例如,当工作项管理器240是WCF 工作项管理器时的工作项调度逻辑M4)可以基于所预测的事件工作项对分布式应用程序 201的性能的影响来确定是否要调度事件工作项以便执行。当所预测的事件工作项的影响低于可以接受的性能影响阈值时,工作项调度逻辑244可以调度事件工作项以便在线程池 220的前台线程222或后台线程224中的一个中执行。然后,WCF组件206的身份监测器 (例如,身份监测器260中的一个)可以通过将软件异常报告到WCF组件206的身份监测器的一个或多个客户端来执行事件工作项。可另选地,当所预测的事件工作项的影响超出可以接受的性能影响阈值时,可以丢弃该事件工作项。可以理解,图2的系统200包括节制功能以减轻监测分布式应用程序201的总体性能影响。例如,依赖关系管理器272可以通过将已发现的依赖关系缓存在依赖关系缓存观2中并成批地存储已发现的依赖关系来减少依赖关系存储操作的数量,每一个依赖关系存储操作都可能是耗时的。活动管理器270可以通过将活动信息排队在活动队列观0中并当分布式应用程序201相对空闲时(例如,在夜里或在周末)存储排队的活动信息来降低活动存储操作的影响。垃圾回收器284可以通过解除分配不再处于使用中的监测器来减少图2的系统200的存储器占用空间。工作项调度逻辑244可以限制同时执行的工作项的数量。工作项调度逻辑244也可以调度工作项以便在线程池220中优先级比分布式应用程序 201的其他线程低的后台线程中执行。即,后台线程将不会中断其他执行的线程以执行调度的工作项。图3是可以和诸如图1的系统100或图2的系统200之类的监测分布式应用程序的系统一起使用的身份监测器320的特定实施例的框图300。身份监测器320可以是包括诸如组件监测器330之类的一个或多个组件监测器322的监测树的根。监测树也可以包括业务角度监测器340、操作调用目标端点监测器370、计数器监测器350以及仪器监测器360 的一个或多个实例。在一说明性实施例中,身份监测器320是图2的身份监测器沈0中的一个。身份监测器320可以与分布式应用程序的特定组件相关联。例如,身份监测器320 可以与图1的组件110或120或图2的组件205、206或207中的一个相关联。身份监测器320可包括身份监测器320与其相关联的组件的地址321。地址321可以是因特网协议 (IP)地址或任何其他地址。例如,身份监测器320可包括图1的.NET组件120的IP地址。 身份监测器320也可以包括诸如组件监测器330之类的一个或多个组件监测器322。组件监测器330可包括一个或多个活动业务角度监测器331,以及诸如业务角度监测器340之类的一个或多个业务角度监测器332。组件监测器330也可以包括诸如操作调用目标端点监测器370之类的一个或多个操作调用监测器333。诸如业务角度监测器340之类的每一业务角度监测器,都可以为特定业务角度 (即,特定消息源)存储计数器和仪器数据。例如,业务角度监测器340可以存储将通过跟踪从图1的WCF组件110发送到图1的.NET组件120的消息而生成的计数器和仪器数据。 当消息是XML消息时,业务角度监测器340可包括可对消息执行以标识特定消息源的XML 路径语言(XPATH)操作341。业务角度监测器340也可以包括与特定消息源相关联的名称空间342。业务角度监测器340也可以包括诸如计数器监测器350之类的一个或多个计数器监测器343。计数器监测器350可以跟踪特定事件在分布式应用程序上的发生。计数器监测器 350可包括跟踪特定事件的计数器名称351和与该计数器相关联的配置352。例如,计数器监测器350可以跟踪在图2的.NET组件205上发生的并由图2的WCF组件206所引起的异常,并包括名称351 "WCF — . NET异常计数器”。计数器监测器350也可以包括诸如仪器监测器360之类的一个或多个仪器监测器353。诸如仪器监测器360之类的每一仪器监测器可以被配置成在特定时间点存储特定计数器的值。例如,仪器监测器360可以被配置成在特定时间点存储“WCF — . NET异常计数器”的值。在一特定实施例中,仪器监测器360包括特定计数器的当前值361、特定计数器的当前值状态362、以及与该特定计数器相关联的当前窗口 363。仪器监测器360也可以包括以前的值364、以前的值状态365、以及前一窗口 366。当前值状态362和以前的值状态365可包括指出特定计数器没有被初始化的状态、指出特定计数器被初始化但是没有被读取的状态、指出特定计数器包含有效值的状态、或指出特定计数器由于溢出包含不精确的值的状态。在一特定实施例中,每当特定计数器的值改变时,即分配新的仪器监测器。操作调用目标端点监测器370可以被配置成存储涉及特定操作调用(例如,函数调用)的数据。在一特定实施例中,操作调用是分布式应用程序的组件内部的。例如,操作调用可以是图1的.NET组件120上的内部函数调用。可另选地,操作调用可以是分布式应用程序的两个组件之间的操作调用。例如,操作调用可以是具有图1的WCF组件110上的源操作和图1的.NET组件120上的目标操作的函数调用。在一特定实施例中,操作调用目标端点监测器370是从对应于端点监测器320的软件类继承的软件类的对象,以使得每一操作调用目标端点监测器包括诸如端点地址321和一个或多个操作监测器322之类的端点监测器320的特征。应该注意,图3所示出的特定监测树是WCF技术专用的。监测树可包括对于不同的技术的监测器的不同的层次结构。可以理解,图3的监测树可以被用来组织来自由技术专用的拦截器所生成的工作项的数据,加速了对这样的数据的检索。例如,可以按照操作、按照业务角度、或按照计数器来组织来自特定拦截的消息的数据。当拦截的消息指出操作调用时,也可以按照操作调用来组织数据。图4是示出了监测分布式应用程序(例如,图1的分布式应用程序102或图2的分布式应用程序201)的消息拦截的框图400。在图4中所示出的特定实施例中,拦截.NET 组件410和Java组件440之间的消息。在被附加到.NET组件410的.NET拦截器420上以及在被附加到Java组件440的Java拦截器430上拦截消息。在一说明性实施例中,.NET 组件410包括图1的.NET组件110或图2的.NET组件205,而Java组件440包括图2的 Java 组件 207。 可以将.NET拦截器420附加到.NET组件410,以使得.NET组件410上的所有传入和传出的消息经过.NET拦截器420。例如,可以将.NET拦截器420附加到.NET组件410 的.NET网络接口 412。. NET组件410上的传入和传出的消息可以是XML消息,或者也可以是任何其他消息格式。
18
类似地,可以将Java拦截器430附加到Java组件440,以使得Java组件440上的所有传入和传出的消息经过Java拦截器430。例如,可以将Java拦截器430附加到Java 组件440的Java网络接口 442。Java组件440上的传入和传出的消息可以是XML消息,或者也可以是任何其他消息格式。在操作中,.NET组件410可以将消息460发送到Java组件440。消息460可以在.NET网络接口 412处离开.NET组件410,并可以被附加到.NET网络接口 412的.NET拦截器420拦截。在拦截消息460时,.NET拦截器420可以检查消息460,以试图发现.NET 组件410的依赖关系、跟踪包括.NET组件410的特定执行路径中的活动信息、或跟踪特定事件在.NET组件410上的发生。在检查拦截的消息460之后,.NET拦截器420可以将拦截的消息460发送到Java组件440。在到达Java组件440之前,可以再次拦截消息460,此时由Java拦截器430拦截。 Java拦截器430可以对拦截的消息460执行类似的操作,如上文参考.NET拦截器420所描述的。例如,Java拦截器430也可以检查消息460,以试图发现Java组件440的依赖关系、 跟踪包括Java组件440的特定执行路径中的活动信息、或跟踪特定事件在Java组件440 上的发生。应该注意,在任何一个方向发送的消息都可以被拦截和检查。例如,从Java组件 440发送到.NET组件410的第二消息470也可以被拦截和检查,以发现依赖关系、跟踪活动信息、以及跟踪事件发生。还应注意,虽然图4中所示出的特定实施例示出了被附加到两个组件的拦截器,但是,甚至在两个组件之间的消息路径中只存在一个拦截器的情况下,也可以在两个组件之间发现依赖关系。例如,当Java拦截器430不存在时,.NET组件410和 Java组件440之间的依赖关系仍然可以被.NET拦截器420发现。类似地,当Java拦截器 430不存在时,.NET组件410和Java组件440之间的依赖关系仍然可以被Java拦截器430 发现。可以理解,如图4所示,消息拦截可以被用来监测分布式应用程序中与不同的技术(例如,· NET和Java)相关联的组件。图5是监测分布式应用程序的方法500的特定实施例的流程图。在一说明性实施例中,方法500可以由图1的系统100或图2的系统200来执行。方法500包括在502标识分布式应用程序的多个组件。例如,在图1中,技术不可知的拦截器管理器130可以标识 WCF组件110和.NET组件120。方法500还包括在504标识与多个组件中的特定组件相关联的特定技术。例如,在图1中,技术不可知的拦截器管理器130可以标识WCF组件110与 WCF技术相关联。方法500还包括在506基于所标识的特定技术来将技术专用的拦截器附加到特定组件,使用附加的技术专用的拦截器来拦截由特定组件所发送的或接收到的消息。例如,在图1中,技术不可知的拦截器管理器130可以将WCF拦截器112附加到WCF组件110,而WCF 拦截器112可以拦截由WCF组件110所发送的或接收到的消息。方法500还包括在508基于拦截的消息来生成至少一个潜在工作项。例如,在图1中,WCF拦截器112可以基于拦截的消息来生成至少一个潜在工作项。方法500还包括在510确定是否要调度至少一个潜在工作项。基于所预测的至少一个潜在工作项对分布式应用程序的性能的影响,作出此判断。例如,在图1中,WCF工作项调度逻辑144可以基于所预测的至少一个潜在工作项对分布式应用程序102的性能的影响来确定是否要调度至少一个潜在工作项以便执行。可以理解,可以使用图5的方法500来监测跨各种组件分布的并且包括各种技术的分布式应用程序。还可以理解,图5的方法500可以通过不调度对分布式应用程序的性能具有所预测的高度影响的工作项,来降低这样的监测的总体性能影响。例如,图5的方法 500可以通过限制排队的工作项的数量来降低这样的监测的总体性能影响。因此,可以理解,图5的方法500可以根据需求牺牲对于性能的监测准确性,以使得实时的、几乎实时、或任务关键的分布式应用程序的操作不被干扰。图6是监测分布式应用程序的方法600的另一特定实施例的流程图。在一说明性实施例中,方法600可以由图1的系统100或图2的系统200来执行。方法600包括在602 标识分布式应用程序的多个组件。例如,在图1中,技术不可知的拦截器管理器130可以标识WCF组件110和.NET组件120。方法600还包括在604标识与多个组件中的特定组件相关联的特定技术。例如,在图1中,技术不可知的拦截器管理器130可以标识WCF组件110 与WCF技术相关联。方法600还包括在606基于所标识的特定技术来将技术专用的拦截器附加到特定组件,使用附加的技术专用的拦截器来拦截由特定组件所发送的或接收到的消息。例如,在图1中,技术不可知的拦截器管理器130可以将WCF拦截器112附加到WCF组件110,而WCF 拦截器112可以拦截由WCF组件110所发送的或接收到的消息。方法600还包括在608基于拦截的消息来生成至少一个潜在工作项。例如,在图1中,WCF拦截器112可以基于拦截的消息来生成至少一个潜在工作项,并将该至少一个潜在工作项发送到技术专用的拦截器管理器,其中,该至少一个潜在工作项被插入WCF工作项队列142中。方法600还包括在610计算所预测的至少一个潜在工作项对分布式应用程序的性能的影响。预测的影响可以是对处理器使用率的影响、对消息延迟的影响、或对执行队列长度的影响。例如,在图1中,工作项调度逻辑144可以计算所预测的至少一个潜在工作项的影响,其中,预测的影响是对分布式应用程序102上的处理器使用率的影响、对分布式应用程序102上的消息延迟的影响或对分布式应用程序102的执行队列长度的影响。方法600 还包括在612确定所预测的影响是否小于可以接受的性能影响阈值。例如,在图1中,工作项调度逻辑144可以确定所预测的至少一个潜在工作项的性能影响是否小于可以接受的性能影响阈值。当确定所预测的影响小于可以接受的性能影响阈值时,该方法包括在614调度至少一个潜在工作项以便执行,并执行至少一个潜在工作项。例如,当确定所预测的影响小于可以接受的性能影响阈值时,WCF工作项调度逻辑144可以调度至少一个潜在工作项以便执行,并可以执行该至少一个潜在工作项。当确定所预测的影响不小于可以接受的性能影响阈值时,该方法包括在616丢弃该至少一个潜在工作项。例如,当确定所预测的影响不小于可以接受的性能影响阈值时,WCF工作项调度逻辑144可以通过从工作项队列142中删除该至少一个潜在工作项来丢弃它,而不调度该至少一个潜在工作项以便执行。可另选地, 在图1中,WCF工作项调度逻辑144可以允许至少一个潜在工作项保留在WCF工作项队列 142中,其中,至少一个潜在工作项将自动地过期。可以理解,图6的方法600可以被用来基于所预测的至少一个潜在工作项对分布
20式应用程序的性能的影响来有选择地调度至少一个潜在工作项以便执行。还可以理解,可以从工作项队列中删除具有预测的高度性能影响的工作项,为随后接收到的工作项释放工作项队列中空间。图7是监测分布式应用程序的方法700的另一特定实施例的流程图。在一说明性实施例中,方法700可以由图1的系统100或图2的系统200来执行。方法700包括在702 标识分布式应用程序的多个组件。例如,在图2中,技术不可知的拦截器管理器230可以标识.NET组件205、WCF组件206、Java组件207或其任何组合。方法700还包括在704标识与多个组件中的特定组件相关联的特定技术。例如,在图2中,技术不可知的拦截器管理器 230可以标识WCF组件206与WCF技术相关联。方法700还包括在706基于所标识的特定技术来将技术专用的拦截器附加到特定组件,使用附加的技术专用的拦截器来拦截由特定组件所发送的或接收到的消息。例如,在图2中,技术不可知的拦截器管理器230可以将WCF拦截器203附加到WCF组件206,而WCF 拦截器203可以拦截由WCF组件206所发送的或接收到的消息。方法700还包括在708基于拦截的消息来生成至少一个潜在工作项。例如,WCF拦截器203可以基于拦截的消息来生成至少一个潜在工作项。方法700还包括在710确定是否要调度至少一个潜在工作项以便执行。基于所预测的至少一个潜在工作项对分布式应用程序的性能的影响,来作出此判断。例如,在图2中,WCF工作项调度逻辑244可以基于所预测的至少一个潜在工作项对分布式应用程序201的性能的影响来确定是否要调度至少一个潜在工作项以便执行。方法700还包括在712计算涉及分布式应用程序的至少一个度量,如所生成的异常的数量或报告的错误的数量。例如,在图2中,技术不可知的拦截器管理器230可以从 WCF拦截器203接收指出WCF组件206上的异常的工作项,并对接收到的这样的工作项的数量计数。在一特定实施例中,异常可以由图3的身份监测器320之类的身份监测器来计数。 方法700还包括在714检测分布式应用程序的故障情况。例如,可以检测图2的分布式应用程序201的故障情况。方法700还包括在716基于至少一个度量将特定组件标识为故障情况的潜在原因。例如,在图2中,可以基于WCF组件206上的异常的数量将WCF组件206 标识为分布式应用程序201的故障情况的潜在原因。可以理解,图7的方法700可以被用来监测分布式应用程序的组件,并基于当监测特定组件时所生成的度量来将特定组件标识为分布式应用程序上的故障的潜在原因。如此,图7的方法700可以缩短诊断并对分布式应用程序上的故障情况作出响应所花的时间。 还可以理解,当监测分布式应用程序的组件时计算出的度量(例如,异常或错误的数量)可以被用来预测和防止未来的故障事件。例如,当由特定组件所生成的异常的数量增大时,可以向IT管理员通知异常增多,以使得IT管理员可以在特定组件发生故障之前解决该特定组件上的任何问题。图8是监测分布式应用程序的方法800的另一特定实施例的流程图。在一说明性实施例中,方法800可以由图1的系统100或图2的系统200来执行。方法800包括在802 标识分布式应用程序的多个组件。例如,在图2中,技术不可知的拦截器管理器230可以标识.NET组件205、WCF组件206、Java组件207,或其任何组合。方法800还包括在804标识与多个组件中的特定组件相关联的特定技术。例如,在图2中,技术不可知的拦截器管理器230可以标识WCF组件206与WCF技术相关联。
方法800还包括在806基于所标识的特定技术将技术专用的拦截器附加到特定组件。例如,在图2中,技术不可知的拦截器管理器230可以将WCF拦截器203附加到WCF组件206。方法800包括两个路径包括808、810、812以及814的用于事件监测的路径;以及包括816、818、820、822以及824的用于活动监测的路径。在用于事件监测的路径中,方法800包括在808分配计数器监测器以跟踪特定事件的发生。例如,在图2中,可以分配计数器监测器以跟踪WCF组件206上的异常,其中,计数器监测器位于WCF组件206的身份监测器(例如,身份监测器沈0中的一个)的监测树上。在一特定实施例中,已分配的计数器监测器包括图3的计数器监测器350。方法800还包括在810拦截涉及技术专用的拦截器上的特定事件的消息。例如,在图2中,WCF拦截器 203可以拦截指出在WCF组件206上发生异常的消息。方法800还包括在812生成指出特定事件的发生的工作项。例如,在图2中,WCF拦截器203可以生成指出在WCF组件206上发生异常的工作项。方法800还包括在814向计数器监测器的一个或多个客户端报告特定事件的发生。在一特定实施例中,当一个或多个客户端轮询计数器监测器时,可以报告特定事件的发生。例如,在图2中,可以将异常在WCF组件206上的发生向WCF组件206的身份监测器的一个或多个客户端(例如,身份监测器沈0中的一个)报告。在用于活动监测的路径中,方法800包括在816分配活动监测器以跟踪沿着特定执行路径的活动。例如,在图2中,可以分配活动业务角度监测器以跟踪沿分布式应用程序 201的包括WCF组件206的特定执行路径的活动,其中,活动业务角度监测器位于WCF组件 206的端点监测器(例如,端点监测器沈0中的一个)的监测树中。在一特定实施例中,活动业务角度监测器包括图3的业务角度监测器340。方法800还包括在818拦截涉及技术专用的拦截器上的特定执行路径的消息。例如,在图2中,WCF拦截器203可以拦截指出沿着分布式应用程序201的特定执行路径的活动的消息。方法800还包括在820生成包括涉及特定执行路径的活动信息的工作项。例如,图2的WCF拦截器203可以生成包括涉及特定执行路径的活动信息的工作项。方法800还包括在822将活动信息存储在活动队列中, 并在拟4通过存储服务将活动信息从活动队列传输到存储位置。例如,在图2中,活动管理器270可以将活动信息存储在活动队列观0中,并可以随后通过存储服务290将活动信息从活动队列280传输到存储位置。可以理解,图8的方法800可以被用来监测可能在分布式应用程序中发生的诸如异常和错误之类的事件。还可以理解,图8的方法800也可以被用来沿着分布式应用程序的特定执行路径跟踪活动。例如,图8的方法800可以被IT管理员用来跟踪沿着分布式应用程序的执行路径错误地或低效执行的活动。图9是监测分布式应用程序的方法900的另一特定实施例的流程图。在一说明性实施例中,方法900可以由图1的系统100或图2的系统200来执行。方法900包括在902 标识分布式应用程序的多个组件。例如,在图2中,技术不可知的拦截器管理器230可以标识.NET组件205、WCF组件206、Java组件207或其任何组合。方法900还包括在904标识与多个组件中的特定组件相关联的特定技术。例如,在图2中,技术不可知的拦截器管理器 230可以标识WCF组件206与WCF技术相关联。方法900还包括在906基于所标识的特定技术将技术专用的拦截器附加到特定组件。例如,在图2中,技术不可知的拦截器管理器230可以将WCF拦截器203附加到WCF组件206。方法900还包括在908分配操作调用监测器以跟踪对特定组件上的特定函数的调用。例如,可以分配操作调用监测器以跟踪对WCF组件206的特定函数的调用,其中,操作调用监测器位于WCF组件206的端点监测器的监测树上(例如,端点监测器沈0中的一个)。 在一特定实施例中,所分配的操作调用监测器可包括图3的操作调用目标端点监测器370。方法900包括在910拦截由涉及特定函数的特定组件所发送的和接收到的消息。 例如,在图2中,WCF拦截器203可以拦截由WCF组件206所发送的和接收到的消息,其中, 拦截的消息与特定函数相关联。方法900还包括在912标识特定函数的源操作和特定函数的目标操作之间的依赖关系。例如,在图2中,WCF拦截器203可以标识特定函数的源操作和特定函数的目标操作之间的依赖关系。在一特定实施例中,源操作和目标操作位于分布式应用程序201的不同的组件上(例如,源操作位于WCF组件206上,而目标操作位于.NET 组件205上)。方法900还包括在916将依赖关系缓存在依赖关系缓存中。例如,在图2中,依赖关系管理器272可以将依赖关系缓存在依赖关系缓存观2中。方法900还包括在918确定依赖关系先前是否已经被存储。例如,图2的依赖关系管理器272可以确定依赖关系先前是否已经被存储。当依赖关系先前没有被存储时,方法900包括在920通过存储服务将依赖关系传输到存储位置。例如,在图2中,依赖关系管理器272可以通过存储服务290将依赖关系从依赖关系缓存282传输到存储位置。当依赖关系先前已经被存储时,方法900包括在922 不存储依赖关系。例如,在图2中,依赖关系管理器272可以从依赖关系缓存观2中删除依赖关系而不存储依赖关系。可以理解,可以使用图9的方法900来发现分布式应用程序中的各种源操作和目标操作之间的依赖关系,包括组件之间的依赖关系。还可以理解,图9的方法900可以通过只存储先前没有被存储的已发现的依赖关系来降低这样的依赖关系发现的性能影响。图10是在技术不可知的拦截器管理器上有选择地调度工作项的方法1000的特定实施例的流程图。在一说明性实施例中,方法1000可以由图1的技术不可知的拦截器管理器130或图2的技术不可知的拦截器管理器230来执行。方法100包括在1002在技术不可知的拦截器管理器处从被附加到分布式应用程序的第一组件的第一技术专用的拦截器接收第一工作项。第一技术专用的拦截器是第一技术专用的,并且,第一组件与第一技术相关联。例如,在图1中,技术不可知的拦截器管理器130可以从被附加到分布式应用程序102 中的WCF组件110的WCF拦截器112接收第一工作项。方法1000还包括在1004在技术不可知的拦截器管理器处从被附加到分布式应用程序的第二组件的第二技术专用的拦截器接收第二工作项。第二技术拦截器是第二技术所专用的,第二组件与第二技术相关联,而第二技术不同于第一技术。例如,在图1中,技术不可知的拦截器管理器130可以从被附加到分布式应用程序102中的.NET组件120的.NET 拦截器122接收第二工作项。方法1000还包括在1006确定是否要调度第一工作项和第二工作项以便执行。基于第一工作项对分布式应用程序的第一影响,并基于第二工作项对分布式应用程序的预测的影响,来作出此判断。例如,在图1中,WCF工作项调度逻辑144可以基于第一工作项对分布式应用程序102的第一影响来确定是否要调度第一工作项,而.NET工作项调度逻辑IM可以基于第二工作项对分布式应用程序102的第二影响来确定是否要调度第二工作项。可以理解,图10的方法1000可以被技术不可知的拦截器管理器(例如,图1的技术不可知的拦截器管理器130或图2的技术不可知的拦截器管理器230)用来基于所预测的工作项的影响,有选择地调度工作项以便执行。如此,可以拦截,图10的方法1000可以被技术不可知的拦截器管理器用来避免干扰实时、几乎实时、或关键分布式应用程序的常规执行。技术不可知的拦截器管理器可以不调度对实时、几乎实时、或关键分布式应用程序具有预测的高度影响的工作项。图11是示出了分布式计算环境1100的特定实施例的一般图。分布式计算环境 1100可包括分布式应用程序1110,应用程序1110包括一个或多个被监测的应用程序组件, 如被监测的Web客户端1111、被监测的web服务器1112、被监测的应用程序服务器1113, 以及被监测的数据库服务器1114。分布式计算环境1100也可以包括可通信地耦合到分布式应用程序1110的组件的管理服务器1120,以及根管理服务器1130、操作数据库服务器 1140、以及数据仓库服务器1150。在一特定实施例中,分布式计算环境1100还包括被配置成为分布式应用程序1110生成监测报告的报告服务器1160。在一说明性实施例中分布式应用程序1110可包括图1的分布式应用程序102或图2的分布式应用程序201。管理服务器1120包括技术不可知的拦截器管理器,如图1的技术不可知的拦截器管理器130或图2的技术不可知的拦截器管理器230。管理服务器1120也可以与根管理服务器1130进行通信。管理服务器1120可以存储并从操作数据库服务器1140和数据仓库服务器1150检索诸如依赖关系数据和活动数据之类的信息。在一特定实施例中,管理服务器1120被配置成通过报告服务器1160来生成包括发现数据和依赖关系数据的监测报告。在操作中,被监测的Web客户端1111、被监测的web服务器1112、被监测的应用程序服务器1113,以及被监测的数据库服务器1114可以由一个或多个附加的技术专用的拦截器进行监测。技术特定拦截器也可以生成工作项,并将工作项发送到管理服务器1120上的技术不可知的拦截器管理器。然后,管理服务器1120上的技术不可知的拦截器管理器可以基于所预测的对分布式应用程序1110的影响,或基于所预测的对特定分布式应用程序组件(例如,组件1111-1114中的一个)的影响,有选择地调度接收到的工作项以便执行。可以理解,管理服务器1120可以监测不同类型的分布式应用程序组件(例如,Web 客户端、web服务器、应用程序服务器以及数据库服务器)上的函数调用、活动以及事件。图12示出了根据本公开的计算环境1200的框图,包括可以支持计算机实现的方法、计算机程序产品,以及系统组件的实施例的计算设备1210。计算设备1210通常包括至少一个处理器1220和系统存储器1230。取决于计算设备的确切配置和类型,系统存储器1230可以是易失性的(如随机存取存储器或“RAM”)、非易失性的(如只读存储器或“ROM”、闪存,以及甚至在不提供电源的情况下也能保留存储的数据的类似的存储器设备),或两个的某种组合。系统存储器1230通常包括操作系统1232、 一个或多个应用程序平台1234、一个或多个应用程序1236,并可包括程序数据1238。例如, 系统存储器1230可包括分布式应用程序的一个或多个组件,如图1的WCF组件110、图2的 WCF组件206、图1的.NET组件120、图2的.NET组件205,或图2的Java组件207。当计算设备1210包括组件时,计算设备1210也可以包括被附加到组件的一个或多个技术专用的拦截器。例如,计算设备1210可包括图1的WCF拦截器112、图2的WCF拦截器203、图1的.NET拦截器122、图2的.NET拦截器202,图2的Java拦截器204。作为另一个示例, 系统存储器1230可包括图1的技术不可知的拦截器管理器130或图2的技术不可知的拦截器管理器230。在一特定实施例中,分布式应用程序(例如,图1的分布式应用程序102或图2的分布式应用程序201)可包括多个计算设备(例如,计算设备1210),而每一这样的计算设备都可包括分布式应用程序的一个或多个组件。计算设备1210还可具有附加特征或功能。例如,计算设备1210还可包括可移动和/或不可移动附加数据存储设备,诸如磁盘、光盘、磁带和标准大小的或微型闪存卡。在图12中通过可移动存储1240和不可移动存储1250示出了这样的附加存储。计算机存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序组件或其他数据的信息的任何方法和/或技术实现的易失性和/或非易失性存储器、可移动和/或不可移动介质。系统存储器1230、可移动存储1240和不可移动存储1250都是计算机存储介质的示例。计算机存储介质包括,但不限于,RAM、R0M、电可擦除可编程只读存储器(EEPROM)、闪存或其它存储器技术、紧致盘(CD)、数字多功能盘(DVD)或其它光存储、磁带盒、磁带、磁盘存储或其它磁性存储设备、或可用于存储所希望的信息且可以由计算设备1210访问的任何其它介质。任何这样的计算机存储介质都可以是计算设备1210的一部分。计算设备1210也可包括输入设备1沈0,如键盘、鼠标、笔、语音输入设备、触摸输入设备等等。也可包括输出设备1270, 如显示器、扬声器、打印机等等。计算设备1210还包含一个或多个通信连接1观0,它们允许计算设备1210通过有线或无线网络与诸如一个或多个客户端计算系统或其他服务器之类的其他计算设备1290 进行通信。例如,一个或多个通信连接1280可包括图5的网络接口 512或讨2。一个或多个通信连接1280是通信介质的一个示例。作为示例而非限制,通信介质可包括有线介质, 如有线网络或直接线连接,以及诸如声学、射频(RF)、红外线及其他无线介质之类的无线介质。然而,可以理解,并非所有图12所示或以其他方式在先前的附图中描述的组件或设备都必须支持此处所描述的实施例。这里所描述的实施例的说明旨在提供对各实施例的结构的一般理解。说明不旨在作为利用这里所描述的结构或方法的装置和系统的所有元件和特征的完整描述。许多其他实施例对本领域的技术人员在审阅本发明后是显而易见的。也可以利用其他实施例,并从本发明派生出其他实施例,以便可以在不偏离本发明的范围的情况下作出结构和逻辑上的替换和改变。相应地,本发明和附图应被视为说明性的,而不是限制性的。本领域技术人员将进一步理解,结合这里所说明的实施例所描述的各种说明性逻辑块、配置、模块、电路、以及算法步骤,可以作为电子硬件、计算机软件或两者的组合来实现。为清楚地示出硬件或软件的此互换性,上文已经一般地在功能方面描述了各种说明性组件、块、配置、模块、电路,以及步骤。此类功能集是被实现为硬件还是软件取决于具体应用和强加于整体系统的设计约束。技术人员可针对每种特定应用以不同方式来实现所描述的功能集,但此类设计决策不应被解释为致使脱离本公开的范围。结合此处所公开的各实施例所描述的方法的各个步骤可直接用硬件、由处理器执行的软件模块、或两者的组合来实现。软件模块可驻留在诸如随机存取存储器(RAM)、闪存、 只读存储器(ROM)、寄存器、硬盘、可移动盘、⑶-ROM、或本领域内已知的任何其他形式的存储介质等计算机可读介质中。示例性存储介质耦合到处理器以使得该处理器能从/向该存储介质读取/写入信息。在替换方案中,存储介质可以集成到处理器中,或者处理器和存储介质可以作为分立的元件驻留在计算机系统中。虽然这里显示和描述了具体的实施例,但是,应该了解,被设计为实现相同或类似的目的的任何随后的安排都可以代替所示出的具体实施例。本说明书计划涵盖各种实施例的任何随后的修改或变化。提交本发明的摘要的同时要明白,将不用它来解释或限制权利要求的范围或含义。此外,在前面的具体实施方式
中,出于将本公开连成一个整体的目的,各种特征可以组合到一起,或在一个实施例中进行描述。本发明不应被解释为反映带权利要求的实施例需要比每一个权利要求中明确地记载的特征更多的特点的意图。相反,如下面的权利要求所反映的,本发明的主题可以涉及少于所公开的实施例中的任一个的所有特征。提供上文对所公开的实施例的描述,以使本领域技术人员能作出或使用所公开的实施例。对这些实施例的各种修改对于本领域技术人员将是显而易见的,并且本文中定义的普适原理可被应用于其他实施例而不会脱离本公开的范围。因此,本发明并不旨在限于此处所示出的各实施例,而是按照与所附权利要求书所定义的原理和新颖特征相一致的尽可能最宽的范围。
2权利要求
1.一种监测方法,包括标识(502)分布式应用程序(102)的多个组件(110,120);标识(504)与所述多个组件(110,120)中的特定组件(110)相关联的特定技术;基于所述所标识的特定技术,将技术专用的拦截器(112)附加(506)到所述特定组件 (110),并使用所述附加的技术专用的拦截器(112),拦截由所述特定组件(110)所发送的或接收到的消息;基于所拦截的消息,生成(508)至少一个潜在的工作项;以及基于所预测的所述至少一个潜在的工作项对所述分布式应用程序(10 的性能的影响,来确定(510)是否要调度所述至少一个潜在工作项以便执行。
2.如权利要求1所述的方法,其特征在于,当所预测的所述至少一个潜在工作项的影响低于可以接受的性能影响阈值时,调度所述至少一个潜在工作项以便执行,并且,其中, 当所预测的所述至少一个潜在工作项的影响超出所述可以接受的性能影响阈值时,不调度所述至少一个潜在工作项来执行。
3.如权利要求1所述的方法,其特征在于,所预测的所述至少一个潜在工作项的影响指示对所述分布式应用程序上的处理器使用率、所述分布式应用程序上的消息延迟、所述分布式应用程序上的执行队列长度或其任何组合的影响。
4.如权利要求1所述的方法,其特征在于,当所述至少一个潜在工作项在工作项有效期内未被调度时所述至少一个潜在工作项过期。
5.如权利要求1所述的方法,其特征在于,还包括执行所述分布式应用程序上的所述至少一个潜在工作项,其中,所述至少一个潜在工作项包括存储涉及所述分布式应用程序的已发现的依赖关系信息的指令、存储涉及所述分布式应用程序的已监测的活动信息的指令、报告涉及所述分布式应用程序的性能计数器信息的指令或其任何组合。
6.如权利要求5所述的方法,其特征在于,还包括基于所述拦截的消息,分配操作调用监测器以跟踪对特定组件上的特定函数的调用。
7.如权利要求6所述的方法,其特征在于,所述特定函数具有源操作和目标操作,其中,所述至少一个潜在工作项指示所述源操作和所述目标操作之间的依赖关系,并且,其中,执行所述至少一个潜在工作项包括将所述依赖关系存储在依赖关系缓存中。
8.如权利要求7所述的方法,其特征在于,还包括响应于确定所述依赖关系先前没有被存储,通过存储服务将所述依赖关系从所述依赖关系缓存传输到存储位置。
9.如权利要求5所述的方法,其特征在于,还包括分配活动监测器以跟踪所述特定组件上的特定执行路径的活动,其中,所述至少一个潜在工作项包括涉及所述特定执行路径的活动信息,并且,其中,执行所述至少一个潜在的工作项包括将所述活动信息存储在活动队列中。
10.如权利要求9所述的方法,其特征在于,还包括通过存储服务将所述活动信息从所述活动队列传输到存储位置。
11.如权利要求5所述的方法,其特征在于,还包括基于所述拦截的消息,分配计数器监测器以跟踪特定事件的发生,其中,所述至少一个潜在工作项指示所述特定事件的至少一次发生,并且,其中,执行所述至少一个潜在工作项包括将向所述计数器监测器的一个或多个客户端报告所述特定事件的至少一次发生。
12.如权利要求1所述的方法,其特征在于,还包括计算涉及所述分布式应用程序的至少一个度量,其中,所述至少一个度量包括生成的异常的数量、报告的错误的数量、或其任何组合; 检测所述分布式应用程序的故障情况;以及基于所述至少一个度量,将所述特定组件标识为所述故障情况的潜在原因。
13.一种监测系统,包括包括与第一技术相关联的第一技术专用的拦截器(20 和与不同于所述第一技术的第二技术相关联的第二技术专用的拦截器O03)的多个技术专用的拦截器;以及,技术不可知的拦截器管理器O30);其中,所述第一技术专用的拦截器(20 被配置成跟踪与所述第一技术相关联的第一分布式应用程序组件O05)的操作,包括拦截由所述第一分布式应用程序组件(20 所发送的和接收到的消息;基于所跟踪的所述第一分布式应用程序组件O05)的操作,生成工作项;以及基于所跟踪的所述第一分布式应用程序组件O05)的操作,将所述工作项发送到所述技术不可知的拦截器管理器O30);其中,所述第二技术专用的拦截器(20 被配置成跟踪与所述第二技术相关联的第二分布式应用程序组件O06)的操作,包括拦截由所述第二分布式应用程序组件(206)所发送的和接收到的消息;基于所跟踪的所述第二分布式应用程序组件O06)的操作,生成工作项;以及基于所跟踪的所述第二分布式应用程序组件O06)的操作,将所述工作项发送到所述技术不可知的拦截器管理器O30);以及其中,所述技术不可知的拦截器管理器(230)包括多个工作项管理器040),包括与所述第一技术专用的拦截器(20 相关联的第一工作项管理器,以及与所述第二技术专用的拦截器(20 相关联的第二工作项管理器;其中,每一工作项管理器(MO)都与特定技术专用的拦截器相关联,并被配置成 接收来自所述特定技术专用的拦截器的工作项; 将所述接收到的工作项排队在工作项队列(M2)中;将由所述特定技术专用的拦截器跟踪的特定工作项对分布式应用程序组件的性能的影响与可以接受的性能影响阈值进行比较;当所述影响小于所述可以接受的性能影响阈值时,调度所述特定工作项以便执行;以及当所述影响大于所述可以接受的性能影响阈值时,丢弃所述特定工作项,而不调度所述特定工作项来执行。
14.如权利要求13所述的系统,其特征在于,每一技术专用的拦截器还被配置成向其相关联的工作项管理器请求空的工作项,通过将信息存储在所述空工作项中生成工作项, 并将所生成的工作项发送到所述技术不可知的拦截器管理器。
15.如权利要求13所述的系统,其特征在于,所述工作项管理器中的每一个还被配置成限制同时执行的工作项的数量;限制所述工作项队列的大小; 当所述工作项队列满时拒绝接收到的工作项;调度特定工作项以便在线程池的前台线程中或在所述线程池的后台线程中执行;以及限制所述线程池的同时执行的线程的数量。
全文摘要
公开了用于监测分布式应用程序的方法、系统,以及计算机可读介质。一种特定方法标识分布式应用程序的多个组件。该方法还标识与特定组件相关联的特定技术并基于所标识的特定技术来将技术专用的拦截器附加到特定组件。该方法包括使用技术专用的拦截器来拦截由特定组件所发送的或接收到的消息。基于所拦截的消息,生成至少一个潜在的工作项。该方法包括基于所预测的至少一个潜在的工作项对分布式应用程序的性能的影响,来确定是否要调度该至少一个潜在工作项以便执行。
文档编号G06F17/00GK102369523SQ201080014022
公开日2012年3月7日 申请日期2010年3月19日 优先权日2009年3月24日
发明者A·A·科埃略, A·J·萨格维, A·K·加内桑, D·M·玛哈简, I·G·莱特卡, R·苏达卡尔, V·S·K·库拉帕蒂 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1