2.7 Spring Cloud 微服务 API 的 Hystrix 熔断限流降级| 学习笔记

简介: 快速学习 2.7 Spring Cloud 微服务 API 的 Hystrix 熔断限流降级。

开发者学堂课程【Spring Cloud 微服务架构设计与开发实战 2.7 Spring Cloud 微服务 API 的 Hystrix 熔断限流降级】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/60/detail/1090


2.7 Spring Cloud 微服务 API 的 Hystrix 熔断限流降级

 

内容简介

一、Java Spring Cloud 熔断限流

二、Java Spring Cloud 熔断限流实战

三、总结

 

本节课继续讲解 Spring Cloud 微服务 Java,设计与实战系列课程,主要是学习如何熔断降级和限流。

上节课讲过 Hystrix 做启动监控面板并进行数据的采集,也讲到了一些在实战中所遇到的“坑”,在2·3版本后在默认的安全性方面做了加强,比如:不能私自请求监控隧源,是需要经过特殊的商务设置,需要允许监控面板链接某个隧源才行,此参数在当时已经进行过演示。

 

一、Java Spring Cloud 熔断限流

1、熔断是对于高频发系统,为了保证高可用时采用的重要措施。

(1)详解:

拿淘宝的双十一举例,xxx如果做了一个高频发系统,在服务器集群理论上,是支持每秒一万的变化,在双十一时,如果流量超过一万将近两万时,xxx并不希望系统直接瘫痪或服务器全部崩溃,此时应该做保护措施,这种保护措施指的是,带保险丝在照明系统里安装了很重要的安全开关;起到的作用是,在电路超负荷运行时,会自动跳匝的安全措施,这个概念可以直接引用到 Spring Cloud 里。

(2)如果xxx关注过其他分布式框架,阿里巴巴在早期已经实现了熔断和限流机制,这种现象在淘宝双十一时体现的比较明显,xxx对之前参加的双十一活动还有印象的话,在当时淘宝的服务器比较卡顿,京东也是如此。为什么会出现这种现象?因为这些电商公司在早期没有经历过如此高规模的变化流量,在12306火车网站也一样,现在的限流不会让服务器瘫痪,相比瘫痪时xxx可以去处理其中一半的请求,这种场景在生活中经常看到,比如在上海实行的高峰时间限行,这些都是限流措施,限流措施是施剥离一些请求,并保护服务器,使服务器能够熟悉并以较低的并发,来进行正常的处理。

2Netflix Hystrix

1.Netflix 发布了 Hystrix 熔断器框架,保护系统

2.通过控制那些访问远程系统、服务和第三方库的节点

3.从而对延迟和故障提供更强大的容错能力

4.Fallback 灾备操作,出错以后返回的值

5. Hystrix 中,主要通过线程池来实现资源隔离

6. Hystrix 的信号模式(Semaphores)来隔离资源

7.Hystrix 支持 dashboard 控制面板监控信息

8. Feign 可以和 Hystrix 结合使用,也可以独立使用

9. Hystrix 使用了命令模式,对命令对象抽象了两个抽象

类似: Hystrix Command 和 Hystrix Observable Command 。

详解:

有一技术叫 HystrixHystrix 有控制面板、监控面板和采集数据,数据的采集和熔断、降级限流有关,熔断之后,便可降级,比如之前的并发有一千,现在可以降到五百,起到了限流保护的作用。这是最重要的工作之一,前提是xxx需要监控到请求数据。前期也需要衡量标准,要知道并发能达到多少,比如在并发达到一万,可以自动中断,这种措施在 Hystrix 里已经提供。

在底层 Hystrix 本身喜欢各个工作做到自动隔离工作,因为每个服务器后台的压力不一样,在订单服务里有一百台服务器,但在登录服务器时,或许只有五台,自动服务有五十台,这个差距较大,这是微服务很重要的特点,每个服务器都有差异,xxx才会搞拆分性质。

3、断路器模式

image.png

详解:

一般流动性放在代理层当中做,如果没有代理,也可以在电路中,都可以实现类似机制。

 

二、Java Spring Cloud 熔断限流实战

1、实战直接给xxx看几个 Hystrix 核心参数

1)请求最大次数

circuit Breaker. request Volume Threshold(默认值:20个请求)

