阿里云Kubernetes SpringCloud 实践进行时(6): 熔断器聚合监控

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 讲述了在阿里云Kubernetes容器服务基础之上,如何快速搭建基于Spring Cloud的微服务架构中的基础设施之熔断器聚合监控Hystrix Turbine。

简介

为了更好地支撑日益增长的庞大业务量,我们常常需要把服务进行整合、拆分,使我们的服务不仅能通过集群部署抵挡流量的冲击,又能根据业务在其上进行灵活的扩展。随着分布式的普及、服务的快速增长与云计算技术的进步,微服务架构也因其特有的优势而备受关注。微服务架构的本质,是把整体的业务拆分成很多有特定明确功能的服务,通过很多分散的小服务之间的配合,去解决更大,更复杂的问题。对被拆分后的服务进行分类和管理,彼此之间使用统一的接口来进行交互。

本系列讲述了在阿里云Kubernetes容器服务基础之上,如何快速搭建基于Spring Cloud的微服务架构中的基础设施:

本文是系列中的最后一篇,着重介绍熔断器聚合监控Hystrix Turbine。

在复杂的分布式系统中,相同服务的节点经常需要部署上百甚至上千个,很多时候,运维人员希望能够把相同服务的节点状态以一个整体集群的形式展现出来,这样可以更好的把握整个系统的状态。 为此,Netflix提供了一个开源项目(Turbine)来提供把多个hystrix.stream的内容聚合为一个数据源供Dashboard展示。

本文章系列中的前一篇已经介绍了单个应用的熔断监控。在实际生产环境中,一个系统往往会包括若干个应用。看单个的Hystrix Dashboard的数据并没有什么多大的价值,要想看这个系统的Hystrix Dashboard数据就需要用到Hystrix Turbine。

Hystrix Turbine将每个服务Hystrix Dashboard数据进行了整合。

下面讲述一下在阿里云Kubernetes容器服务基础之上,如何快速搭建一套熔断器聚合监控Hystrix Turbine。

准备Kubernetes环境

阿里云容器服务Kubernetes 1.9.3目前已经上线,可以通过容器服务管理控制台非常方便地快速创建 Kubernetes 集群。具体过程可以参考创建Kubernetes集群

体验通过应用目录简便部署

点击左侧的应用目录,在右侧选中ack-springcloud-turbine,如下:

图片.png

点击参数, 可以通过修改参数配置进行定制化,如下所示:

turbine:
  appConfig: sampleservice,sampleservice2
  aggregator:
    clusterConfig: default
  clusterNameExpression: new String("default")
  combine-host-port:  true   

eureka:
  client:
    enabled: true
    serviceUrl:
      defaultZone: http://localhost:8761/eureka

其中,

  • turbine.appConfig 配置Eureka中的serviceId列表,表明监控哪些服务;
  • turbine.aggregator.clusterConfig 指定聚合哪些集群,多个使用","分割,默认为default。可使用http://.../turbine.stream?cluster={clusterConfig之一}访问;
  • turbine.clusterNameExpression 参数指定了集群名称为 default,当我们服务数量非常多的时候,可以启动多个 Turbine 服务来构建不同的聚合集群,而该参数可以用来区分这些不同的聚合集群,同时该参数值可以在 Hystrix 仪表盘中用来定位不同的聚合集群,只需要在 Hystrix Stream 的 URL 中通过 cluster 参数来指定;
  • turbine.combine-host-port 参数设置为true,可以让同一主机上的服务通过主机名与端口号的组合来进行区分,默认情况下会以 host 来区分不同的服务,这会使得在本地调试的时候,本机上的不同服务聚合成一个服务来统计;
  • eureka.client.enabled 参数设置为true;
  • eureka.client.serviceUrl.defaultZone 参数设置为Eureka Server的地址;

修改之后,在右侧选择对应的集群、命名空间,指定发布名称,然后点击部署。
几分钟之后,一套熔断器聚合监控Hystrix Turbine实例就可以创建出来。

体验Hystrix Turbine

点击左侧的服务,在右侧点击刚创建的Hystrix Turbine服务提供的访问地址,如下所示:

图片.png

Hystrix的主要作用是会采集每一个HystrixCommand的信息指标,把每一个断路器的信息指标显示的Hystrix仪表盘上。

与访问单个应用的熔断监控Hystrix Dashboard类似,运行Hystrix仪表板需要在spring boot主类上标注@EnableTurbine, 来提供把多个hystrix.stream的内容聚合为一个数据源供Dashboard展示。然后访问/hystrix查看仪表盘,在hystrix客户端应用使用/hystrix.stream监控。

这样能够把相同服务的节点状态以一个整体集群的形式展现出来,可以更好的把握整个系统的状态。

点击服务地址,可以访问到如下的Hystrix Turbine Dashboard,与访问单个应用的熔断监控Hystrix Dashboard界面一样,不同的是输入的是 http://.../turbine.stream?cluster={clusterConfig之一}

