25丨SkyWalking:性能监控工具之链路级监控及常用计数器解析

在微服务横行的年代,没有链路级监控简直就是灾难。技术在不断的发展过程中,总是会有新的工具被推出来,它们存在的价值就是解决问题。链路监控工具存在的价值就是尽快找到微服务中哪一个环节是最慢的。

我们对微服务的态度究竟是怎样的?

但是在讲链路级监控之前,我需要再说一下我们对微服务的态度。

我们认为微服务性能好,具有良好的扩展性,于是很多企业会把自己的架构改为微服务,但是呢,在不需要使用新技术的系统中,盲目地迷信和使用市场上被推崇的新技术,只会带来问题。

在前面我举过一个例子,我见过一个物流项目,开发团队认为拆分服务是可以让性能提高的一个重要技术思路,于是他们不断地细分项目。在不到百万级的车辆体量的项目阶段中,一个物流系统已经被拆分成了三四十个子项目,最后开发团队和运维团队都不堪重负,因为维护的成本变高了。于是,开发团队开始反省,认为应该合并一些子项目,最后就形成了中台项目。

这不是玩笑,而是一个真实的案例。

至于项目能不能拆分成多个微服务,你需要对整个项目的容量、硬件的体量进行评估。如果评估完觉得不需要,那么尽量不要干这种为了炫耀技术,而害人害已害公司的事情。如果确实有需要,那没什么说的,该拆就拆。

但是在拆的过程也一定要知道,对于多个微服务来说,相关的支持手段(比如说服务健康状态、链路跟踪、日志收集分析系统等)一定要跟上,如果跟不上,那就是灾难了。

链路级监控对微服务的重要作用

在微服务架构的系统中,没有好的链路监控工具,对性能分析来说就是灾难,因为体力活实在是太多了。这就是链路级监控在微服务中存在的价值了。

特别是现在 Kubernetes+Docker 的基础架构也在不断地被应用。微服务往里面一放,有问题想查都不知道从哪下手。因为容器出现问题被重启之后,可能你都不知道问题在哪个 node 上,只能通过 Kubernetes 先查在哪个 node 上,再查相应的日志等信息,这样就增加了很多工作量。

说回我们的链路监控,在一个合理的微服务架构中,一开始的架构规划就应该包括链路监控。可以用开源的,可以用商业的,也可以自己编写度量器做埋点。总之不管怎么实现,只要实现了就好。

常见的链路监控工具,我们都称之为 APM(Application Performance Management 或者 Application Performance Monitoring),而这些 APM 工具都是参考 2010 年 Google 的一个论文来做的。这篇有名的论文就叫 Dapper, a Large-Scale Distributed Systems Tracing Infrastructure,点击

https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/papers/dapper-2010-1.pdf

就能看到。在Github

http://bigbully.github.io/Dapper-translation/

上有人翻译成中文,有兴趣的话,你可以去看看。

在商业市场当然有很多 APM 工具可以使用了。在这里,我就不给它们打广告了。重点推荐几个开源的好用的工具,它们分别是 Pinpoint、SkyWalking、Zipkin、CAT。

我们简单比对一下:

img

每个产品都有自己的特点,产品之间也有细微的差别。网络上也有人对这几个工具做过测试比对,得到的结论是每个产品对性能的影响都在 10% 以下,其中 SkyWalking 对性能的影响最小。

在今天的内容里,我之所以用 SkyWalking 说明链路监控,原因只有一个:中国开发者贡献的,必须得支持!

SkyWalking 的链路关系

为了说明链路的调用逻辑,我这里准备了几个非常简单的 Spring Cloud 应用。在这个示例中,我有四个服务。这四个服务会有相互的调用关系。如下所示:

img

其中用户可以直接访问 Project A、B、C、D 中的任何一个服务。同时这些服务器都会注册到 Eureka 中去,它们也会分别连 Redis、RabbitMQ、MySQL 等服务。

我们来看看 SkyWalking 是怎么体现链路关系的。

启动微服务 Project A

首先我们启动 Project A。为了让你能清晰地看到配置,我直接把 Agent 放到执行的命令行中。如下所示:

nohup java -javaagent:/data/pa/agent/skywalking-agent.jar -jar -Xms128m -Xmx128m /data/pb/target/pa.jar --spring.profiles.active=prod &

接着我们访问 Project A,通过 Postman 来访问这个示例提供的接口:

img

然后我们再来查看 SkyWalking 首页:

img

最后我们查看拓扑图:

img

从上面这张拓扑图中可以看到,当我访问了 pa 之后,这个 pa 链接了另外两个系统,一个是 Eureka,另一个是 MySQL。

加了 Agent 之后,至少我们可以看到这个服务现在在访问谁了。但是因为只有一个服务,所以还看不出来链路在哪里,现在我们启动 Project B。

启动微服务 Project B

首先启动 Project B:

nohup java -javaagent:/data/pb/agent/skywalking-agent.jar -jar -Xms128m -Xmx128m /data/pb/target/pb.jar --spring.profiles.active=prod &

接着查看 SkyWalking 的拓扑图:

img

你可以看到 pb(即 Project B)服务上有一个有一个问号,因为它还没有被人访问过。不过已经连上了 Eureka,所以和 Eureka 之间有条线。

然后我们使用 Postman 访问 Project B:

img

请注意,这里我直接访问了 Project B,并没有通过 Project A 访问。

然后我们再来查看一下拓扑图:

img

现在可以看到上图中 User 和 pb(即 Project B)之间有连线了吧。

这还只是单独的访问逻辑。

通过 Project A 访问 Project B

首先我

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值