32、Spring Cloud 服务跟踪总结
上两篇讲解了zipkin,这篇总结一下。其实Spring Cloud实施分布式跟踪解决方案所用的技术不仅仅是zipkin。在spring官网:
http://spring.io/projects/spring-cloud-sleuth
有这么一段话:
翻译过来:
Spring Cloud Sleuth是Spring Cloud实施分布式跟踪解决方案,大量借用Dapper,Zipkin和HTrace。 对于大多数用户来说,侦探应该是隐形的,并且所有与外部系统的交互都应该自动进行检测。 您可以简单地在日志中捕获数据,也可以将数据发送到远程收集器服务。
Spring Cloud Sleuth借用了Dapper的术语:
跨度(Span):基本的工作单位。例如,发送一个RPC是一个新的跨度,就像向RPC发送响应一样。跨度由跨度的唯一64位ID和跨度所包含的另一个 64位ID标识。Spans还具有其他数据,例如描述,时间戳事件,键值注释(标记),导致它们的跨度的ID以及进程ID(通常为IP地址)。跨度启动和停止,并跟踪他们的时间信息。一旦你创建了一个跨度,你必须在将来某个时候停止它。开始追踪的初始跨度被称为 root span。该跨度的span id的值等于trace id。
痕迹(Trace):一组形成树状结构的跨度。例如,如果您正在运行分布式大数据存储,则跟踪可能由放入请求组成。
标注(Annotation):用于及时记录事件的存在。用于定义请求开始和结束的一些核心注释是:
cs - 客户端发送 - 客户端发出请求。这个注释描述了跨度的开始。
sr - 服务器已收到 - 服务器端收到请求并开始处理。如果从这个时间戳中减去cs时间戳,将会收到网络延迟。
ss - 服务器发送 - 在请求处理完成时(当响应被发送回客户端时)注释。如果从这个时间戳中减去sr时间戳,将会收到服务器端处理请求所需的时间。
cr - 客户端收到 - 表示跨度结束。客户端已经成功接收到服务器端的响应。如果从这个时间戳中减去cs时间戳,那么将会收到客户端接收服务器响应所需的全部时间。
Span 和 Trace 在系统中与 Zipkin Annotation 一起显示的可视化示例:
(https://github.com/spring-cloud/spring-cloud-sleuth)
1、依赖说明
从中央仓库https://mvnrepository.com可以查询到以下与zipkin和sleuth相关的jar引用:spring-cloud-starter-zipkin、spring-cloud-starter-sleuth、spring-cloud-sleuth-zipkin,他们只有有什么关系呢?
从pom.xml的引用关系可以看到spring-cloud-starter-zipkin包含了spring-cloud-starter-sleuth和spring-cloud-sleuth-zipkin,就是所引入spring-cloud-starter-zipkin就等于引用了spring-cloud-starter-sleuth和spring-cloud-sleuth-zipkin
2、配置说明
Zipkin和Sleuth配置类分别是:
Zipkin: org.springframework.cloud.sleuth.zipkin2.ZipkinProperties
Sleuth: org.springframework.cloud.sleuth.autoconfig.SleuthProperties
从这两个类就可以知道Zipkin和Sleuth分别有哪些配置项
3、 分布式服务跟踪系统原理
分布式服务跟踪系统,主要有三部分:数据收集、数据存储和数据展示。根据系统大小不同,每一部分的结构又有一定变化。譬如对于大规模分布式系统,数据存储可分为实时数据和全量数据两部分,实时数据用于故障排查(trouble shooting),全量数据用于系统优化;数据收集除了支持平台无关和开发语言无关系统的数据收集,还包括异步数据收集(需要跟踪队列中的消息,保证调用的连贯性),以及确保更小的侵入性;数据展示又涉及到数据挖掘和分析。虽然每一部分都可能变得很复杂,但基本原理都类似。
阿里云的一些服务可以类比,比如你需要收集一台云主机的IO情况,CPU使用率、磁盘使用情况等;就需要在我们的云主机安装一个代理agent(类比Zipkin Client),这个代理agent的作用就是收集当前主机的数据,然后上送到管理控制台(类比Zipkin Server)
应秀盐酸: spring-cloud调用服务有两种方式,一种是百Ribbon+RestTemplate, 另外一种是Feign.Ribbon是一个基于度HTTP和TCP客户端的负载均衡器,其实版feign也使用了ribbon, 只要使用@FeignClient时,权ribbon就会自动使用.
奉新县13619974267: 如何使用Spring Boot/Spring Cloud 实现微服务应用 - ?
应秀盐酸: Spring Cloud介绍 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简...
奉新县13619974267: 如何使用Spring Cloud - ?
应秀盐酸: 使用Spring Cloud构建e79fa5e98193e58685e5aeb931333339663431实际的微服务架构.基本概念:使用Docker进行集成测试混合持久化微服务架构服务发现API网关Docker使用Docker对每一个服务进行构建和部署.使用Docker ...
奉新县13619974267: springcloud服务已经关但是Eureka还是显示up - ?
应秀盐酸: 自我保护机制,Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况(在单机调试的时候很容易满足,实际在生产环境上通常是由于网络不稳定导致).解决办法:添加如下配置,关闭自我保护 ...
奉新县13619974267: 西天取经,学 Spring - Cloud,到底什么是 Spring - Cloud - ?
应秀盐酸: Spring Cloud 是Pivotal提 供的用于简化分布式系统构建的工具集.Spring Cloud引入了云平台连接器(Cloud Connector)和服务连接器(Service Connector)的概念.云平台连接器是一个接口,需要由云平台提供者进行实现,以便库中的其他模块可以与该云平台协同工作.
奉新县13619974267: 微服务框架 spring cloud 和 dubbo 有什么区别 - ?
应秀盐酸: 其中配置管理Dubbo是不具备的,当然可以借助Zookeeper实现,但是不推荐.Spring Cloud提供的方案是Spring Cloud Config,再加上Spring Cloud Bus可以实现配置的广播动态刷新. 服务注册和发现作为基础的能力Dubbo是有的,默认大概...
奉新县13619974267: springcloud怎么注册同一个服务多个实例 - ?
应秀盐酸: springcloud怎么注册同一个服务多个实例 一个流程图包括:1. 表示相应操作的框;2. 带箭头的流程线;3. 框内外必要的文字说明.2.4.3 三种基本结构和改进的流程图1. 顺序结构:2. 选择结构:3. 循环结构 三种基本结构的共同特点:? 只有一个入口;? 只有一个出口;? 结构内的每一部分都有机会被执行到;? 结构内不存在“死循环”.2.4.4 用N-S流程图表示算法1973年美国学者提出了一种新型流程图:N-S流程图.
奉新县13619974267: 如何学习spring cloud - ?
应秀盐酸: 第1天:查看spring boot官方文档,实现及实验spring boot 应用. 第2天:熟读spring cloud官方文档配置管理部分并熟悉配置管理相关概念. 第3天:熟悉Git概念,并上传配置文件到Git服务器,最后实现分布式配置管理. 第4天:熟读spring cloud官
奉新县13619974267: spring cloud 有哪些功能 - ?
应秀盐酸: 用了二个多月,理解的就这些:1. 注册中心(易分布,易扩充)2. 网关(保护服务,权限统一验证)3. 配置中心(配置统一管理)4. 基于http的服务调用(调用简单)5. 熔断器(容灾)6. 监控 坑很多,一步一个坑.
奉新县13619974267: spring cloud,基于什么实现 - ?
应秀盐酸: Spring Cloud的子项目,大致可分成两类,一类是对现有成熟框架”Spring Boot化”的封装和抽象,也是数量最多的项目;第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是kafka, ActiveMQ这样的角色....