图片.png

开发微服务并集成Hystrix Turbine

单个应用的熔断监控在前一篇文章中已经介绍,本节中只会重点关注多应用的聚合。

在使用Spring Boot添加依赖时,需要注意spring-boot-starter-actuator,否则就不能访问hystrix的一些endpoint,如:

  • 提供hystrix 监控界面的http://{ip}:{port}/hystrix
  • 以及返回流式数据的API: http://{ip}:{port}/turbine.stream 等。
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-turbine</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-netflix-turbine</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

发布示例服务,代码具体参阅: https://github.com/AliyunContainerService/spring-cloud-k8s-sample/tree/master/sample-service-hystrix-turbine

对应的Helm Chart代码具体参阅: https://github.com/AliyunContainerService/spring-cloud-k8s-sample/tree/master/helm-sampleservice-hystrixturbine

确保服务项目正常启动之后,在命令行中使用ab多次并发访问: ab -n 10000 -c 10 ....., 如下所示:

图片.png

图片.png

访问http://{ip-address}:{port}/turbine.stream,可以看到如下所示的调用情况:

图片.png

打开Hystrix Dashboad仪表板界面,输入调用服务的地址,如 http://localhost:{port}/turbine.stream,输入Title名称。

随着API服务被调用,仪表板页面会随时刷新熔断情况相关数据,如下所示:

图片.png

这时候,将看到针对服务sampleservice1-hystrixturbine、sampleservice2-hystrixturbine的聚合监控数据。因为这2个服务都有2个对应的实例在运行,所以Hystrix Dashboard中显示的Hosts值为聚合后的值即4。

总结

我们可以利用阿里云Kubernetes容器服务,快速搭建一套分布式弹性服务与容错处理框架Hystrix实例系统,为应用引入和配置Hystrix服务。欢迎大家使用阿里云上的容器服务,快速搭建熔断器聚合监控实例系统Hystrix Turbine,比较简单地集成到自己项目的微服务开发中。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
Arthas 弹性计算 运维
阿里云ECS监控服务
阿里云ECS监控服务
404 2
|
1月前
|
SQL 分布式计算 关系型数据库
阿里云E-MapReduce Trino专属集群外连引擎及权限控制踩坑实践
本文以云厂商售后技术支持的角度,从客户的需求出发,对于阿里云EMR-Trino集群的选型,外连多引擎的场景、Ldap以及Kerberos鉴权等问题进行了简要的实践和记录,模拟客户已有的业务场景,满足客户需求的同时对过程中的问题点进行解决、记录和分析,包括但不限于Mysql、ODPS、Hive connector的配置,Hive、Delta及Hudi等不同表格式读取的兼容,aws s3、阿里云 oss协议访问异常的解决等。
|
1月前
|
缓存 Java API
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
|
1月前
|
前端开发 微服务 容器
springcloud - 使用knife4j聚合微服务接口文档
springcloud - 使用knife4j聚合微服务接口文档
springcloud - 使用knife4j聚合微服务接口文档
|
30天前
|
SQL 存储 API
阿里云实时计算Flink的产品化思考与实践【下】
本文整理自阿里云高级产品专家黄鹏程和阿里云技术专家陈婧敏在 FFA 2023 平台建设专场中的分享。
110835 99
阿里云实时计算Flink的产品化思考与实践【下】
|
2天前
|
负载均衡 算法
SpringCloud&Ribbon负载均衡原理与实践
SpringCloud&Ribbon负载均衡原理与实践
10 3
|
26天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
18 0
|
1月前
|
弹性计算 网络协议 关系型数据库
网络技术基础阿里云实验——企业级云上网络构建实践
实验地址:&lt;https://developer.aliyun.com/adc/scenario/65e54c7876324bbe9e1fb18665719179&gt; 本文档指导在阿里云上构建跨地域的网络环境,涉及杭州和北京两个地域。任务包括创建VPC、交换机、ECS实例,配置VPC对等连接,以及设置安全组和网络ACL规则以实现特定服务间的互访。例如,允许北京的研发服务器ECS-DEV访问杭州的文件服务器ECS-FS的SSH服务,ECS-FS访问ECS-WEB01的SSH服务,ECS-WEB01访问ECS-DB01的MySQL服务,并确保ECS-WEB03对外提供HTTP服务。
|
1月前
|
云安全 人工智能 安全
|
1月前
|
弹性计算 算法 应用服务中间件
倚天使用|Nginx性能高27%,性价比1.5倍,基于阿里云倚天ECS的Web server实践
倚天710构建的ECS产品,基于云原生独立物理核、大cache,结合CIPU新架构,倚天ECS在Nginx场景下,具备强大的性能优势。相对典型x86,Http长连接场景性能收益27%,开启gzip压缩时性能收益达到74%。 同时阿里云G8y实例售价比G7实例低23%,是Web Server最佳选择。

相关产品

  • 容器服务Kubernetes版