开发者学堂课程【分布式链路追踪 Skywalking:Rpc 调用监控】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/743/detail/13159
Rpc 调用监控
内容介绍:
一、测试 Skywalking 对于 Rpc调用的支持
二、启动应用
三、项目逻辑分析与总结:
一、测试 Skywalking 对于 Rpc 调用的支持
1. Skywalking 对 Rpc 调用进行监控,Skywalking(6.5.0)支持的Rpc框架有以下几种:
Dubbo 2.5.4 -> 2.6.0
Dubbox 2.8.4
Apache Dubbo 2.7.0
Motan 0.2.x->11.0I gRPC 1.x
Apache ServiceComb Java Chassis0.1->0.51.0.x
SOFARPC 5.4.0
使用 Spring Boot 和 Dubbo 搭建一个简单的服务提供方和服务消费方来测试 Skywalking 对于 Rpc调用的支持。可以使用资源文件夹下已经完成打包的skywa1king_dubbo_consumer.jar
和 skywalking_dubbo_provider.jar 来进行测试。
首先来看服务提供方的源码,打开 pom 文件,它是基于springboot 2.1.10版本进行构建,引入了 web 和 test 这俩个依赖,然后还使用了 Dubbo 和springboot 集成的官方提供的依赖,也就是 Dubbo-spring-boot-starter ,版本号为2.0.0。
配置文件,配置文件中将注册中心设置成了 H/A ,代表不使用注册中心进行注册,只是将服务发布到本地,消费方需要去调用这个服务提供方的时候,需要在消费方显示的指定下服务提供方的 IP 地址和端口。Tomcat 启动的端口是8086。
查看源码,源码中为了方便,将接口在消费方和服务提供方都在同一个目录下放置了一个接口,这个接口比较简单,就是返回一个字符串。在 service 实现中,使用了 service 注解,在注解中需要添加一个属性,叫做 interfaceclass ,也就是。显示的是名下,如果这个时间内到底要暴露什么样的一个服务,那么服务接口其实就在IHelloService 这个结果里面。那么它的字节码文件,需要作为参数传入进去。然后再将实现类注入到 spring 容器之中,就可以使用了。消费方也类似,查看配置文件,这个配置文件都是基础配置,Tomcat 启动的端口是8085。
1.对外提供了HTTP接口,同时调用了我们的一个Dubbo 服务,去使用我们服务提供方提供的接口。需要注意,当用 @Reference 来进行一个注解的时候需要制定服务提供方的一个位置,也就是通过 double 协议去访问服务提供方,他部署在本机,同时暴露的端口是20880 ,20880就是一个默认端口,因为在服务提供方里面没有去声明一个端口。那么当注入完之后,程序启动 helloservice 就会变成一个动态代理对象,然后由 Dubbo 框架远程调用一个provide工程里面提供的接口,然后把结果进行反馈。
特别注意;用了集成框架之后,需要在启动类上加上一个注解,叫做@Enable DubboConfiguration,开启 Dubbo 配置,这样子才能够使用到这样的工程。
二、启动应用:
测试sky walking对我们这个支持。首先把两个 jar 包上传到目录下。
下图中的这俩个 jar 包:
上传完毕之后呢,把agent拷贝两份。进到 bin 目录下。
拷贝命令行:
cp -r agent_boot agent_dubbo_consumer //服务消费方
cp -r agent boot agent_dubbo_provider //改成服务提供方
编辑配置文件命令行:
vi agent_dubbo_consumer/config/agent.config
运行,并修改服务的名称,分别是 dubbo_consumer
和 dubbo_Provider
退出,保存。
启动应用命令行:
java-javaagent:/usr/loca1/skywalking/apache-skywalking-apm-bin/agent_dubbo_provider/skywalking-agent.jar -jar skywa1king_dubbo_provider.jar & //通过jar -jar启动本地的skywa1king_dubbo_provider.jar ,&符号代表后端启动
启动成功后:
需要在修改命令:将所有的provider修改为consumer:
java-javaagent:/usr/loca1/skywalking/apache-skywalking-apm-bin/agent_dubbo_consumer/skywalking-agent.jar -jar skywa1king_dubbo_consumer.jar
将这两个应用启动,
会发现 logo 变成了 DOBBO 和 Spring Boot 。启动成功后在浏览器地址栏输入端口号,需要访问的端口是 consumer 的端口:8085,接口为 hello 。输入为:192.168.62.141:8085/hello,回车。
会出现如下界面:
三、项目逻辑分析与总结:
那么这个hello sky walking是谁来打印?是通过 DOBBO 服务调用到了 hello service 的 hello 方法,这个方法的实现类是在 provide里面,这个 skywalking 这个字符是在 provide 里面打印出来的。返回返回hello skywalking ,这里证明打包调用已经成功,接下来在 sky walking 页面上刷新查看。会发现服务出现了两个新的这个服务。接口也变成了 /hello 。如下图所示:
第二个是dobbo 接口:
com.itcast.api.IHelloService.hello()
这个就是在如下图所示的IHelloService 中定义的一个接口:
其实一笔调用出现了两个请求,一个请求是对MVC 提供的一个 http请求 。另外一个是 dubbo 调用。
如下拓扑图。拓扑图中,很明显出现一个调用链,前端用户 double-consumer消费者发起这个 Spring MVC 的请求,然后由 consumer通过double 调用到 provide ,如下图所示:
追踪里面进行手动刷新,搜索。调用 hello,这是一个 HTTP 请求,通过 Get 方式来进行,花费了一秒钟时间,其次,第二步就是去调用到了一个 dubbo 的接口,调用时长相对比较短,最终,他这个double就耗时五毫秒,大部分时间都是在HTTP 请求里面消耗的,通过这样的一个方式,可以发现,服务之间有了一个链路的一个关系,在这个链路上,通过追踪可以详细的看到,到底是哪个地方出现了性能的瓶颈,然后可以根据实际的情况进行优化。目前来看,Dubbo 调用非常快,五毫秒就结束,具体的时间耗在 Spring MVC 这个应用里,以上就是在 skywalking 中怎么对 Rpc 调用进行监控。主要是去修改 agent ,主要是创建多个 agent 。同时用 agent 启动 Springboot 项目。这样就可以对 Springboot 和dubbo 集成的项目进行监控。