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

简介: 讲述了在阿里云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,比较简单地集成到自己项目的微服务开发中。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
9月前
|
负载均衡 算法 Java
【SpringCloud(4)】OpenFeign客户端:OpenFeign服务绑定;调用服务接口;Feign和OpenFeign
Feign是一个WebService客户端。使用Feign能让编写WebService客户端更加简单。 它的使用方法是定义一个服务接口然后再上面添加注解。Feign也支持可拔插式的编码器和解码器。SpringCloud对Feign进行了封装,十七支持了SpringMVC标准注解和HttpMessageConverters。 Feign可用于Eureka和Ribbon组合使用以支持负载均衡
980 139
|
12月前
|
运维 Kubernetes 持续交付
ACK One GitOps:让全球化游戏服务持续交付更简单
ACK One GitOps 致力于提供开箱即用的多集群 GitOps 持续交付能力,简化游戏等服务的多集群/多地域统一部署,让您更加专注于业务开发。
|
Java 开发者 微服务
Spring Cloud OpenFeign详解与实践
总结起来说,Spring Cloud OpenFeign提供了一种简单易懂且高效的方式去实现微服务之间通信.它隐藏了许多复杂性,并且允许开发者以声明式方式编写HTTP客户端代码.如果你正在开发基于Spring Cloud 的微服务架构系统,Spring Cloud Open Feign是一个非常好用且强大工具.
896 33
|
前端开发 Java Nacos
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
本文介绍了如何使用Spring Cloud Alibaba 2023.0.0.0技术栈构建微服务网关,以应对微服务架构中流量治理与安全管控的复杂性。通过一个包含鉴权服务、文件服务和主服务的项目,详细讲解了网关的整合与功能开发。首先,通过统一路由配置,将所有请求集中到网关进行管理;其次,实现了限流防刷功能,防止恶意刷接口;最后,添加了登录鉴权机制,确保用户身份验证。整个过程结合Nacos注册中心,确保服务注册与配置管理的高效性。通过这些实践,帮助开发者更好地理解和应用微服务网关。
2553 0
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
1060 17
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
4398 8
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
932 5
|
存储 Kubernetes 网络协议
k8s的无头服务
Headless Service 是一种特殊的 Kubernetes 服务,其 `spec:clusterIP` 设置为 `None`,不会分配 ClusterIP,通过 DNS 解析提供服务发现。与普通服务不同,Headless Service 不提供负载均衡功能,每个 Pod 都有唯一的 DNS 记录,直接映射到其 IP 地址,适用于有状态应用的场景,如与 StatefulSet 一起部署数据库。示例中通过创建 Nginx 的 StatefulSet 和 Headless Service,展示了如何直接访问单个 Pod 并进行内容修改。
572 3
|
存储 Kubernetes Devops
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
336 0
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多