开发者社区> osswangxining> 正文

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

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

相关文章
阿里云SLB漏选“健康检查正常的http状态码”导致url重定向失败问题处理
阿里云SLB健康检测状态码选择不正确,导致nginx url重定向的网站访问失败处理流程。
7914 0
无影云桌面和服务器有什么区别?阿里云无影电脑有什么优势?
阿里云推出无影云桌面,云桌面是一种安全高效的云上桌面服务,一般用于企业办公。云桌面支持快速便捷的桌面环境创建、部署、统一管控与运维。企业选择云桌面无需前期传统硬件投资,云桌面可以快速构建安全、高性能、低成本的企业桌面办公体系。云桌面和传统PC、VDI之间的区别:
20 0
LC3视角:Kubernetes下日志采集、存储与处理技术实践
在Kubernetes服务化、日志处理实时化以及日志集中式存储趋势下,Kubernetes日志处理上也遇到的新挑战,包括:容器动态采集、大流量性能瓶颈、日志路由管理等问题。本文介绍了“Logtail + 日志服务 + 生态”架构,介绍了:Logtail客户端在Kubernetes日志采集场景下的优势;日志服务作为基础设施一站式解决实时读写、HTAP两大日志强需求;日志服务数据的开放性以及与云产品、开源社区相结合,在实时计算、可视化、采集上为用户提供的丰富选择。
13624 0
史上最快! 10小时大数据入门实战(八)- Hadoop 集成 Spring 的使用
目录 https://spring.io/projects/spring-hadoop 1 Spring Hadoop 开发环境搭建及访问 HDFS 文件系统 ...
1341 0
构建在线教育弹性高可用视频处理架构实战
对于负责建设视频处理系统的技术团队而言,这样的业务场景就留给了他们一系列的挑战。
1383 0
[产品商业化]阿里云宣布 Serverless 容器服务 弹性容器实例 ECI 正式商业化
阿里云宣布弹性容器实例 ECI(Elastic Container Instance)正式商业化,ECI 是阿里云践行普惠的云计算理念,将 Serverless 和 Container 技术结合,提供的一款敏捷安全的Serverless容器运行服务。
2540 0
自建Kubernetes集群如何使用弹性容器实例ECI
虚拟节点(Virtual Node)实现了Kubernetes与弹性容器实例ECI的无缝连接,让Kubernetes集群轻松获得极大的弹性能力,而不必受限于集群的节点计算容量。您可以灵活动态的按需创建ECI Pod,免去集群容量规划的麻烦。本文主要介绍虚拟节点和ECI,通过ack-virtual-node组件如何部署虚拟节点及如何创建ECI Pod。
864 0
+关注
osswangxining
王夕宁, 阿里云服务网格ASM技术负责人, 关注Kubernetes/云原生/服务网格等领域。之前曾在IBM中国开发中心工作, 作为架构师和主要开发人员负责或参与了一系列在SOA中间件/云计算等领域的工作, 曾担任中国研发中心专利技术评审主席, 并拥有60多项相关领域的国际技术专利。
53
文章
0
问答
来源圈子
更多
容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级 Kubernetes 容器化应用的全生命周期管理。容器服务 Kubernetes 版简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的 Kubernetes 容器化应用运行环境。
+ 订阅
相关文档: 容器镜像服务 ACR 容器服务 ACK 服务网格 ASM
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载