背景技术
1.背景和相关技术
计算机系统和相关技术影响社会的许多方面。的确,计算机系统处理信息的能力已转变了人们生活和工作的方式。计算机系统现在通常执行在计算机系统出现以前手动执行的许多任务(例如,文字处理、日程安排和会计等)。最近,计算机系统彼此耦合并耦合到其他电子设备以形成计算机系统和其他电子设备可以在其上传输电子数据的有线和无线计算机网络。由此,许多计算任务的执行分布在多个不同的计算机系统和/或多个不同的计算环境上(常常被称为“分布式系统”)。
分布式系统中的每一个机器可被配置成为计算任务执行一个或多个本地计算,然后将计算任务转发至其他机器系统上以供将来计算。由此,计算任务在完成之前可在多个不同的计算机系统之间传递。例如,将服务(应用)递送给顾客可包括若干子系统,诸如例如Web服务、工作、数据库等。基于这些子系统上的负载,各子系统可在跨多个数据中心分布的大量(例如,成百个)机器上运行。此外,可跨多个机器对每一子系统进行负载平衡以使得任何一个机器都不过载。
每一子系统可被配置成生成与其执行的计算有关的日志文件和跟踪信息。然而,每一子系统可生成不同的日志文件和跟踪信息并使用不同的数据格式。有时,一个或多个子系统可能出错,这得到计算任务不及最优的结果。在许多情况下,差错的起因可基于一个或多个机器处的时间戳从日志记录和跟踪信息中导出。然而,即使利用时间戳,当计算任务流过多个不同的分布式且负载平衡的机器时,可能仍然难以获得计算任务的日志记录和跟踪信息。
即使可从不同的机器获得日志记录和跟踪信息,但不同的机器可能缺乏相关数据或不同的数据格式,这使得难以将来自不同机器的本地计算与指定的计算任务进行匹配。例如,如果不同的机器以不同的(或即使只是不同地格式化的)标识符来存储信息,可能没有容易的方法将来自不同机器的跟踪和日志记录信息进行相关。一个典型的通常用于对来自不同机器的日志记录和跟踪信息进行相关的机制包括跨日志手动地发放全文搜索。
例如,图4描绘了已执行作为更大计算任务的一部分的计算的四个不同子系统处日志跟踪。在子系统401处,分量数据411是可用于标识与更大的计算任务的关联的数据的一部分。在子系统402处,分量数据411仍然存在。此外,PUID低412和PUID高413已经被赋值。因此,PUID低412和PUID高413也可用于标识与更大的计算任务的关联。在子系统402处,分量数据416不再匹配分量数据411。PUID低412和PUID高413仍然存在。此外,用其他数据419对其他标识数据进行了编码。因此,其他数据419也可用于标识与更大的计算任务的关联。在子系统404处,分量数据421未被赋值并因此不再匹配分量数据411或分量数据416。PUID低422和PUID高423被赋值0并因此不再分别与PUID低412和PUID高413匹配。其他数据419仍然存在。
因此,确定来自后续子系统的日志跟踪与同一特定计算任务相对应是可能的。例如,通过参考分量数据411确定来自子系统401和子系统402的日志跟踪与同一特定任务相对应是可能的。然而,确定来自较大互连子系统组的日志跟踪与同一特定计算任务相对应是困难的且劳动密集型的。例如,将来自子系统401的日志跟踪与来自子系统404的日志跟踪匹配将是困难的,因为它们之间没有匹配字段。为了这么做将要求按来自不同子系统的日志跟踪的顺序链来匹配日志跟踪之间的数据,诸如,例如,从子系统404到403,接着子系统403到402,然后子系统402到401。日志跟踪之间的每一匹配通常还需要搜索准则的手动输入,该手动输入易于出现人为差错。
另外,随着发放的计算任务以及分布式负载平衡机器的数量的增加,由于生成的日志记录和跟踪信息的数量而使得难度被极大地复合。例如,在某些环境中,分布式系统每分钟处理成千个计算任务,其中的每一个遍历跨过在(例如,地理上位于)各个不同数据中心中的成百个负载平衡的机器的某一路径。在这些环境中为各个计算任务将来自不同机器的日志记录和跟踪信息进行相关是(如果甚至是可能的)劳动密集型的且易于出错的。由此,诊断这些环境中的差错是尤其困难的。
许多分布式系统总是具有在操作期间发生但不损害用户体验的特定量的差错。为收集足够的信息,这些分布式系统通常总是使用信息日志记录或甚至是跟踪水平日志记录。然而,使日志记录总是活动导致大量(且通常是不必要的)的数据,这使得日志文件膨胀。
具体实施方式
本发明涉及用于跟踪在子系统之间流动的请求的方法、系统和计算机程序产品。第一子系统接收要执行计算任务的用户请求。第一子系统是被包括在分布式系统中在多个互连机器处的一个子系统。第一子系统为计算任务生成事物标识符。第一子系统将事物标识符分配给计算任务。事物标识符被配置成随着计算任务的通信在分布式系统内的不同子系统之间流动时沿着计算任务移动。
第一子系统为计算任务执行一个或多个计算。第一子系统为一个或多个计算生成日志信息。第一子系统将事物标识符连同所生成的日志信息一起存储在第一日志中。第一子系统与第二子系统通信以发起在第二子系统处对计算任务的进一步计算的执行。该通信向第二子系统通知事物标识符。由此,使第二子系统知道该事物标识符要与为计算任务生成的任何日志数据相关联。
第二子系统为计算任务执行进一步的计算。第二子系统为进一步的计算生成进一步的日志信息。第二子系统将事物标识符连同所生成的进一步的日志信息一起存储在第二日志中。在适当时,第二子系统可将事物标识符传递给第三子系统。
中央储存库可被配置成聚集来自多个互连机器的日志信息。对于分布式系统中的每一子系统,中央储存库为该子系统访问来自子系统日志的日志信息。每一日志条目包含标识与日志条目相对应的计算任务的事物标识符。中央储存库可通过将包含相同事物标识符的日志信息分组在一起来在每个计算任务的基础上组织数据。
本发明的各实施例可包括或利用包括诸如例如,一个或多个处理器和系统存储器之类的计算机硬件的专用或通用计算机,如以下更详细讨论的。本发明范围内的各实施例还包括用于承载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这些计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。承载计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种完全不同的计算机可读介质:计算机存储介质和传输介质。
计算机存储介质包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。
“网络”被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链接。当信息通过网络或另一个通信连接(硬连线、无线、或者硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用于承载计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的网络和/或数据链接。上述的组合也应被包括在计算机可读介质的范围内。
此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输介质自动传输到计算机存储介质(或者反之亦然)。例如,通过网络或数据链接接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内的RAM中,然后最终被传输到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质。因而,应当理解,计算机存储介质可被包括在同样(或甚至主要)利用传输介质的计算机系统组件中。
计算机可执行指令例如包括,当在处理器处执行时使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言之类的中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。
本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可在其中通过网络链接(或者通过硬连线数据链接、无线数据链接,或者通过硬连线和无线数据链接的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实践。在分布式系统环境中,程序模块可位于本地和远程存储器存储设备中。
图1示出便于跟踪在子系统之间流动的请求的示例计算机体系结构100。参考图1,计算机体系结构100包括分布式系统101和用户103。分布式系统101可包括多个互连机器。用户可见子系统102、内部子系统103、内部子系统104、内部子系统106和中央储存库109可在互连机器中的一个或多个上运行。所描绘的组件中的每一个可通过系统总线和/或诸如例如局域网(“LAN”)、广域网(“WAN”)以及甚至因特网等网络(或作为网络的一部分)彼此连接。因此,所描绘的计算机组件中的每一个以及任何其他连接的计算机系统及其组件都可以创建消息相关数据并通过系统总线和/或网络交换消息相关数据(例如,网际协议(“IP”)数据报和利用IP数据报的其他更高层协议,诸如传输控制协议(“TCP”)、超文本传输协议(“HTTP”)、简单邮件传输协议(“SMTP”)等)。
一般地,用户可见子系统102展示在分布式系统101中实现的指定计算任务的功能。指定计算任务的执行可包括在用户可见子系统102、内部子系统103、内部子系统104和内部子系统106中的每一个处执行一个或多个计算。子系统102、103、104和106中的每一个实际上可以是任何类型的服务,诸如例如Web服务。
在每一子系统执行计算时,子系统可生成指示与子部件的功能有关的潜在问题的日志数据。在某些实施例中,每一子系统直接将日志数据记录在中央储存库109中。在其他实施例中,每一子系统将数据记录在各个子系统日志中。在这些其他实施例中,来自各个子系统日志的日志数据稍后可被传输至中央储存库109或以某种其他方式被聚集。所聚集的日志数据(无论是在中央储存库109中还是使用其他机制)可用于为分布式系统101提供日志记录信息的统一视图。
每一子系统可允许不同的日志水平来定义日志文件条目:差错、警告、信息、跟踪的粒度,例如,当差错最高(最不详细)而跟踪是日志记录的最低水平(最详细)。
图2示出用于跟踪在子系统之间流动的请求的示例方法200的流程图。方法200将参考计算机体系结构100的组件和数据来描述。
用户133可制定任务请求111(例如,在客户机计算机系统处)并将任务请求111提交给用户可见子系统102。如所描绘的,任务请求111包括用户数据112。任务请求111可以是要执行在分布式系统101中实现的指定计算任务的请求。提交任务请求111可包括向用户可见系统102发出Web服务调用。
方法200包括第一子系统接收要执行计算任务的用户请求的动作,该第一子系统被包括在多个互连机器中的一个中(动作201)。例如,用户可见子系统102可从用户133接收任务请求111。用户可见子系统102可被包括在分布式系统101中的互连机器中的一个或多个上。
方法200包括第一子系统为计算任务生成事物标识符的动作(动作202)。例如,响应于接收到任务请求111,用户可见子系统102可生成事物ID 113。事物ID 113可以是与对用户可见子系统102的Web服务调用相关联的唯一上下文ID。
用户可见子系统102还可生成定义用于为指定计算任务生成日志数据的日志记录(差错、警告等)水平的日志记录水平114。
方法200包括第一子系统将事物标识符分配给计算任务的动作,该事物标识符被配置成在计算任务的通信在分布式系统中的不同子系统之间流动时沿着计算任务移动(动作203)。例如,用户可见子系统102可将事物ID 113连同日志记录水平114一起分配给在分布式系统101中实现的指定计算任务。事物标识符113(以及日志记录水平114)被配置成在通信在分布式系统101中的不同子系统之间流动时沿着该通信移动。
方法200包括第一子系统为计算任务执行一个或多个计算的动作(动作204)。例如,用户可见子系统102可为在分布式系统101中实现的指定计算任务执行一个或多个计算。作为该一个或多个计算的一部分,用户可见子系统102可将用户数据112处理成数据112A。
方法200包括第一子系统为一个或多个计算生成日志信息的动作(动作205)。例如,用户可见子系统102可为一个或多个所执行的计算生成日志数据121。方法200包括第一子系统将事物标识符连同所生成的日志信息一起存储在第一日志中的动作(动作206)。例如,用户可见子系统102可将事物ID113连同日志数据121一起存储在子系统专用日志中或直接存储在中央储存库109中。
方法200包括第一子系统与第二子系统通信以发起在第二子系统处对计算任务的进一步计算的执行的动作,该通信向第二子系统通知该事物标识符要与为计算任务生成的任何日志数据相关联(动作207)。例如,用户可见子系统102可将数据112A、事物ID 113和日志记录水平114发送给内部子系统103来发起对在分布式系统101中实现的指定计算任务的进一步计算的执行。数据112A、事物ID 113和日志记录水平114共同地向内部子系统103通知事物ID113要与为指定计算任务生成的任何日志数据相关联。内部子系统103可被包括在分布式系统101中的互连机器中的一个或多个上。
在某些实施例中,事物ID 113和日志记录水平114不作为本地调用的方法参数被传递。使用其他机制来避免延伸现有方法实现。对于本地调用,事物ID 113和日志记录水平114可使用用HttpContext的线程本地存储(“TLS”)在子系统之间传递。对于网络调用,诸如例如,当子系统向另一子系统发出Web服务调用时,调用子系统可将事物ID和所请求的日志记录水平连同其他调用参数一起传递。
接收事物ID 113和日志记录水平114的其他子系统有义务将事物ID添加到日志/跟踪条目并遵守所请求的日志记录水平。
方法200包括从第一子系统接收要发起对计算任务的进一步计算的执行的通信,该通信指示第二子系统要将事物标识符与为计算任务生成的任何日志数据相关联(动作207)。例如,内部子系统103可从用户可见子系统102接收数据112A、事物ID 113和日志记录水平114。数据112A、事物ID 113和日志记录水平114共同地指示内部子系统103要将事物ID 113与为在分布式系统101中实现的指定计算任务生成的任何日志数据相关联。
方法200包括为计算任务执行进一步的计算(动作208)。例如,内部子系统103可为在分布式系统101中实现的指定计算任务执行一个或多个计算。作为该一个或多个计算的一部分,内部子系统103可将数据112A处理成数据112B和112C。
方法200包括为进一步计算生成进一步的日志信息(动作209)。例如,内部子系统103可为一个或多个所执行的计算生成日志数据117。方法200包括将事物标识符连同所生成的进一步的日志信息一起存储在第二日志中(动作210)。例如,内部子系统103可将事物ID 113连同日志数据117一起存储在子系统专用日志中或直接存储在中央储存库109中。
方法200包括与第三子系统通信以发起在第三子系统处对计算任务的一个或多个附加计算的执行,该通信向第三子系统通知该事物标识符要与为计算任务生成的任何日志数据相关联(动作211)。例如,内部子系统104可将数据112B、事物ID 113和日志记录水平114发送给内部子系统103来发起对在分布式系统101中实现的指定计算任务的进一步计算的执行。数据112B、事物ID 113和日志记录水平114共同地向内部子系统104通知事物ID 113要与为指定计算任务生成的任何日志数据相关联。内部子系统104可被包括在分布式系统101中的互连机器中的一个或多个上。
另选地或组合地,内部子系统104可将数据112C、事物ID 113和日志记录水平114发送给内部子系统106来发起对在分布式系统101中实现的指定计算任务的进一步计算的执行。数据112C、事物ID 113和日志记录水平114共同地向内部子系统106通知事物ID 113要与为指定计算任务生成的任何日志数据相关联。内部子系统106可被包括在分布式系统101中的互连机器中的一个或多个上。
然后,内部子系统104可为在分布式系统101中实现的指定计算任务执行一个或多个计算。作为该一个或多个计算的一部分,内部子系统104可处理数据112B。内部子系统104可为一个或多个所执行的计算生成日志数据118。内部子系统104可将事物ID 113连同日志数据118一起存储在子系统专用日志中或直接存储在中央储存库109中。
内部子系统106也可为在分布式系统101中实现的指定计算任务执行一个或多个计算。作为该一个或多个计算的一部分,内部子系统106可处理数据112C。内部子系统106可为一个或多个所执行的计算生成日志数据119。内部子系统106可将事物ID 113连同日志数据119一起存储在子系统专用日志中或直接存储在中央储存库109中。
有时,来自子系统日志(或其他数据中心位置)的数据可被拉入中央储存库109。因此,对于分布式系统101中的每一子系统,中央储存库109可为该子系统访问来自子系统日志的日志信息。每一日志条目可包含标识与日志条目相对应的计算任务的事物标识符。中央储存库可通过将包含相同事物标识符的日志信息分组在一起来在每个计算任务的基础上组织数据。例如,日志数据117、118、119和121可被分组在一起,因为日志数据117、118、119和121包含事物ID 113。
因此,中央储存库109通过匹配作为所有日志文件中的每一条目的一部分的事物ID来便于对日志数据的事务性视图。中央储存库109包括各种不同水平的日志数据聚集。例如,中央储存库109包括在(例如,对用户可见子系统102的)每一调用的基础上的更高水平的日志数据聚集。中央储存库109还准许深入每一调用的细节。中央储存库109可将每一调用信息聚集成分布式系统101的健康视图。该健康视图可包括,例如,统计视图,诸如成功调用对不成功调用的比率,并分解成在交互或每一子系统基础上的不同差错情况。
图3是各自为计算任务执行一个或多个计算的多个不同子系统的日志数据(包括事物标识符)的示例。如所描绘的,子系统301、302、303和304中的每一个的日志跟踪包括事物ID 311。事物ID 311可以是在指定日志数据条目格式内赋予事物ID字段的值。基于事物ID 311,来自子系统301、302、303和304的日志跟踪可更高效地被分组在一起。
此外,包括事物ID 311还为在日志数据条目中的其他字段中使用的不同值和/或不同格式作出补偿。例如,事物ID 311允许来自子系统301和303的日志跟踪进行匹配,即使分量数据312和317不同。此外,事物ID 311允许来自子系统302和304的日志跟踪进行匹配,即使PUID低314和PUID高316分别与PUID低322和PUID高323不同。另外,事物ID 311允许来自子系统301和304的日志跟踪直接进行匹配,即使它们不具有共同的日志数据。
各实施例还准许至少部分地基于在过去调用期间接收到的差错来有选择地调整日志记录水平。例如,再次参考图1,可能的情况是:在从内部子系统103对内部子系统104的先前调用上,内部子系统103从内部子系统104接收到差错。内部子系统103可存储先前差错的指示。当内部子系统103再次与内部子系统104交互时,内部子系统103可通过调整日志记录水平114的值来请求跟踪水平日志记录(并因此生成更多的日志数据)。
由此,本发明的各实施例便于遵循来自入口点的用户交互/事物通过被调用的任何子系统直到实现该交互/事物。关于事物的所生成的信息(例如,日志数据)可跨所有子系统来聚集。在发生故障时,可自动地为后续调用提升日志和跟踪水平。
本发明可被具体化为其他具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。因此,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变被权利要求书的范围所涵盖。