PHP分布式链路追踪,SkyWalking:分布式架构链路追踪-SkyWalking介绍

news/2024/12/2 14:41:18/

前面几篇文章提到了微服务相关系统的使用与搭建,在微服务架构下的问题也比较突出。正常系统下我们的每个请求都会在同一个系统中进行输出。但是在微服务架构中一个请求可能设置一到多个服务进行处理。服务之间相互依赖,服务之间形成一个调用链。如果调用链之间的某个服务出现故障那么整个调用链都将会受到影响。

为什么需要链路追踪

架构设计之初就提出了需要进行分布式链路追踪系统,而且当时也对需求进行了大概的一个推演。我们希望能够得到的是一个下图这样的结构。每次请求能够获取到该请求的调用链。

971b6a1c403f7ebb15633aeff8d02c70.png当然上图是一个正常的情况下的请求,异常情况下我们应该获得的是一个能够直接看到异常服务的状态(「服务D异常」)。

b29801def687a49a1f685cae7154c725.png

SkyWalking

面对这些情况,我们需要一个能够支撑起该需求的APM工具。目前主要的一些APM工具有,Cat,Zipkin,Pinpoint,SkyWalking。Zipkin是Twitter开源的,Pinpoint是韩国人开源的。Cat与SkyWalking均为国人开发的。所以在选择的时候主要关注的就是国人开发的.(英文不咋滴,怕看不懂文档..)

其实也大概的翻阅了一下相关的博客,得到了一相关选型的分析与各个工具之间的区别。做了一些排除项,最终选择为SkyWalking。

不要代码侵入(已经上线了几个服务,不想再回去改代码)

分析粒度尽量细

支持较为丰富

所以今天主要来看一下SkyWalking。

SkyWalking当前的最新版本已经到了8,我已经在生产环境搭建好了。可以先看一下效果。

服务拓扑

3e51d9fbceeddabd6c89fc4aaaaa729e.png

请求追踪

03d3b130f9d4e795f87d342853f18ed5.png

可以看到当前的服务调用链。用户发起请求后就会基于调用的相关服务生成调用链拓扑图。而每个请求也能看到详细的调用信息。同时调用拓扑中也除了服务之外也包含对于数据库,外部请求,消息队列等进行拓扑。

「SkyWalking的核心是数据分析与度量的平台,通过Http或者gRPC的方式向信息搜集器(SkyWalking Collecter)上报收集到的客户端采集的信息。

信息搜集器(SkyWalking Collecter)对搜集到的结果进行分析与聚合。它的数据主要使用ElasticSearch,MySql,H2,TiDB等进行存储。当然任选其一即可。我们通过UI进行查看分析的数据结果。采集器则负责搜集数据,支持较多的语言 Java,PHP,.Net Core,NodeJS,Golang等」

总结

SkyWalking满足我们的当前需求,最直观的可以通过SkyWalking看到服务调用链是否合理。是不是一个DAG。同时能够分析每个请求的追踪是否有异常。而且支持MQ,MySQL,Http请求等各种方式能够获取到发生异常的点与RT较高的点进行优化。


http://www.ppmy.cn/news/614437.html

相关文章

单目摄像头标定与测距

单目摄像头标定与测距 一、 标定 首先要对摄像头做标定,具体的公式推导在learning opencv中有详细的解释,这里顺带提一句,这本书虽然确实老,但有些理论、算法类的东西里面还是讲的很不错的,必要的时候可以去看看。1.单…

Java动态代理和静态代理区别

静态代理 package staticproxy;/*** 接口* author newtouch**/ public interface IHello {public void sayHello();public String doSomethong(String s);}package staticproxy;/*** 实现类* author newtouch**/ public class Hello implements IHello{Overridepublic void say…

L4自动驾驶技术

L4自动驾驶技术 一.SAE的五个级别分别是: L0:驾驶员完全掌控车辆,无任何自动化能力。 L1:自动系统有时能够辅助驾驶员完成某些驾驶任务。比如高速自动巡航(自动认知所在车道),和一…

php mms,PHP代码示例_PHP账号余额查询接口 | 微米-中国领先的短信彩信接口平台服务商...

PHP余额查询接口代码示例请求$ch curl_init();curl_setopt($ch, CURLOPT_URL, "http://api.weimi.cc/2/account/balance.html");curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);curl_setopt($ch, CURLOPT_POST, TRUE);/*设定微米账号的接口UID和接口密码*/curl_se…

工作经验:Java 系统记录调用日志,并且记录错误堆栈

前言:现在有一个系统,主要是为了给其他系统提供数据查询接口的,这个系统上线不会轻易更新,更不会跟随业务系统的更新而更新(这也是有一个数据查询接口系统的原因,解耦)。这时,这个系…

ASML光刻机PK 原子弹,难度?

ASML光刻机PK 原子弹,难度? 一. 物理世界和网络世界的交汇点:光刻机 光刻机的技术有多高级,看看这个知乎提问,可以感受一下: 有人这样形容光刻机:这是一种集合了数学、光学、流体力学、高分子…

uniapp 封装 navbar tabbar

最近换了一家公司工作 因为上家公司老板给的钱不多 还特别会压榨员工 好了好了,不扯皮了 1、封装navbar: 首先需要在pages.json中将对应页面的原生navbar给取消 举例: {"pages": [{"path" : "pages/home/inde…

shell访问php文件夹,Shell获取某目录下所有文件夹的名称

Shell获取某目录下所有文件夹的名称以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Shell获取某目录下所有文件夹的名称, 已知目录D:/temp,获取temp下所有文件夹的名称并输出,She…