当前位置: 首页 > 后端技术 > PHP

系统化的服务构建——调用链管理

时间:2023-03-29 18:23:23 PHP

本文讨论应用开发中的调用链管理。涉及的主要知识包括日志、接口和服务定义、监控、微服务注册等。调用链管理调用链管理是服务架构中的一项基本职责,是一种服务能力。主要使用TraceId和SpanId来跟踪服务调用依赖关系,打通整个服务调用路径,方便上下游服务的监控和管理。不用说,微服务这么高大上的系统,通常的应用系统,在实现某个功能时,都会涉及到各种外部依赖,或接口,或服务,或组件。整个调用链的生命周期就是调用链管理。.关键概念本文在谈到调用链管理时,明确定义了以下几个概念上游服务(消费者)上游服务是调用者所依赖的服务的统称。这里的服务可以是单个接口,也可以是一组接口。函数的集合。其实这里的一个核心问题就是如何定义服务。从接口数量的纬度来看,无论是单个接口,还是多个接口组成的函数集合,或者是多个函数组成的组件,都可以称为服务。从服务的必要属性来看,主要包括服务名(接口名)、域名、URL(地址)、方法和参数。从微服务的概念来看,服务包括提供者服务和消费者服务。再深一点,涉及到服务注册中心的相关理论。本节中的上游服务特指提供者服务。下游服务(调用者)调用者是服务消费者。在某个功能的调用链过程中,调用者不局限于前端Js,调用者更多的是下游服务。这里涉及到计算机网络的两种通信方式,C/S方式和P2P(点对点点对点方式)。P2P点对点的核心解释是网络上的计算节点既是服务提供者,为其他计算节点提供服务,又是消费者,依赖其他服务。LevelId调用链的唯一编号,一般由第一次调用的发起者生成,全局唯一。上游服务异常下游业务基于上游服务。如何定义上游服务异常?第一种情况,上游地址错误,导致访问异常。简单来说,接口不返回,接口域名错误,接口地址错误404,http通道直接报错第二种情况,上游地址域名正确,地址接口正确,但服务停止,接口返回Null,尤其是基于Java的服务。有些人喜欢默认为Null。],统一定义【上游服务异常】状态码,直接输出错误,标记服务没有获取到数据的情况。基于一个标准,统一外部输出。第三种情况,上游服务访问时间较长,导致超时。作为调用者,如何捕捉接口调用者的请求超时是一个值得研究的问题。调用链管理的作用调用链管理的目的是维护程序的稳定性、功能的可用性,保证应用系统的灵活性。通过调用链管理,可以快速定位问题。通过自定义【上游服务异常】状态码,可以定位问题是发生在上游服务层面,还是该服务的数据处理层面。如果接口是跨部门调用的,那么这个就是其他部门的责任了。职责更加明确。下面介绍如何管理调用链,主要包括生成链路ID、记录请求输出日志、分析预警。GenerateLinkIdLinkId是前端生成的还是后端生成的?图片是公开信息的PPT链接Id,由调用的入口方生成,不一定是前端。下面的代码是YII2中生成linkId的例子publicstaticfunctioncreateRequestId(){//$prefix=$module;$prefix=Yii::$app->controller->module->id;session_create_id(日期('YmdHis'));//使用uniqid()方法创建一个唯一的id$requestId=strtoupper(md5(uniqid($prefix,true)));返回$requestId;}记录日志形式化描述监控模型下面的描述摘自一篇论文,本文形式化描述的五元组的过程其实就是监控建模的过程。一个trace由一个全局的TraceId标识,trace中的每一个调用请求都有一个唯一的LevelId。为了更好的描述后面的概念,这里先对每一个调用请求进行形式化描述。LevelId就是上面定义的TraceId或者linkId五元组?=(????????,????????,??h??,??????)来描述每一个包含的特征信息请求信息中的特征向量称为特征向量。LevelId用于标识请求信息。LevelId在一条迹线中是唯一的,是一个多级数。Service表示请求信息请求的服务名称,Method表示请求信息调用的方法名称,Params表示请求信息包含的参数集合。程序在各个节点上记录日志时,可以使用形式化描述的属性来记录,持久化的方式可以是日志的形式,也可以是数据库的形式。如何检测请求超时?第一种方法是设置HTTP等调用组件的超时参数。第二种方法是服务端(server)检测时间差,用超时时间计算客户端(requester)请求时间与服务端(server)时间的差值。相比之下,当接口无法查询到数据时,接口代码应该如何设计呢?接口的下游何时直接输出上游接口的消息,或者上游是否要再次发消息。参考一个实现方法,统一[upstreamserviceexception]的状态码,原样输出[Message]。但是需要保证一件事,要保证输出到本系统的返回数据json结构是完整的,那就是符合datamessagecode的结构是必不可少的。不完整的输出结构意味着更多的判断逻辑和沟通。输出完整的json结构,方便调用方统一管理,保持通信协议的规范性。标准化意味着低成本和高效率。服务雪崩效应多个服务层调用,基础服务失效可能导致级联失效,进而导致整个系统不可用。这种现象称为服务雪崩效应。服务雪崩效应是“服务提供者”不可用导致“服务消费者”不可用,并逐渐放大不可用的过程。淘宝鹰眼是一个基于网络通话记录的分布式追踪系统。可以分析分布式系统之间网络请求的调用情况,从而获取处理请求的调用链上的入口URL和应用服务的调用关系,从而找到请求处理瓶颈,定位错误异常源。监控可以做到业务不可入侵监控可以做到业务不可入侵,可插拔是最高境界。传统的应用系统很难做到这一点,而且维护能力很差。横切关注点和sidecar模型是实现非侵入式业务的一些尝试。横切关注点在软件开发过程中,横切关注点是指功能分散在软件应用的多个地方,与业务逻辑分离(但往往直接嵌入到应用的业务逻辑中)。将这些横切关注点与业务逻辑解耦正是AOP应该解决的问题。常见的横切关注点包括操作日志的生成、安全检测、事务处理等,分布式追踪中跟踪信息的收集和记录也可以看作是横切关注点。总结本文介绍了调用链管理的相关概念和使用场景。一般来说,调用链管理也有一个生命周期和一个通用的实施策略。首先,以链路Id为串接,记录每个计算节点上完整的输入输出日志。其次,对日志进行一些常规分析,量化数据指标,对关键业务进行更详细的记录和分析。最后是及时预警和反馈。按照这些步骤,最基本的调用链管理功能就完成了。如果想深入研究,主要方向是结合日志,配合可视化UI,跟踪分布式链接。