欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring Cloud Hystrix理解与实践(一):搭建简单监控集群

程序员文章站 2022-04-09 09:20:58
前言 在分布式架构中,所谓的断路器模式是指当某个服务发生故障之后,通过断路器的故障监控,向调用方返回一个错误响应,这样就不会使得线程因调用故障服务被长时间占用不释放,避免故障的继续蔓延。Spring Cloud Hystrix实现了断路器,线程隔离等一系列服务保护功能,它是基于Netflix的开源框 ......

 前言

  在分布式架构中,所谓的断路器模式是指当某个服务发生故障之后,通过断路器的故障监控,向调用方返回一个错误响应,这样就不会使得线程因调用故障服务被长时间占用不释放,避免故障的继续蔓延spring cloud hystrix实现了断路器,线程隔离等一系列服务保护功能,它是基于netflix的开源框架hystrix实现的。

  目的不是介绍hystrix的与原理、及其使用等(有时间也要记录啊),而是通过实战搭建一个简单的监控集群,使用hystrix dashboard仪表盘动态监控展示以此来加深对hystrix的认识与理解,为什么要记录呢?这是因为网上资料甚少(或版本过低,不适用),同时加之书中的spring cloud版本与现在spring boot 2.x差距明显

  本文主要参考《spring cloud 微服务实战》(pdf电子版,需要的朋友可以私聊或评论)

 


 

一、hystrix 仪表盘

1、认识hystrix仪表盘

  hystrixcommand与hystrixobserablecommand实例执行过程中记录的重要信息称之为hystrix仪表盘,以供内部或者外部进行查询使用。spring cloud整合仪表盘组件hystrix dashboard,主要用来实时监控hystrix的各项指标信息,可以帮我们快速发现系统中存在的问题,从而及时地采取应对措施。

  1)加入依赖

  特别注意spring boot 2.x版本引入的hystrix-dashboard依赖,不然可能访问不了http://localhost:port/hystrix仪表盘页面,注解@enablehsytrixdashboard也可能找不到

 <!-- hystrix 容错机制 -->
        <dependency>
            <groupid>org.springframework.cloud</groupid>
            <artifactid>spring-cloud-starter-hystrix</artifactid>
            <version>${spring-cloud-eureka.version}</version>
        </dependency>
        <!-- actuator监控 -->
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-actuator</artifactid>
        </dependency>
        <!-- spring boot 2.x以上版本 spring-cloud-starter-netflix-hystrix-dashboard 仪表盘,
        以下版本则需要spring-cloud-starter-hystrix-dashboard-->
        <dependency>
            <groupid>org.springframework.cloud</groupid>
            <artifactid>spring-cloud-starter-netflix-hystrix-dashboard</artifactid>
            <version>${spring-cloud-eureka.version}</version>
        </dependency> 

  2)添加配置

# 应用实例
spring:
  application:
    name: hystrix-dashboard

server:
  port: 8000

# actuator开放所有端点,spring boot 2.x与1.x不同,具体请查询
management:
  endpoints:
    web:
      exposure:
        include: "*"

  3)增加注解:应用主类加上@enablehsytrixdashboard,启用hystrix dashboard功能。

@enablehystrixdashboard // 开启hystrix仪表盘
@springbootapplication
public class hystrixmonitorapplication {

    public static void main(string[] args) {
        springapplication.run(hystrixmonitorapplication.class, args);
    }

}

  4)访问http://localhost:8000/hystrix界面如下:

          Spring Cloud Hystrix理解与实践(一):搭建简单监控集群

2、监控页面介绍

 

从界面中我们就可以看到hystrix dashboard支持不同的三种监控方式:

  1) 默认的集群监控:通过url http://turbine-hostname:port/turbine.stream

  2) 指定的集群监控:通过url http://turbine-hostname:port/turbine.stream?cluster=[clustername]开启

  3) 单体应用的监控:url http://hystrix-app:port/hystrix.stream开启,实现对具体某个服务实例的监控

   前两者关于集群的监控需要整合turbine才能实现,而对于单体实例节点需要访问实例的/hystrix.stream接口实现,我们自然需要为服务实例添加端点。只需要添加acutator与hystrix依赖,应用主程序类开启断路器@enablecircuitbreaker注解与@enablehystrixdashboard注解即可。

其中的参数:

  1)delay:用来控制服务器上轮询监控信息的延迟时间,默认为2000ms。可以通过该配置该属性降低客户端的网络和cpu消耗。

  2)ttile:对应进入监控后的的标题,如hystrix,则进入监控页面后如下图红框标题

此外,我们在url框输入我们需要监听的某个服务实例/hystrix.stream接口,如http://localhost:8081/hystrix.stream,就可以进入监控页面

 

 

                      Spring Cloud Hystrix理解与实践(一):搭建简单监控集群

监控页面参数介绍:

1) 实心圆与曲线的含义

  实心圆颜色:健康度从绿色、黄色、橙色、红色递减

  实心圆大小:会根绝实例的请求流量发生变化,流量越大实心圆就越大。

  曲线:用来记录2分钟内流量的相对变化,可以通过它来观察流量的上升与下降。

2) 其它的指标参数:鼠标停留会显示相应的说明

          Spring Cloud Hystrix理解与实践(一):搭建简单监控集群

 

 

二、简单监控架构

 

1、监控单实例的架构

  1)架构图

 

         Spring Cloud Hystrix理解与实践(一):搭建简单监控集群

 

  2)过程说明

    • 服务提供者:hello-service,提供一个接口如:http:/hello-server/hello,让消费者通过resttemplate(封装好的http)调用消费
    • 服务消费者:ribbon-consumer,会有ribbon承担负载均衡的作用,分别轮询访问hello-server-1与hello-service-2
    • 注册中心:spring cloud eureka,主要负责服务治理:服务的注册、续约、剔除(更新)等
    • hystrix仪盘表:通过/hystrix.stream接口监控某个服务实例,动态展示仪表盘数据。

  然而现在只针对一个实例来监控,而分布式系统中往往有很多实例,我们就需要利用turbine和hystrix dashboard配置实现对集群的监控

 

2、监控聚合服务

  需要通过turbine来聚合ribbon-consumer-1与服务ribbon-consumer-2成一个服务展示监控信息,并输出到hystrix dashboard中,只显示一张监控图,但是注意hosts的数量为2

                Spring Cloud Hystrix理解与实践(一):搭建简单监控集群

 

  (1)架构图

        Spring Cloud Hystrix理解与实践(一):搭建简单监控集群

  (2)过程说明

    同上述“单实例监控”,不同的是这次服务消费者有ribbon-consumer-1与ribbon-consumer-2两个,通过/turbine.stream接口聚合两个服务实例(实则就是同一个服务不同实例)成一个服务,共同动态展示整个集群的动态数据。对于集群来说关注的是服务集群的高可用性,所以turbine会将相同服务作为整体看待。

 

=======================整理过后,补充代码实例=====================