摘要:目前湖南电信的部分业务系统是部署在各种分布式集群之上。一个业务请求有可能由多个服务节点配合完成,在这个业务调用链里,任意一个处理环节出现了问题,都会导致导致业务使用异常。湖南电信基于业界主流的业务调用链监控技术,完成了对计费,自动开通系统的关键业务流程的实时监控,使IT运营人员能及时准确获取业务流程全景信息,实现主动运维,大幅提升了IT运营水平。
关键词:业务调用链;JavaInstrumentation;分布式跟踪
1概述
湖南电信在2017年使用“平台”加“应用”的技术架构,按照“能力与界面分离”“数据与应用分离”“能力可编排”“应用水平弹性可扩展的原则”,建设智慧运营BSS系统。并根据“高内聚,低耦合”原则,将原BSS系统拆分成18个能力服务中心。各服务中心通过能力开放平台进行跨中心能力调用。在新的技术架构下,一个业务请求有可能由多个服务节点配合完成,在这个业务调用链里,任意一个处理环节出现了问题,都会导致业务使用异常。在业务异常发生前,如何迅速判定隐患并迅速解决,在业务异常发生时,如何迅速准确地判断故障点,分析故障原因,成为湖南电信在IT运营中亟待解决的问题。
湖南电信自2019年开始,积极学习探索业界主流的业务调用链监控技术,完成了对计费,自动开通及激活系统的停复机这个对客户感知有重大影响的关键业务流程的实时监控,使IT运营人员能及时准确地获取停复机业务流程全景信息,实现被动运维向主动运维转变,不但提升了IT运营水平,而且改善了用户感知。
2分布式跟踪概念的提出
Google在2010年发表了一篇名为“Dapper,aLarge-ScaleDistributedSystemsTracingInfrastructure”的论文,介绍了分布式跟踪系统的设计和使用经验。当前业界主流的分布式跟踪系统,如Hydra(京东)、鹰眼Tracing(阿里)基本都是基于Google的这篇论文而开发的。
这些互联网公司为了支撑不断剧增的业务量,一般按照“高内聚,低耦合”的原则拆分各类服务,并通过大规模分布式集群部署。由于每一次的业务请求,均要跨越多个不同的服务节点经过多次的服务调用来完成,所以通过服务跟踪系统实时呈现服务复杂的调用链路,分析调优链路性能,迅速发现诊断处理调用链路故障,就显得尤为重要。
3分布式跟踪系统的设计目标
分布式跟踪系统的目的是为了将分布式系统中复杂的调用及运行信息提供给开发和运营人员。通常一个web查询不仅会被分发给多个服务器,在每一台服务器上完成各自的搜索工作之外,同时可能还会被发送给其他子系统,进行图片查找和拼写检查等处理。处理一次搜索查询,可能需要数十乃至上百台机器,涉及多种服务,其中任意一个部分发生性能问题都可能导致查询超时甚至失败。如果IT运营人员单单只监控查询总耗时这一个指标的话,往往会只知道出问题了,但是无法知道具体是哪个系统或哪个服务出问题以及为什么出问题。首先,IT运营人员并不知道到底调用了哪些服务;其次,可能不同的服务由不同的人员甚至不同的公司开发的,IT运营甚至开发人员都无法了解每个服务的具体实现。
上面描述的场景就对分布式跟踪系统提出了两条最基本的要求:大范围部署和持续的监控。根据这些基本要求提出了四个具体的设计目标:
低消耗,高稳定:只有较小的应用性能影响,避免应用开发人员抵触;
低侵入:基本对应用透明;
可扩展性:能根据所监控的系统数目的不断增长,而动态扩展;
快速分析:最好是在几分钟内完成分析,让IT运营人员能迅速对性能异常做出反应。
4分布式跟踪系统的关键技术
发生一次业务请求后,分布式服务跟踪系统应该记录其所有调用的数据。图1展现了一个包含5台服务器的查询服务:
1)服务器A(接受用户请求的前端服务器);
2)服务器B和C(中间层服务器);
3)服务器D和E(后端服务器)。
前端服务器A接收到用户发起的请求RequestX之后,会发送rpc1调用B,发送rpc2调用C。B执行完毕后会立即返回结果,C会发送rpc3和rpc4分别调用到后端服务器D和E,并在接受DE的结果后,返回结果给A,A再回复用户请求的结果。
如上图所示,在分布式跟踪系统中,能够采用一颗RPC跟踪树的形式来展现业务调用关系。
4.1跟踪树与span
span是RPC跟踪树中的节点。连接span的箭线表示span的父子关系。span中记载了span的开始和结束时间、RPC时间数据。图2描绘了跟踪树中5个span之间的因果调用关系。
span中都记载了一个可读的spanname、spanid和parentid,这样就能重新构建出分布式跟踪过程中span的调用关系。没有parentid的span被称为根span。一次特定跟踪的所有相关span会共享同一个通用的traceid。
图3标示了spanid=5的那次Helper.CallRPC的调用。RPC库中记录下了RPC的计时数据,span的开始和结束时间。
每一次用户请求,跟踪系统都生成唯一的TraceId,TraceId在span间传递,将不同服务的日志重组还原出一个完整的调用链。此外对于不同业务应用可能还需要有特殊的信息记录到日志中,所以调用链日志信息(Span)应包含如下内容。
4.2JavaInstrumentation
JavaSE5引入了Instrumentation功能,该功能使开发者可以创建一个相对独立的agent,用来监控和管理运行在JVM上的程序,甚至可以更改应用程序的Javaclass,从而使开发人员能够实现某些AOP的功能。JavaSE6之前,Instrument需要在程序运行前通过修改参数来设置代理类,JVM在初始化之时(在绝大多数的Java类库被载入之前),instrumentation的设置已经启动,并在JVM中设置了回调函数,检测特定类的加载情况,从而完成相应的处理。在JavaSE6中,能够在程序启动后的运行过程中动态地加载代理类,进一步扩展了instrumenta⁃tion的使用场景。
由于湖南电信几乎所有的业务系统都是用Java开发的,因此在分布式跟踪系统的开发过程中使用了JavaInstrumentation特性,实现对现有业务系统低侵入以及对应用透明的跟踪及监控。
5“鹰眼”业务调用链监控系统在湖南电信的应用
湖南电信基于分布式跟踪技术的业务调用链监控系统叫“鹰眼”,由采集端,实时分析端与数据提取转换展示端三个大的部分组成。其中采集端通过JVM的基础运行机制,对业务数据进行实时提取;实时分析端通过对采集而来的业务执行数据流进行流式分析,并依格式存储业务分析后的数据,调用链数据等;通过展示树状态调用链的信息,提供关键信息快速定位能力。仅需业务应用人员提供对应的代码包结构,共同分析哪些包哪些类需要织入调用链中,输出内容为是系统及业务调用链工具的配置信息,对业务代码本身不产生任何影响与入侵。系统总体部署架构如图5所示。——论文作者:熊游泳,庾玲
相关期刊推荐:《电脑知识与技术》杂志创刊于1994年,是一本面向计算机全行业的综合性学术刊物。主要面向广大的科技工作者、高等院校、各公共图书馆、情报所(室)、研究所以及厂矿,它对科技工作者、科学研究人员、广大教师、研究生、博士生都具有重要的参考价值。稿源来自全国各高等院校,相关专业研究机构以及国内大型信息通讯、软件研发企业设置的专业研究所。
* 稍后学术顾问联系您