阿里云Kubernetes SpringCloud 实践进行时(5): 弹性服务与容错处理

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 讲述了在阿里云Kubernetes容器服务基础之上,如何快速搭建基于Spring Cloud的微服务架构中的基础设施之分布式弹性服务与容错处理框架Hystrix及其监控仪表板Hystrix Dashboard。

简介

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

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

本文是系列中的第五篇,着重介绍分布式弹性服务与容错处理框架Hystrix及其监控仪表板Hystrix Dashboard。

在复杂的分布式 架构的应用程序有很多的依赖,都会不可避免地在某些时候失败。高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险。

Hystrix 是Netflix开源的一个针对分布式系统的延迟和容错库,由Java写成。

据一个实际系统的故障预测统计,一个依赖30个子服务的系统,由于各种可能的故障因素(如网络抖动等),每个服务基本可以保证99.99%可用。99.99%的30次方约等于99.7%。 这就意味着一亿次请求会有0.3% * 100,000,000 = 300000次失败。换算成时间大约每月有2个小时服务不稳定。

如上所述,随着服务依赖数量的变多,服务不稳定的概率会成指数性提高。

弹性服务与故障处理

弹性服务与容错处理的本质就是指使用命令模式(如HystrixCommand)包装依赖调用逻辑,每个命令在单独线程中/信号授权下执行。

图片.png

Hystrix主要从以下几个方面进行架构设计:

  • 弹性服务

    • Hystrix可以为分布式服务提供弹性保护,通过命令模式封装调用,来实现弹性保护,继承 HystrixCommand并且实现run方法,就完成了最简单的封装。
    • 实现getFallBack方法可以为熔断或者异常提供后备处理方法。
  • 服务降级

    • 提供熔断器组件,可以自动运行或手动调用,停止当前依赖一段时间(10秒),熔断器默认 错误 率阈值为50%,超过将自动运行。
  • 线程池/信号隔离

    • 为每个依赖提供一个小的线程池(或信号),如果线程池已满调用将被立即拒绝,默认不采用排队.加速失败判定时间。
  • 快速解决依赖隔离

    • 可配置依赖调用 超时 时间,超时时间一般设为比99.5%平均时间略高即可.当调用超时时,直接返回或执行fallback逻辑。

下面讲述一下在阿里云Kubernetes容器服务基础之上,如何快速搭建一套分布式弹性服务与容错处理框架Hystrix及其监控仪表板。

准备Kubernetes环境

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

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

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

图片.png

点击参数, 可以通过修改参数配置进行定制化。修改之后,在右侧选择对应的集群、命名空间,指定发布名称,然后点击部署。

图片.png

几分钟之后,一个挂载了监控仪表板的弹性服务与容错处理框架Hystrix实例就可以创建出来。

体验Hystrix Dashboard

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

图片.png

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

运行Hystrix仪表板需要在spring boot主类上标注@EnableHystrixDashboard。然后访问/hystrix查看仪表盘,在hystrix客户端应用使用/hystrix.stream监控。

点击服务地址,可以访问到如下的Hystrix Dashboard:

图片.png

开发微服务并集成Hystrix

本文只介绍单个应用的熔断监控,多应用的聚合将会在下一篇文章中重点介绍。

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

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

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

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

图片.png

图片.png

打开Hystrix Dashboad仪表板界面,输入调用服务的地址,如 http://{ip-address}:{port}/hystrix.stream,输入Title名称,就可以看到如下所示的调用情况:

图片.png

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

图片.png

