网站制作可以,wordpress标签多重筛选,响应式相册网站模板下载,工商局加强网站建设的通知作者#xff1a;平也来源#xff1a;关爱程序员社区背景介绍在微服务横行的时代#xff0c;服务化思维逐渐成为了程序员的基本思维模式#xff0c;但是#xff0c;由于绝大部分项目只是一味地增加服务#xff0c;并没有对其妥善管理#xff0c;当接口出现问题时#xf… 作者平也 来源关爱程序员社区背景介绍在微服务横行的时代服务化思维逐渐成为了程序员的基本思维模式但是由于绝大部分项目只是一味地增加服务并没有对其妥善管理当接口出现问题时很难从错综复杂的服务调用网络中找到问题根源从而错失了止损的黄金时机。而链路追踪的出现正是为了解决这种问题它可以在复杂的服务调用中定位问题还可以在新人加入后台团队之后让其清楚地知道自己所负责的服务在哪一环。除此之外如果某个接口突然耗时增加也不必再逐个服务查询耗时情况我们可以直观地分析出服务的性能瓶颈方便在流量激增的情况下精准合理地扩容。链路追踪“链路追踪”一词是在2010年提出的当时谷歌发布了一篇Dapper论文介绍了谷歌自研的分布式链路追踪的实现原理还介绍了他们是怎么低成本实现对应用透明的。其实Dapper一开始只是一个独立的调用链路追踪系统后来逐渐演化成了监控平台并且基于监控平台孕育出了很多工具比如实时预警、过载保护、指标数据查询等。除了谷歌的dapper还有一些其他比较有名的产品比如阿里的鹰眼、大众点评的CAT、Twitter的Zipkin、Naver(著名社交软件LINE的母公司)的pinpoint以及国产开源的skywalking等。基本实现原理如果想知道一个接口在哪个环节出现了问题就必须清楚该接口调用了哪些服务以及调用的顺序如果把这些服务串起来看起来就像链条一样我们称其为调用链。想要实现调用链就要为每次调用做个标识然后将服务按标识大小排列可以更清晰地看出调用顺序我们暂且将该标识命名为spanid。实际场景中我们需要知道某次请求调用的情况所以只有spanid还不够得为每次请求做个唯一标识这样才能根据标识查出本次请求调用的所有服务而这个标识我们命名为traceid。现在根据spanid可以轻易地知道被调用服务的先后顺序但无法体现调用的层级关系正如下图所示多个服务可能是逐级调用的链条也可能是同时被同一个服务调用。所以应该每次都记录下是谁调用的我们用parentid作为这个标识的名字。到现在已经知道调用顺序和层级关系了但是接口出现问题后还是不能找到出问题的环节如果某个服务有问题那个被调用执行的服务一定耗时很长要想计算出耗时上述的三个标识还不够还需要加上时间戳时间戳可以更精细一点精确到微秒级。只记录发起调用时的时间戳还算不出耗时要记录下服务返回时的时间戳有始有终才能算出时间差既然返回的也记了就把上述的三个标识都记一下吧不然区分不出是谁的时间戳。虽然能计算出从服务调用到服务返回的总耗时但是这个时间包含了服务的执行时间和网络延迟有时候我们需要区分出这两类时间以方便做针对性优化。那如何计算网络延迟呢我们可以把调用和返回的过程分为以下四个事件。Client Sent简称cs客户端发起调用请求到服务端。Server Received简称sr指服务端接收到了客户端的调用请求。Server Sent简称ss指服务端完成了处理准备将信息返给客户端。Client Received简称cr指客户端接收到了服务端的返回信息。假如在这四个事件发生时记录下时间戳就可以轻松计算出耗时比如sr减去cs就是调用时的网络延迟ss减去sr就是服务执行时间cr减去ss就是服务响应的延迟cr减cs就是整个服务调用执行的时间。其实span块内除了记录这几个参数之外还可以记录一些其他信息比如发起调用服务名称、被调服务名称、返回结果、IP、调用服务的名称等最后我们再把相同spanid的信息合成一个大的span块就完成了一个完整的调用链。感兴趣的同学可以去深入了解一下链路追踪希望本文对你有所帮助。