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

相关文章
|
10月前
|
数据可视化 Java BI
将 Spring 微服务与 BI 工具集成:最佳实践
本文探讨了 Spring 微服务与商业智能(BI)工具集成的潜力与实践。随着微服务架构和数据分析需求的增长,Spring Boot 和 Spring Cloud 提供了构建可扩展、弹性服务的框架,而 BI 工具则增强了数据可视化与实时分析能力。文章介绍了 Spring 微服务的核心概念、BI 工具在企业中的作用,并深入分析了两者集成带来的优势,如实时数据处理、个性化报告、数据聚合与安全保障。同时,文中还总结了集成过程中的最佳实践,包括事件驱动架构、集中配置管理、数据安全控制、模块化设计与持续优化策略,旨在帮助企业构建高效、智能的数据驱动系统。
450 1
将 Spring 微服务与 BI 工具集成:最佳实践
|
9月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
10月前
|
Java 数据库 数据安全/隐私保护
Spring 微服务和多租户:处理多个客户端
本文介绍了如何在 Spring Boot 微服务架构中实现多租户。多租户允许单个应用实例为多个客户提供独立服务,尤其适用于 SaaS 应用。文章探讨了多租户的类型、优势与挑战,并详细说明了如何通过 Spring Boot 的灵活配置实现租户隔离、动态租户管理及数据源路由,同时确保数据安全与系统可扩展性。结合微服务的优势,开发者可以构建高效、可维护的多租户系统。
785 127
|
10月前
|
存储 安全 Java
管理 Spring 微服务中的分布式会话
在微服务架构中,管理分布式会话是确保用户体验一致性和系统可扩展性的关键挑战。本文探讨了在 Spring 框架下实现分布式会话管理的多种方法,包括集中式会话存储和客户端会话存储(如 Cookie),并分析了它们的优缺点。同时,文章还涵盖了与分布式会话相关的安全考虑,如数据加密、令牌验证、安全 Cookie 政策以及服务间身份验证。此外,文中强调了分布式会话在提升系统可扩展性、增强可用性、实现数据一致性及优化资源利用方面的显著优势。通过合理选择会话管理策略,结合 Spring 提供的强大工具,开发人员可以在保证系统鲁棒性的同时,提供无缝的用户体验。
209 0
|
10月前
|
消息中间件 Java 数据库
Spring 微服务中的数据一致性:最终一致性与强一致性
本文探讨了在Spring微服务中实现数据一致性的策略,重点分析了最终一致性和强一致性的定义、优缺点及适用场景。结合Spring Boot与Spring Cloud框架,介绍了如何根据业务需求选择合适的一致性模型,并提供了实现建议,帮助开发者在分布式系统中确保数据的可靠性与同步性。
614 0
|
9月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
1356 2
Spring Boot 3.x 微服务架构实战指南
|
9月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
10月前
|
消息中间件 Java Kafka
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
本文深入解析了 Kafka 和 RabbitMQ 两大主流消息队列在 Spring 微服务中的应用与对比。内容涵盖消息队列的基本原理、Kafka 与 RabbitMQ 的核心概念、各自优势及典型用例,并结合 Spring 生态的集成方式,帮助开发者根据实际需求选择合适的消息中间件,提升系统解耦、可扩展性与可靠性。
663 1
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
|
10月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
834 1
日志收集和Spring 微服务监控的最佳实践
|
10月前
|
监控 安全 Java
Spring Cloud 微服务治理技术详解与实践指南
本文档全面介绍 Spring Cloud 微服务治理框架的核心组件、架构设计和实践应用。作为 Spring 生态系统中构建分布式系统的标准工具箱,Spring Cloud 提供了一套完整的微服务解决方案,涵盖服务发现、配置管理、负载均衡、熔断器等关键功能。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
573 1

热门文章

最新文章