总结

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4天前
|
消息中间件 存储 Java
SpringCloud基础9——服务异步通信-高级篇
消息可靠性、死信交换机、惰性队列、MQ集群
SpringCloud基础9——服务异步通信-高级篇
|
10天前
|
人工智能 Prometheus 监控
使用 NVIDIA NIM 在阿里云容器服务(ACK)中加速 LLM 推理
本文介绍了在阿里云容器服务 ACK 上部署 NVIDIA NIM,结合云原生 AI 套件和 KServe 快速构建高性能模型推理服务的方法。通过阿里云 Prometheus 和 Grafana 实现实时监控,并基于排队请求数配置弹性扩缩容策略,提升服务稳定性和效率。文章提供了详细的部署步骤和示例,帮助读者快速搭建和优化模型推理服务。
60 7
使用 NVIDIA NIM 在阿里云容器服务(ACK)中加速 LLM 推理
|
12天前
|
人工智能 Prometheus 监控
使用NVIDIA NIM在阿里云ACK中加速LLM推理
介绍在阿里云ACK集群上结合AI套件能力快速部署NVIDIA NIM模型推理服务,同时提供全面的监控指标和实现弹性伸缩。
使用NVIDIA NIM在阿里云ACK中加速LLM推理
|
14天前
|
Kubernetes 网络虚拟化 Docker
K8S镜像下载报错解决方案(使用阿里云镜像去下载kubeadm需要的镜像文件)
文章提供了一个解决方案,用于在无法直接访问Google镜像仓库的情况下,通过使用阿里云镜像来下载kubeadm所需的Kubernetes镜像。
37 3
K8S镜像下载报错解决方案(使用阿里云镜像去下载kubeadm需要的镜像文件)
|
12天前
|
Cloud Native 持续交付 Docker
云原生技术实践:Docker容器化部署教程
【9月更文挑战第4天】本文将引导你了解如何利用Docker这一云原生技术的核心工具,实现应用的容器化部署。文章不仅提供了详细的步骤和代码示例,还深入探讨了云原生技术背后的哲学,帮助你理解为何容器化在现代软件开发中变得如此重要,并指导你如何在实际操作中运用这些知识。
|
17天前
|
运维 Kubernetes 监控
自动化运维:使用Python脚本实现系统监控云原生技术实践:Kubernetes在现代应用部署中的角色
【8月更文挑战第31天】在现代IT运维管理中,自动化已成为提高效率和准确性的关键。本文将通过一个Python脚本示例,展示如何实现对服务器的自动监控,包括CPU使用率、内存占用以及磁盘空间的实时监测。这不仅帮助运维人员快速定位问题,也减轻了日常监控工作的负担。文章以通俗易懂的语言,逐步引导读者理解并实践自动化监控的设置过程。 【8月更文挑战第31天】本文旨在探索云原生技术的核心—Kubernetes,如何革新现代应用的开发与部署。通过浅显易懂的语言和实例,我们将一窥Kubernetes的强大功能及其对DevOps文化的影响。你将学会如何利用Kubernetes进行容器编排,以及它如何帮助你的
|
17天前
|
运维 Kubernetes Cloud Native
拥抱云原生:Kubernetes 在现代应用部署中的实践
【8月更文挑战第31天】在数字化转型的浪潮中,云原生技术成为推动企业创新和效率提升的关键力量。本文将深入探讨如何利用 Kubernetes,这一强大的容器编排工具,来部署和管理现代应用。我们将从基础架构搭建开始,一步步引导您配置集群,并通过实际代码示例演示如何部署一个简单的应用。无论您是云原生新手还是希望深化理解,这篇文章都将为您提供实操经验和理论知识的融合之旅。
|
17天前
|
Kubernetes Cloud Native 应用服务中间件
云原生技术入门与实践:Kubernetes的简易部署
【8月更文挑战第31天】云原生技术已成为现代软件部署的黄金标准,而Kubernetes作为其核心组件之一,在容器编排领域独领风骚。本文将引导您通过简单的步骤,快速部署一个Kubernetes集群,并运行一个简单的应用,让您轻松迈入云原生的世界。
|
17天前
|
Kubernetes Cloud Native 应用服务中间件
云原生入门:Kubernetes 和容器化技术的实践之旅
【8月更文挑战第31天】 在这篇文章中,我们将踏上一场探索云原生世界的旅程。我们将从基础的容器化技术讲起,逐步深入到Kubernetes这个强大的容器编排工具。文章会通过一个实际的例子,带领大家了解如何将一个简单的应用容器化并在Kubernetes集群上运行起来。无论你是云原生领域的新手,还是希望巩固知识的开发者,这篇文章都会为你提供一次实操的机会,让你对云原生有一个更加直观的认识。
|
17天前
|
Cloud Native 云计算 开发者
云原生技术实践:Docker容器化部署示例
【8月更文挑战第31天】本文通过深入浅出的方式,介绍了如何在云计算时代利用Docker容器技术实现应用的快速部署和高效管理。文章不仅解释了Docker的基本概念和优势,还提供了详细的操作步骤和代码示例,帮助初学者轻松入门。让我们一起探索云原生的世界,解锁应用部署的新姿势!

相关产品

  • 容器服务Kubernetes版