
提供链路追踪。通过sleuth可以很清楚的看出一个请求都经过了哪些服务;可以很方便的理清服务间的调用关系。
可视化错误。对于程序未捕捉的异常,可以结合zipkin分析。
分析耗时。通过sleuth可以很方便的看出每个采样请求的耗时,分析出哪些服务调用比较耗时。当服务调用的耗时随着请求量的增大而增大时,也可以对服务的扩容提供一定的提醒作用。
从官网得知 从210版开始,Spring Cloud Sleuth支持将跟踪发送到多个跟踪系统,且去掉了 spring cloud streaming,那如果只引入sleuth包,不同机器服务之间相互调用是否还能实现链路追踪?经过测试答案是可以的,源码这里我没研究,但是从技术角度要自己实现,其实只要在 header 里添加一个值(唯一),在上下游服务之间传递,便可行。
所以结论是如果只是单纯为了使用链路追踪在控制台看,只引入 sleuth 是已经足够的。
Zipkin是Twitter的一个开源项目,我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的API接口来辅助查询跟踪数据以分布式系统的监控程序,通过UI组件帮助我们及时发现系统中出现的延迟升高问题以及系统性能瓶颈根源。
Collector(收集器组件)-> 主要负责收集外部系统跟踪信息,转化为Zipkin内部的Span格式。
Storage(存储组件)-> 主要负责收到的跟踪信息的存储,默认为存储在内存中,同时支持存储到Mysql、Cassandra以及ElasticSearch。
API(Query)-> 负责查询Storage中存储的数据,提供简单的JSON API获取数据,主要提供给web UI使用。
Web UI(展示组件)-> 提供简单的web界面,方便进行跟踪信息的查看以及查询,同时进行相关的分析。
Instrumented Client 和Instrumented Server,是指分布式架构中使用了Trace工具的两个应用,Client会调用Server提供的服务,两者都会向Zipkin上报Trace相关信息。在Client 和 Server通过Transport上报Trace信息后,由Zipkin的Collector模块接收,并由Storage模块将数据存储在对应的存储介质中,然后Zipkin提供API供UI界面查询Trace跟踪信息。Non-Instrumented Server,指的是未使用Trace工具的Server,显然它不会上报Trace信息。
bff-web-data-platform 称为 appname -> 应用名称
368e435f7de29eff 称为 traceId -> 为了追踪一个请求完整的流转过程,可以给每次请求分配一个唯一的 traceId,当请求调用其他服务时,通过传递这个 traceId。
368e435f7de29eff 称为 spanId -> 发生的特定 *** 作的ID
false 称为 exportable -> 是否应将日志导出到Zipkin。
无论是使用 sleuth 或是使用 zipkin 都会在控制台上输出这样的日志信息。
借鉴博客
21以下版本中文文档,可以借鉴
简单梳理源码,欢迎大家讨论,评论,指正。
首先是配置applicationyml,heartbeat中的enabled参数设置为true
我用的包是spring-cloud-consul-discovery-133RELEASEjar
本文将从 Tomcat性能优化,SpringCloud开启重试机制,Zuul网关性能参数优化,Ribbon性能参数优化,Feign与Hystrix性能优化等 五个方面分享在生产环境如何做好SpringCloud性能优化。
一般基于SpringCloud的微服务能够脱离传统的tomcat,独立跑起来,SpringBoot功不可没,其原理是SpringBoot内嵌了tomcat(当然可以换成其他servlet容器,如jetty),能够以java -jar形式就能跑起来。
所以针对每个springboot服务,我们需要对tomcat的一些参数进行优化,以下是楼主项目组优化的tomcat参数配置,供大家参考。
tomcat参数说明:
maxThreads,acceptCount参数应用场景
场景一
场景二
场景三
maxThreads调优
一般说服务器性能要从两个方面说起:
1、cpu计算型指标
2、io密集型指标
所以大部分情况下,tomcat处理io型请求比较多,比如常见的连数据库查询数据进行接口调用。
另外,要考虑tomcat的并发请求量大的情况下,对于服务器系统参数优化,如虚拟机内存设置和linux的open file限制。
maxThreads设置多大合适?
我们知道线程过多,会导致cpu在线程切换时消耗的时间随着线程数量的增加越来越大;线程太少,服务器的请求响应吞吐量会急剧下降,所以maxThreads的配置绝对不是越大越好。
实际情况是设置maxThreads大小没有最优解,要根据具体的服务器配置,实际的应用场景不断的调整和优化。
acceptCount设置多大合适?
尽量与maxThreads的大小保持一致 , 这个值应该是主要根据应用的访问峰值与平均值来权衡配置的。
当使用URL进行路由时,则需要对zuulhostconnect-timeout-millis和zuulhostsocket-timeout-millis参数控制超时时间。
请求连接的超时时间
请求处理的超时时间
对所有 *** 作请求都进行重试
对当前实例的重试次数,针对同一个服务实例,最大重试次数(不包括首次调用)
对下个实例的重试次数,针同其它的服务实例,最大重试次数(不包括首次server)
注意Hystrix断路器的超时时间需要大于ribbon的超时时间,不然不会触发重试
Feign和Ribbon在整合了Hystrix后,首次调用失败的问题?
目前楼主的强烈做法是: 禁用Hystrix的超时时间,设为false
还有一种是官方提倡的是 设置超时时间。
在实际的项目中亲测,这种方式也有不好的地方, 如请求时间超过5s会出现请求数据时有时无的情况 ,给用户的感觉是 系统不稳定,要求整改 。
另外,禁用hystrix,官方不推荐 。
hystrix超时设置原则
问题:一个> 在使用云原生的很多微服务中,比较小规模的可能直接依靠云服务中的负载均衡器进行内部域名与服务映射,通过 健康 检查接口判断实例 健康 状态,然后直接使用 OpenFeign 生成对应域名的 Feign Client。Spring Cloud 生态中,对 OpenFeign 进行了封装,其中的 Feign Client 的各个组件,也是做了一定的定制化,可以实现在 OpenFeign Client 中集成服务发现与负载均衡。在此基础上,我们还结合了 Resilience4J 组件,实现了微服务实例级别的线程隔离,微服务方法级别的断路器以及重试。 我们先来分析下 Spring Cloud OpenFeign Spring Cloud 中的任何组件,都是基于 Spring Boot 而实现的。由于 Spring Boot 中已经有了 > (一款免费开源的JAVA互联网云快速开发平台)微服务分布式代码生成的敏捷开发系统架构。项目代码简洁,注释丰富,上手容易,还同时集中分布式、微服务,同时包含许多基础模块和监控、服务模块。 演示版地址:> API网关的出现的原因是微服务架构的出现,不同的微服务一般有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成完成一个业务需求,如果让客户端直接与各个微服务通信,会出现以下的问题。 以上的问题可以借助API网关来解决。API网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过API网关这一层。也就是说,API网关可以完成安全、性能、监控等功能,而服务提供者可以专门的完成具体的业务逻辑。 在生产环境中,一般需要部署高可用的API网关集群来避免单点故障,这里有两种部署方案。(以Zuul举例) 这种情况是比较简单的,即多个Zuul客户端注册到Eureka Server上,就可以实现Zuul的高可用。Zuul客户端会从Eureka Server查询Zuul Server列表,然后使用负载均衡组件(Ribbon)请求Zuul集群。 假如我们的客户端是手机APP,那么是客户端是不能注册到Eureka Server上。这种情况下,我们可以使用额外的负载均衡器来实现Zuul的高可用,例如Nginx,F5等。 相关nginx请参考: nginx从入门到精(fang)通(qi) 客户端将请求发送到负载均衡器,负载均衡器将请求转发到其代理的其中一个Zuul节点上。这样就实现了Zuul节点的高可用。 API网关性能分析
以上就是关于spring cloud sleuth 和 zipkin 链路跟踪全部的内容,包括:spring cloud sleuth 和 zipkin 链路跟踪、springcloud基于consul的ttl健康检查的源码分析、生产级基于SpringCloud微服务架构性能优化实战,建议收藏等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)