Turbine-阿里云开发者社区

开发者社区> 李子捌> 正文

Turbine

简介: Hystrix Dashboard虽然好用,但是它有一个缺点:一个Hystrix Dashboard只能收集一个微服务的Hystrix流。也就是说对于每个微服务,我们都需要开启一个Hystrix Dashboard来监控其健康情况。可以看到如下Hystrix Dashboard只能输入一个actuator端点地址。
+关注继续查看

1、简介

Hystrix Dashboard虽然好用,但是它有一个缺点:一个Hystrix Dashboard只能收集一个微服务的Hystrix流。也就是说对于每个微服务,我们都需要开启一个Hystrix Dashboard来监控其健康情况。可以看到如下Hystrix Dashboard只能输入一个actuator端点地址。

image

这能忍?反正我是忍不了。

image

忍不了我们就可以使用Turbine;Netfilx的Turbine项目,提供了将多个微服务的Hystrix流数据聚合到一个流中,并且通过一个Hystrix Dashboard进行展示,这样就可以很nice的同时监控多个微服务的健康状况啦!

Turbine项目的大致架构图如下所示:

image

没有Turbine之前,每个微服务都需要开启一个Hystrix Dashboard页面来监控当前微服务的健康情况,有了Turbine之后,多个微服务的信息先通过Turbine进行聚合,再统一在一个Hystrix Dashboard页面展示。

2、正文

2.1 快速搭建

服务列表:

我这里一共搭建了六个服务,其中eureka-server为注册中心,turbine-server为turbine服务,hystrix-dashboard-server为hystrix-dashboard服务(这些服务如果有需要你也可以在一个服务中启动),user-server、order-server、message-server三个服务是受hystrix保护的服务。

<modules>

  <module>eureka-server</module>

  <module>turbine-server</module>

  <module>hystrix-dashboard-server</module>

  <module>user-server</module>

  <module>order-server</module>

  <module>message-server</module>

</modules>

服务依赖

所有的依赖和版本均在下面,自行在指定服务中选择需要的依赖

<parent>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-parent</artifactId>

  <version>2.3.4.RELEASE</version>

</parent>


<properties>

  <spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>

</properties>


<dependencies>

  <!--web-->

  <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

  </dependency>

  <!--actuator-->

  <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-actuator</artifactId>

  </dependency>

  <!--eureka server-->

  <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>

  </dependency>

  <!--eureka client-->

  <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

  </dependency>

  <!--hystrix-->

  <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>

  </dependency>

  <!--turbine-->

  <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-netflix-turbine</artifactId>

  </dependency>

  <!--hystrix-dashboard-->

  <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>

  </dependency>

</dependencies>



<dependencyManagement>

  <dependencies>

    <dependency>

      <groupId>org.springframework.cloud</groupId>

      <artifactId>spring-cloud-dependencies</artifactId>

      <version>${spring-cloud.version}</version>

      <type>pom</type>

      <scope>import</scope>

    </dependency>

  </dependencies>

</dependencyManagement>

eureka-server服务搭建:

application.yml配置文件

server:

  port: 4010


spring:

  application:

    name: eureka-server


eureka:

  instance:

    hostname: localhost

  client:

    register-with-eureka: false

    fetch-registry: false

    service-url:

      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka

服务启动类

@SpringBootApplication

@EnableEurekaServer

public class EurekaServerApp {


    public static void main(String[] args) {

        SpringApplication.run(EurekaServerApp.class, args);

    }


}

user-server、order-server、message-server服务搭建:

user-server服务application.yml配置文件(其他两个相似)

server:

  port: 22222


spring:

  application:

    name: user-server


eureka:

  client:

    service-url:

      defaultZone: http://localhost:4010/eureka


## 开启hystrix.stream端点

management:

  endpoints:

    web:

      exposure:

        include: 'hystrix.stream'

user-server服务启动类(其他两个相似)

@SpringBootApplication

@EnableEurekaClient

// 开启Hystrix

@EnableHystrix

public class UserServerApp {


    public static void main(String[] args) {

        SpringApplication.run(UserServerApp.class, args);

    }


}

user-server编写受hystrix保护控制器(其他两个相似)

@RestController

@RequestMapping(value = "/user")

public class UserController {


    @GetMapping

    @HystrixCommand(fallbackMethod = "fallback")

    public String userDemo() {

        return "user-98";

    }


    // 写两个方法是为了演示方法名称不同,hystrix dashboard会创建不同的circuit

    @GetMapping("/demo1")

    @HystrixCommand(fallbackMethod = "fallback")

    public String userDemo1() {

        return "user-98";

    }


    private String fallback() {

        return "user-NaN";

    }


}

turbine-server服务搭建:

application.yml配置文件

server:

  port: 11111


spring:

  application:

    name: turbine-server


eureka:

  client:

    service-url:

      defaultZone: http://localhost:4010/eureka


turbine:

  ## eureka中服务名称列表 

  app-config: order-server,user-server,message-server

  ## eureka集群名称,默认为default

  cluster-name-expression: "'default'"

  ## 开启主机+端口组合聚合服务,默认情况下turbine会将统一主机下的服务聚合成一个服务来统计

  combine-host-port: true

启动类,添加@EnableTurbine启动turbine

@SpringBootApplication

// 开启turbine

@EnableTurbine

public class TurbineServerApp {


    public static void main(String[] args) {

        SpringApplication.run(TurbineServerApp.class, args);

    }


}


hystrix-dashboard-server服务搭建:

application.yml配置文件

server:

  port: 55555


eureka:

  client:

    service-url:

      defaultZone: http://localhost:4010/eureka

    ## 不注册  

    register-with-eureka: false

启动类,添加@EnableHystrixDashboard启动HystrixDashboard

@SpringBootApplication

@EnableHystrixDashboard

public class HystrixDashboardServerApp {


    public static void main(String[] args) {

        SpringApplication.run(HystrixDashboardServerApp.class, args);

    }


}


2.2 服务启动

服务启动应先启动注册中心eureka-server再启动user-server、order-server、message-server服务,最后启动turbine-server和hystrix-dashboard-server。

启动完成之后,先查看eureka-server注册中心上服务是否注册正常

http://localhost:4010/

image

之后访问hystrix-dashboard-server服务的hystrix端点,确保看到如下hystrix dashboard界面

http://localhost:55555/hystrix

image

在hystrix dashboard中输入turbine-server提供的turbine.stream端点

http://localhost:11111/turbine.stream

image

初始进入的时候由于各个受hystrix保护的方法并未调用,因此未上报任何数据,所以需要调用各个接口触发数据上报。

image

之后看到如下界面,说明服务启动成功,整个监控服务整合完毕

image


2.3 注意事项

hystrix dashboard中展示的circuit数据,会根据方法名来创建,因此不管是不是同一个服务中,只要受hystrix保护的方法,如果方法名相同,将会被聚合到一起展示,这里指的注意哦!

image

此外不要理解成一个circuit会对应一个thread pools

  • circuit的个数与方法名个数相同
  • thread pools每一个受hystrix保护的方法所在类会创建一个

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10080 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
2962 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
11614 0
使用SSH远程登录阿里云ECS服务器
远程连接服务器以及配置环境
2511 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10883 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
7496 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7365 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4504 0
+关注
李子捌
简介: CSDN优秀作者、华为云专家 领域: Java框架、并发编程、分布式、微服务、Redis、HarmonyOS、中间件等技术
240
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载