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有空时可以了解下有哪几个衡量指标和监控指标,所采用的隔离方式是什么,有空可以去看看源码,看如何实现。

相关文章
|
11月前
|
算法 Java 微服务
【SpringCloud(1)】初识微服务架构:创建一个简单的微服务;java与Spring与微服务;初入RestTemplate
微服务架构是What?? 微服务架构是一种架构模式,它提出将单一应用程序划分为一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务允许在其独立的进程中,服务于服务间采用轻量级的通信机制互相协作(通常是Http协议的RESTful API或RPC协议)。 每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建
774 126
|
11月前
|
负载均衡 算法 Java
【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
1. 什么是服务治理? SpringCloud封装了Netfix开发的Eureka模块来实现服务治理 在传统pc的远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册
527 0
|
12月前
|
数据可视化 Java BI
将 Spring 微服务与 BI 工具集成:最佳实践
本文探讨了 Spring 微服务与商业智能(BI)工具集成的潜力与实践。随着微服务架构和数据分析需求的增长,Spring Boot 和 Spring Cloud 提供了构建可扩展、弹性服务的框架,而 BI 工具则增强了数据可视化与实时分析能力。文章介绍了 Spring 微服务的核心概念、BI 工具在企业中的作用,并深入分析了两者集成带来的优势,如实时数据处理、个性化报告、数据聚合与安全保障。同时,文中还总结了集成过程中的最佳实践,包括事件驱动架构、集中配置管理、数据安全控制、模块化设计与持续优化策略,旨在帮助企业构建高效、智能的数据驱动系统。
517 1
将 Spring 微服务与 BI 工具集成:最佳实践
|
12月前
|
存储 安全 Java
管理 Spring 微服务中的分布式会话
在微服务架构中,管理分布式会话是确保用户体验一致性和系统可扩展性的关键挑战。本文探讨了在 Spring 框架下实现分布式会话管理的多种方法,包括集中式会话存储和客户端会话存储(如 Cookie),并分析了它们的优缺点。同时,文章还涵盖了与分布式会话相关的安全考虑,如数据加密、令牌验证、安全 Cookie 政策以及服务间身份验证。此外,文中强调了分布式会话在提升系统可扩展性、增强可用性、实现数据一致性及优化资源利用方面的显著优势。通过合理选择会话管理策略,结合 Spring 提供的强大工具,开发人员可以在保证系统鲁棒性的同时,提供无缝的用户体验。
270 0
|
12月前
|
消息中间件 Java 数据库
Spring 微服务中的数据一致性:最终一致性与强一致性
本文探讨了在Spring微服务中实现数据一致性的策略,重点分析了最终一致性和强一致性的定义、优缺点及适用场景。结合Spring Boot与Spring Cloud框架,介绍了如何根据业务需求选择合适的一致性模型,并提供了实现建议,帮助开发者在分布式系统中确保数据的可靠性与同步性。
695 0
|
12月前
|
监控 Java 数据库
从零学 Dropwizard:手把手搭轻量 Java 微服务,告别 Spring 臃肿
Dropwizard 整合 Jetty、Jersey 等成熟组件,开箱即用,无需复杂配置。轻量高效,启动快,资源占用少,内置监控、健康检查与安全防护,搭配 Docker 部署便捷,是构建生产级 Java 微服务的极简利器。
1134 117
|
11月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
1486 2
Spring Boot 3.x 微服务架构实战指南
|
12月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
7587 2
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
|
11月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
12月前
|
监控 安全 Java
Spring Cloud 微服务治理技术详解与实践指南
本文档全面介绍 Spring Cloud 微服务治理框架的核心组件、架构设计和实践应用。作为 Spring 生态系统中构建分布式系统的标准工具箱,Spring Cloud 提供了一套完整的微服务解决方案,涵盖服务发现、配置管理、负载均衡、熔断器等关键功能。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
664 1