简单理解微服务限流、降级、熔断

简介: 简单理解微服务限流、降级、熔断

微服务限流、降级、熔断分别都是什么意思,我们平时工作中为什么要关注这些东西呢?

公司不断的发展壮大,一开始处于蛮荒时代,咱们从单体应用过渡到微服务的时候,可能还是那一套单体的思想,再加上用户量可能也不多,直接就不去考虑起量了之后,我们需要如何处理

可殊不知,当有一天起量了,机会摆在你面前时候,你没有准备好,你也是抓不住的

先举一个生活中常见的例子:

我们有时去访问一个网站的时候,当网络正常的情况下,我们发现访问这个网站,比平时好像慢了一些,且会出现报系统错误的情况,或者报错系统繁忙等信息,可能是服务做了超时,超时之后就报错了

再举一个双 11 的例子

咱们访问某猫或者某狗的时候,咱们发现并不是每一次访问都是可以正常进入页面的,也就是说一会可以正常进入页面,一会又不能正常进入页面,并且会提示系统繁忙请稍后再试,此处实际上是服务应用了限流和熔断

另外,在双 11 这一天,咱们买了商品之后,发现当天是没有办法进行退款的,这个是应用了服务降级

那么,咱们在技术上什么限流,什么是熔断,什么又是服务降级呢?

什么是限流?

通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理,限流是从整体系统上去进行考虑的

最近国庆了,很多人都会去坐火车,坐高铁,咱们排队过安检的时候,我们可以看到保安会隔一会放 10 个人进去,过一会又放一些人进去,一直维持着里面只能有 10个人在进行安全检查

那么这 10 个数字,就相当于是服务进行的限流,只要一达到 10 人以上的请求,那么就会服务拒绝,当有空余的时候,才会处理新来的请求,这个应该就不难理解了吧

一般限流的方式有这些:

  • 固定时间窗口控制
  • 使用漏桶的方式
  • 使用令牌桶的方式

关于限流的详细的具体实现方式,咱们可以查看历史文章:最常用的限流算法以及如何在http中间件中加入流控

什么是熔断?

熔断和限流还不太一样,上面我们可以看到限流是,控制请求速率,只要还能承受,那么都会处理,可是熔断是这样的一个效果

举个栗子

例如咱们的微服务系统中,多个微服务是会相互调用的,且会存在一个较长的调用调用链,链路一长,关联的服务多了就会带来一个问题

网关请求到我们的微服务 A,微服务 A 需要去调用微服务 B,微服务 C,微服务 B 还会去调用为服务 D,微服务C也会去调用其它的微服务

这个时候,如果在这条链路上,哪怕有一个服务出现了问题,或者相应时间过长,那么对与微服务A的调用就会占用越来越多的系统资源,一般服务也是会做重试机制,且当客户端调用某个接口不能得到正常响应的时候,是会进行疯狂请求的,这会导致微服务 A 消耗过多资源,进而引起系统崩溃,所谓的“雪崩效应”

那么这个时候,就不得不引入一个断路器来进行熔断,咱们一会会应用 hystrix 来进行功能实现

关于熔断,我们可以这样来思考,咱们初高中学过的物理,家里的电闸开关出都会设置一个保险丝,当咱们的用电负荷过大的时候,保险丝就会自我熔断,保护电路

那么微服务中的熔断也是这个效果,他可以保护咱们的调用链路,防止高压请求带来资源极高的消耗,最终导致雪崩,熔断是从微服务层级去考虑的

咱们的断路器 hystrix 当发现链路中,微服务 A 请求 微服务 B ,响应时间过长,或者 微服务 B 不可用的时候,那么微服务 A 就会迅速的进行错误响应,而不是疯狂的去调用微服务 B

Hystrix 自身还有探测机制,会去探测微服务 B 是否可用,如果可用了,那么微服务 A 的请求就会正常的去请求微服务 B

关于断路器的使用方式,实现方式,和熔断的实现方案,我们可以查看历史文章:golang 微服务中的断路器 hystrix

什么是服务降级?

当我的微服务架构整体的负载超出了预设的上限阈值或要应对即将到来的大流量是,为了保证重要或基本的服务能正常运行,会自动或者手动的关闭某些外围或者不重要的服务

服务降级其实就更好理解了,例如咱们服务有 10 个功能,当服务压力过大的时候,咱们就可以自动关闭外围的几个核心的功能,让系统资源都集中咱们的核心服务上,一般是从外围服务开始降级

咱们做核酸已经持续好几年了,咱们以喉咙上的老茧为证

做核酸的时候,进入一个通道,我们可以看到,最开始有检查戴口罩的,往下走,有检查健康码的,再往下走,开始检查场所码,最后快到大白处之后,就开始检查核酸码了

当有大的人流量,咱们做核酸的时候,可能就只有查看场所码和核酸码了,这个就好理解了吧

感谢阅读,欢迎交流,点个赞,关注一波 再走吧

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

可以进入地址进行体验和学习:https://xxetb.xet.tech/s/3lucCI

相关文章
|
3月前
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
2月前
|
Java API 微服务
微服务保护之熔断降级
在微服务架构中,服务之间的调用是通过网络进行的,网络的不确定性和依赖服务的不可控性,可能导致某个服务出现异常或性能问题,进而引发整个系统的故障,这被称为 微服务雪崩。
35 0
|
4月前
|
负载均衡 监控 Kubernetes
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。
|
3月前
|
监控 供应链 安全
构建高效微服务架构:API网关与服务熔断策略
【7月更文挑战第38天】随着现代应用程序向微服务架构的转型,系统的稳定性和效率成为了开发团队关注的焦点。本文将探讨在微服务环境中实现系统可靠性的关键组件——API网关,以及如何在服务间通讯时采用熔断机制来防止故障蔓延。通过分析API网关的核心功能和设计原则,并结合熔断策略的最佳实践,我们旨在提供一套提高分布式系统弹性的策略。
|
4月前
|
监控 Java 开发者
实现Java微服务架构下的服务熔断与降级
实现Java微服务架构下的服务熔断与降级
|
6月前
|
负载均衡 Java API
构建高效微服务架构:API网关与服务熔断策略
【5月更文挑战第2天】 在微服务架构中,确保系统的高可用性与灵活性是至关重要的。本文将深入探讨如何通过实施有效的API网关和设计合理的服务熔断机制来提升分布式系统的鲁棒性。我们将分析API网关的核心职责,包括请求路由、负载均衡、认证授权以及限流控制,并讨论如何利用熔断器模式防止故障传播,维护系统的整体稳定性。文章还将介绍一些实用的技术和工具,如Netflix Zuul、Spring Cloud Gateway以及Hystrix,以帮助开发者构建一个可靠且高效的微服务环境。
|
6月前
|
Java 数据安全/隐私保护 Sentinel
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
|
6月前
|
监控 Sentinel 微服务
微服务的防御之道:服务雪崩、服务熔断、服务降级
微服务的防御之道:服务雪崩、服务熔断、服务降级
96 1
|
6月前
|
Dubbo Java 应用服务中间件
微服务框架(十五)Dubbo 超时机制及服务降级
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Dubbo超时机制及服务降级 当服务出现创建超时的时候,TimeoutFilter会打印该创建记录的详细信息,日志级别为WARN,即为可恢复异常,或瞬时的状态不一致
|
12天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
56 6