(2滚动窗口

metrics .rolling Stats. time ln Milliseconds(默认值:10秒)

(3)失败百分比

circuit Breaker. error Threshold Percentage(默认值:>50%)

详解:

xxx可以基于什么策略,来进行限流,比如基于最高并发,最大并发量是五万,此时可以进行削峰;如果出错较多,可以断掉请求,再发请求便会产生更多错误,如当出错率达到百分之九十时,启动自动熔断;当调动时间超过十秒,就不再进行请求调动,因为调动链太长,对客户端没有太大意义,调动链太长,某一环节是存在一定错误的,例如数据库、检索或者是缓存检索出现问题,或者是代码出现大面积的阻止请求,都有可以出现问题,这些参数很重要。

2、接下来在昨天的项目基础上进行改变

1希望某个服务接口如果调用超时,能出现熔断;可以在以下代码中直接加入多个助解

代码如下:

// timeout In Milliseconds:设置熔断超时的时间

@HystrixCommand(fallbackMethod = "fallback Method", command Properties ={

@HystrixProperty(name = "execution .isolation. thread. timeout In Mi1liseconds", value = "2000"

})

详解:

改变熔断限流的代码,主要是模拟熔断,xxx以后可以在代理层做,熔断主要是在调用端进行操作的,xxx的调用端是没有任何熔断机制和降低措施。昨天只做了监控,现在需要添加助解的代码。

(2)模拟 fallback 降低方法

代码如下:

//微服务 Fallback 熔断降级

public String fallback Method(){

return "Spring Cloud 微服务 Fallback 熔断降级";

}

详解:

在熔断之后给客户端返回错误信息,或者是日志,有可能是返回另一个结果,告诉用户在几分钟之后再尝试,这样可以把压力往后推,体现的是统计规则,比如统计错误发生数量或接收服务器调动的时间,作为触发条件,可以给出补救措施,给出备胎 fallback 降低方法。可以是独立方法,用于给客户端返回提出信息,还可以打日志和调用一次信息。

3、模拟服务器超过两秒就被驱除

(1)服务1里加 thread sleep(3000

代码如下:

@RequestMapping( " / hello")

public string get order() throws Interrupted Exception {

Thread. sleep( 3000) ;

return "Hello Spring Cloud 1";

}

详解:

指的是休眠三秒,这样设置可以达到触发条件的要求,这样一定能触发熔断降级。一会实战中,把服务1到服务3,三台机器都启动;先启动数据中心、然后启动微服务,再启动调用端,启动一个服务是可以演示的,但是要避免只启动一个服务不能保证真理,有时调用正常。有时候调用不正常;不正常时会熔断,正常时还会返回。比如xxx有订单服务集群,其他服务返回正常,但是返回的服务1却出错。

4、模拟一个集群

(1)集群也可以在指定端口多启动,为了演示方便,此处直接复制的三个项目。在模拟监控时,需要区分是哪家服务器,启动结果是哪个,可以在三个服务器的字符串后面加上1、2、3来区别。现在打开 lo call host:8761里面查看服务是否上限,如图:

image.png

已经有两台服务器了,正常是三个服务器,三个服务器全部显示在页面,其中一号服务器是超时三秒。

(2)接下来启动调用服务,此时不再需要监控,在 lo call host:8761页面刷新等待结果,如图:

image.png

Status 已经出结果,需要经过 lo call host:9002来调用,通过 lo call host:9002/hi 调用不会触发请求,通过 lo call host:9002/test 调用才会触发,因为没有对 hi 进行熔断超时时间的设置。

通过 lo call host:9002/hi 调用结果

Spring Cloud3

通过 lo call host:9002/test 调用结果

Spring Cloud2

Spring Cloud3

Spring Cloud 微服务 Fallback 熔断降级

详解:

在调到 Spring Cloud1 时,触发到了微服务的熔断降级,触发了熔断并降级了备胎方案,这是触发了超时的熔断策略。

 

三、总结

这个过程只放了一个条件,还有几个其他条件,比如最大并发,设置的数字太大;错误比例,能达到百分之九十;控制休眠窗口,过几秒之后在恢复正常,这些都是触发条件,可以放在代码里,或者助解里面。一般使用默认条件会出问题,在正常生产条件下,每个公司的服务变化和发展是不一样的,服务器的配置也是不一样的,所以限流设置要根据业务和架构设置的目标进行灵活调整。主要的目的是为了增加可用性,xxx都希望高频发,但不是什么时候都有高频发,机器的服务器也有自己的天花板或者瓶颈,因此根据实际可以配置保护值,来保护xxx的系统。

下节课会继续讲微服务、代理、安全和机制,xxx有空时可以了解下有哪几个衡量指标和监控指标,所采用的隔离方式是什么,有空可以去看看源码,看如何实现。

相关文章
|
8月前
|
算法 Java 微服务
【SpringCloud(1)】初识微服务架构:创建一个简单的微服务;java与Spring与微服务;初入RestTemplate
微服务架构是What?? 微服务架构是一种架构模式,它提出将单一应用程序划分为一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务允许在其独立的进程中,服务于服务间采用轻量级的通信机制互相协作(通常是Http协议的RESTful API或RPC协议)。 每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建
691 126
|
8月前
|
API 微服务
阿里云微服务引擎 MSE 及 API 网关 2025 年 9 月产品动态
阿里云微服务引擎 MSE 及 API 网关 2025 年 9 月产品动态。
891 69
|
8月前
|
负载均衡 算法 Java
【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
1. 什么是服务治理? SpringCloud封装了Netfix开发的Eureka模块来实现服务治理 在传统pc的远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册
454 0
|
9月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2025 年 9 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
622 142
|
8月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
1324 2
Spring Boot 3.x 微服务架构实战指南
|
8月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
9月前
|
监控 安全 Java
Spring Cloud 微服务治理技术详解与实践指南
本文档全面介绍 Spring Cloud 微服务治理框架的核心组件、架构设计和实践应用。作为 Spring 生态系统中构建分布式系统的标准工具箱,Spring Cloud 提供了一套完整的微服务解决方案,涵盖服务发现、配置管理、负载均衡、熔断器等关键功能。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
552 1
|
API 微服务 定位技术
API和微服务的未来正在建设中
API和微服务的未来正在建设中 API是当今IT行业发展最快,影响业务的技术。借助API,开发人员可以利用其他应用程序中现有计算机程序的功能。自计算机编程第一次开始以来,API已经存在了很长一段时间。
1399 0
|
8月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
9月前
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。