本文是一篇软件工程论文,笔者针对调用链路的监控与分析设计一个集设计调用链路、埋点、采集、监控与分析一体的微服务调用链路监控系统,并为链路异常分析提供了清晰的可视化界面和准确的指标,从而保证链路分析的可靠性。
第一章绪论
1.1研究背景
微服务架构正逐步成为当前的一种主流软件体系结构,其具有易扩展、易维护、高可靠、高可用等特点[1]。相比传统单体式软件架构[2],在软件的开发、部署、维护和运行环境容器化等方面它也具有较大优势。微服务架构的主要理念是把单体服务按照逻辑以及其特性拆分为各种可以被单独使用、开发、运维的软件业务单元[3],以及在符合业务边界的前提下,各个微服务可以通过彼此相互配合和协同来体现一个软件系统的价值功能。但是,由于微服务架构的系统复杂性愈来愈高,系统结构变更也日益频繁,应用中隐含的服务调用和依赖关系也越来越来复杂。当应用涉及的某个服务出现异常,可能导致众多其他服务都不能正常运转,从而给微服务应用的可靠性保障[4][5][6]、性能优化和运维管理等带来诸多新的问题。为此,迫切需要对微服务应用使用过程中涉及的微服务调用信息进行有效的收集、记录、管理和分析。
服务链路追踪系统是为应对上述挑战而提出的一类微服务应用支撑系统,它可以用来记录微服务应用的所有请求信息及请求背后涉及的一系列微服务调用信息[7][8][9],包括涉及的服务调用,对应的机器,每个服务调用的耗时和异常情况等,并基于这些信息提供服务调用拓扑分析[10]、调用量统计、异常定位和风险预测等分析功能以支持微服务应用运维[11]。由于这些信息可以根据对应的请求被组织成一系列相关服务调用的数据链,因此被称为服务调用链路。
微服务调用链路数据采集则是服务链路追踪系统的基础功能[9]。虽然丰富的链路数据会对后续的应用分析提供有效的支持,然而在分布式环境下进行链路数据采集时,由于原始监控数据分布在一组不同的节点,若所需采集的数据越多就需要消耗越多的跨节点数据传输和采集数据存储等成本。因此,随着微服务应用规模及访问数量的增大,对服务调用链路数据进行全量采集变得愈发困难[10]。为此,当前研究者的一种思路是对链路数据通过不同的采样方式进行采集,即只按照一定的采样策略对相应的链路数据进行采集,从而降低链路数据采集的代价。
.........................
1.2国内外研究现状
在微服务的发展的过程中,主要有5次新的技术革新,分别为轻量级容器技术、服务发现技术、监控技术、边车技术和服务网格技术[17]。
容器化技术不需要虚拟整个操作系统,直接托管在内核运行,轻巧且运行速度快,实现了资源隔离。之前更多人们大多数使用Docker启动容器创建服务[18][19][20],但随着应用服务复杂,容器数量增多,管理运维容器十分困难。Kubernetes是为容器而生的编排管理工具[21],很多企业开始依赖Kubernetes,主导了云服务应用,推动了微服务架构技术的发展。
国外流行的微服务架构Spring Cloud[22],将一些成熟开发便利的模块封装集成在一起,减少了模块的开发成本,提供了构建分布式系统的完整方案,简化了分布式系统的开发,但Spring Cloud对于服务间的通信、流量管理、容错[23],性能监控方面实现比较复杂。
之后出现Istio服务网格,增加了服务之间流量管理功能,提高了服务之间的通信的安全性,慢慢取代了Spring Cloud框架。Istio通过Istio Mixer收集服务信息[24],集成了Spring Cloud和Doubo等框架优点,简化便利了微服务架构开发。
随着微服务架构日益复杂,需要对微服务应用使用过程中涉及的微服务调用信息进行有效的收集、记录、管理和分析,微服务调用链路系统是集埋点、收集、监控和分析于一体的工具[25]。Dapper[26]系统是早期的监控系统,初期只有链路追踪功能,后期慢慢成为一个监控平台,增添成许多功能,如实时故障预警、指标查询等。目前不仅仅只有Google的Dapper系统,还有一些其它互联网公司的链路追踪系统,如Alibaba的鹰眼,美团的CAT[27]、Twitter的Zipkin[28][29]、Apache的SkyWalking[30]等。虽然这些系统各有特点,但一般都包括四部分核心内容:链路数据采集、链路数据存储、数据查询分析和数据展示。
...............................
第二章相关理论与技术概述
2.1微服务架构及关键支撑技术
随着云计算技术、容器虚拟化和融合了研发、试验、部署与运行于一身的DepOps等新信息技术的蓬勃发展[36],微服务应运而生。微服务是面对服务体系结构的一个具体实现,但二者的主要不同之处在于微服务实现了完全的组件化和去中心化。微服务将传统定义上的应用按功能、数据等业务功能分为一系列的服务单元,这些服务单元是集设计、开发、部署、运维一体的,服务间通过低耦合式的交互方式进行通信,相互合作,共同完成复杂的微服务应用系统。微服务架构通过重新组织定义的服务单元去设计符合企业业务需求的分布式框架[37]。各微服务独立部署,服务间自由组合和相互调用是依靠Rest API来实现的,提供了权限管理、资源的负载均衡策略、压力测试与路由查找等功能[1]。
微服务架构是一种设计理念,是在分布式的环境下对服务精确分工,将复杂的产品分割成小的服务模块,解决分布式带来的问题,比如高可靠性、数据一致性等关键问题。微服务架构各个服务之间隔离自治,互不打扰,独立部署,与传统面向服务架构相比,微服务架构通过每个业务功能单元对系统进行拆分,将模块进行解耦,从宏观的角度来看,通过服务的组合和编排实现了上层业务流程,而微观的角度来看,业务系统分解成多个组件,每个组件都独立提供离散、自治、可复用的服务能力,简化了维护,降低了整体风险,架构伸缩更加灵活。
软件工程论文怎么写
....................
2.2微服务调用链路追踪系统
“链路追踪”一词最早出现在谷歌发表的分布式链路追踪系统Dapper论文中。如图2-2给出了一个微服务调用链路追踪的概念示意。
微服务调用链路的定义主要包括两个核心概念:Trace和Span[26]。Trace对应一次请求涉及的所有服务调用组成的调用链,即一个Trace包含一组Span。Span表示每一次对微服务的调用,它是调用链路的基本单元。每个Span包括对应的traceid、调用起始时间、标注、日志、相关Span等信息。Span之间具有父子和跟随两种关系,分别表示父Span对应微服务对子Span对应微服务之间的直接调用关系(如图2-2中A到B和C的调用关系)以及没有调用依赖(不依赖被调用微服务的结果,只有先后关系)的特殊父子关系。表2-4给出了一个服务调用链路数据的示例。
Zipkin是一个开源的分布式跟踪系统,主要功能是实时监控系统。在Zipkin系统架构中,主要分为Server端和Client端[45],通过注入的方式,在服务节点上部署Client端,Client端根据节点的动态请求,将服务请求封装成满足Zipkin概念的服务样例,发送给Server端,Client端主要负责完成追踪数据的上报,Server端接收到Client端传送来的追踪数据,数据经过采集器进行采集过滤,通过存储器进行存储持久化,提供API接口方便查询,Server端主要负责处理和缓存的链路追踪数据,并以REST API接口的形式对外提供数据获取支持。图2-3中虚线框内包含负责各节点数据收集和汇总的Collector、负责数据存储的Storage以及数据查询展示的RESTful API和Web UI,可以看作是Zipkin系统的服务端。其中与服务链路数据采集相关的组件是由多个节点构成的分布式系统部分和服务端的Collector。
............................
第三章事件驱动的微服务调用链路数据动态采集方法....18
3.1问题分析.............................18
3.2动态采集方法设计与实现.........................19
第四章基于调用链路数据的服务依赖挖掘算法..........28
4.1问题分析................................28
4.2基于调用链路的服务依赖挖掘算法..........................29
第五章微服务调用链路监控分析系统实现..............35
5.1关键模块..............................36
5.1.1采集模块.......................................36
5.1.2监控分析模块............................39
第五章微服务调用链路监控分析系统实现
5.1关键模块
5.1.1采集模块
采集模块是集链路生成、收集、存储于一体的模块,主要功能对生成的微服务调用链路进行特征事件匹配,采集含有重要信息的链路数据,处理对象是由各个服务模块之间通信产生的调用链路数据,输出为带有异常标记的所有调用链路数据。自顶向下包括调用链路生成阶段、收集阶段和存储阶段,如图5-2所示:
软件工程论文参考
................................
第六章结论与展望
6.1结论
微服务调用链路数据是微服务应用系统日常运行中产生的一类重要数据,它以链路形式记录了微服务应用中一次用户请求对应的一系列服务调用信息。由于系统的分布性,微服务调用链路数据产生在不同的微服务部署节点,当前对这些分布数据的采集一般采用全量采集和采样采集两种方法。全量采集会产生较大数据传输和数据存储等成本,而采样采集则可能会漏掉关键的链路数据,所以需要设计一个高效准确的微服务调用链路采集方法。微服务架构正逐步成为当前的一种主流软件体系结构,其具有易扩展、易维护、高可靠、高可用等特点。另一方面,随着微服务架构应用系统复杂度越来越高,系统架构变化日益频繁,应用中隐含的服务调用和依赖关系也越来越来复杂,需要对服务依赖关系进一步挖掘。本文的主要工作及成果如下:
(1)提出了一种基于事件驱动和流水线采样的微服务调用链路数据动态采集方法,该方法首先对不同节点符合预定义事件特征的链路数据进行流水线采样,即数据采集服务端只在某节点产生事件定义的数据时对所有节点采集同一链路数据;同时,针对不同节点的数据产生速率不一致问题,采用基于时间窗口的多线程流式数据处理和数据同步技术,实现不同节点的数据采集和传递;最后,针对到达服务端先后顺序不一的各节点链路数据,通过时序对齐方式进行全链路数据的同步和汇总。
(2)设计一种服务依赖挖掘算法,该算法业务过程一共分为四步:数据聚合,服务依赖集聚合计数,部分依赖挖掘,非连续组合依赖挖掘。首先利用大数据技术对分布在不同节点的链路日志进行聚合,对服务进行统计分析,通过计算支持度,即调用计数在总体日志数据调用中的占比,找出部分依赖,并设计了基于频繁项集计算和候选集生成相结合的方法,实现了非连续的服务组合依赖关系抽取。
(3)针对调用链路的监控与分析设计一个集设计调用链路、埋点、采集、监控与分析一体的微服务调用链路监控系统,并为链路异常分析提供了清晰的可视化界面和准确的指标,从而保证链路分析的可靠性。
参考文献(略)