spring微服务监控 spring 微服务
一、微服务监g微SpringCloud微服务开发如何协同
1、服务SpringCloud开发,微服务监g微本地启动多个微服务系统开销大
2、服务同事A启动User服务,微服务监g微同事B也在本地启动User服务。服务那么两个服务都注册到Nacos上,微服务监g微前端同事调试访问A的服务User服务,很容易出现访问到同事B启动的微服务监g微User服务(导致开发混乱,无法debug到自己的服务服务),还要考虑到如果有同事在本地debug服务,微服务监g微也会影响到别的服务同事。
1、微服务监g微在公共机器上启动Nacos服务,服务MySQL,微服务监g微Redis等公共服务,共同使用即可减少本地开销
2、同事A,同事B,都在本地启动Gateway服务,使用公共机器的Nacos服务(例如10.21.81.26:8848)本地 gateway的配置一定要配置ribbon。因为负载均衡,会导致同事A想要访问自己本地启动的User服务,却访问到了同事B启动的User服务,又或者服务器上的User服务(这样无法开发)所以一定要做一些规则,负载均衡本地优先的规则。
效果:只需要本地启动gateway和User服务。由于给gateway里的ribbon配置了优先本地,会先去调用本地的User服务,而不是公共机器或者其他同事的。(就算Feign调用,也是走网关,只要走了本地的网关,就是优先本地)
原理:
Gateway要获取Nacos下发的ip地址和服务名,做动态路由。
Gateway要集成ribbon,做负载均衡。
ribbon还得配置本地优先策略,以免服务冲突。
ip地址要在同一网段,否则无法通讯。
二、SpringCloud--Sleuth日志跟踪(十四)
Spring Cloud Sleuth[sluːθ]是Spring Cloud提供的分布式系统服务链追踪组件,它大量借用了Google的Dapper,Twitter的Zipkin。
场景:
疑问:
在微服务中,通常根据业务模块分服务,项目中前端发起一个请求,后端可能跨几个服务调用才能完成这个请求(如下图)。
如果系统越来越庞大,服务之间的调用与被调用关系就会变得很复杂,假如一个请求中需要跨几个服务调用,其中一个服务由于网络延迟等原因挂掉了,那么这时候我们需要分析具体哪一个服务出问题了就会显得很困难。Spring Cloud Sleuth服务链路跟踪功能,就可以帮助我们快速的发现错误根源以及监控分析每条请求链路上的性能等等。
Spring Cloud Sleuth是一个在应用中实现日志跟踪的强有力的工具。使用Sleuth库可以应用于计划任务、多线程服务或复杂的Web请求,尤其是在一个由多个服务组成的系统中。当我们在这些应用中来诊断问题时,即使有日志记录也很难判断出一个请求需要将哪些操作关联在一起。
如果想要诊断复杂操作,通常的解决方案是在请求中传递唯一的ID到每个方法来识别日志。而Sleuth可以与日志框架Logback、SLF4J轻松地集成,通过添加独特的标识符来使用日志跟踪和诊断问题。
微服务跟踪(sleuth)其实是一个工具,它在整个分布式系统中能跟踪一个用户请求的过程(包括数据采集,数据传输,数据存储,数据分析,数据可视化),捕获这些跟踪数据,就能构建微服务的整个调用链的视图,这是调试和监控微服务的关键工具。
SpringCloudSleuth有4个特点:
配置应用名称,以便日志输出。
说明:
application name—应用的名称,也就是application.properties中的spring.application.name参数配置的属性。
traceId—为一个请求分配的ID号,用来标识一条请求链路。
spanId—表示一个基本的工作单元,一个请求可以包含多个步骤,每个步骤都拥有自己的spanId。一个请求包含一个TraceId,多个SpanId
export—布尔类型。表示是否要将该信息输出到类似Zipkin这样的聚合器进行收集和展示。
3f575919b0df993a:traceId相同
3f575919b0df993a,05fddf5ed5bbbf59: spanId不同。
Sleuth将traceId传入了异步方法并创建了以新的 spanId,代表这是同一个请求但进入了另一个处理阶段,由一个异步线程来执行。
可以看到Sleuth为每个任务实例都创建一个新的traceId和spanId。
Spring Cloud Sleuth可以应用在各种各样的单一Web应用中。我们可以使用这项技术轻松地为一个请求采集日志,即使请求跨越多个线程。帮助我们在多线程环境下进行清晰的调试,通过识别traceId和spanId来确定每一个操作和操作中的每一步,这样可以减轻我们做日志分析的复杂性。
注:当文件名为logback-spring.xml时不需要配置logging.config
sleuth中的一些术语:
三、spring boot的优点
①良好的基因
因为SpringBoot是伴随着Spring 4.0而生的,boot是引导的意思,也就是它的作用其实就是在于帮助开发者快速的搭建Spring框架,因此SpringBoot继承了Spring优秀的基因,在Spring中开发更为方便快捷。
②简化编码
,比如我们要创建一个 web项目,使用 Spring的朋友都知道,在使用 Spring的时候,需要在 pom文件中添加多个依赖,而 Spring Boot则会帮助开发着快速启动一个 web容器,在 Spring Boot中,我们只需要在 pom文件中添加如下一个 starter-web依赖即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
我们点击进入该依赖后可以看到,Spring Boot这个 starter-web已经包含了多个依赖,包括之前在 Spring工程中需要导入的依赖,我们看一下其中的一部分,如下:
<!--.....省略其他依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.7.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.7.RELEASE</version>
<scope>compile</scope>
</dependency>
由此可以看出,Spring Boot大大简化了我们的编码,我们不用一个个导入依赖,直接一个依赖即可。
③简化配置
Spring虽然使Java EE轻量级框架,但由于其繁琐的配置,一度被人认为是“配置地狱”。各种XML、Annotation配置会让人眼花缭乱,而且配置多的话,如果出错了也很难找出原因。Spring Boot更多的是采用 Java Config的方式,对 Spring进行配置。举个例子:
我新建一个类,但是我不用@Service注解,也就是说,它是个普通的类,那么我们如何使它也成为一个 Bean让 Spring去管理呢?只需要@Configuration和@Bean两个注解即可,如下:
public class TestService{
public String sayHello(){
return"Hello Spring Boot!";
}
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JavaConfig{
@Bean
public TestService getTestService(){
return new TestService();
}
}
@Configuration表示该类是个配置类,@Bean表示该方法返回一个 Bean。这样就把TestService作为 Bean让 Spring去管理了,在其他地方,我们如果需要使用该 Bean,和原来一样,直接使用@Resource注解注入进来即可使用,非常方便。
@Resource private TestService testService;
另外,部署配置方面,原来 Spring有多个 xml和 properties配置,在 Spring Boot中只需要个 application.yml即可。
④简化部署
在使用 Spring时,项目部署时需要我们在服务器上部署 tomcat,然后把项目打成 war包扔到 tomcat里,在使用 Spring Boot后,我们不需要在服务器上去部署 tomcat,因为 Spring Boot内嵌了 tomcat,我们只需要将项目打成 jar包,使用 java-jar xxx.jar一键式启动项目。
另外,也降低对运行环境的基本要求,环境变量中有JDK即可。
⑤简化监控
我们可以引入 spring-boot-start-actuator依赖,直接使用 REST方式来获取进程的运行期性能参数,从而达到监控的目的,比较方便。但是 Spring Boot只是个微框架,没有提供相应的服务发现与注册的配套功能,没有外围监控集成方案,没有外围安全管理方案,所以在微服务架构中,还需要 Spring Cloud来配合一起使用。
参考资料:网络可视化