微服务韧性工程:利用Sentinel实施有效服务容错与限流降级

这篇具有很好参考价值的文章主要介绍了微服务韧性工程:利用Sentinel实施有效服务容错与限流降级。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       

目录

一、雪崩效应

二、Sentinel 服务容错

        2.1 Sentinel容错思路

        2.2 内部异常兼容

        2.3 外部流量控制

三、Sentinel 项目搭建

四、Sentinel 工作原理


        服务容错是微服务设计中一项重要原则和技术手段,主要目标是在服务出现故障、网络波动或其他不可预见的异常情况下,保证系统的稳定性和可靠性,防止局部故障引起雪崩效应,影响整个系统的正常运行。

        下面首先看下,如果没有服务容错时,什么是服务雪崩。

一、雪崩效应

        假如有一个微服务系统,这个系统由4个微服务组成,分别是 ABCD,这4个服务以集群的方式构成。如下图:

微服务韧性工程:利用Sentinel实施有效服务容错与限流降级,微服务,微服务,sentinel,SpringCloud,java,限流,熔断,流量整形

        服务 A 会向服务 BC发起调用,而服务 BC 又会去调用服务 D,也就是说服务 ABC 都直接或间接的依赖服务 D。由于服务 D 底层依赖了数据库,有读写请求。如果服务 D 在进行 CRUD 时,执行了一个慢 SQL 语句,那么一次 DB 操作的执行时间会比较长。如果并发量比较小,这当然没什么问题,一旦并发量大了,堆积起来后,性能问题就会被逐渐放大。

        这种情况下,数据库的连接资源就会被服务 D 迅速耗尽,进而导致服务D接口响应时间变长,接口超时的情况越来越多。由于上游请求还在源源不断的到达服务 D,所以接口超时情况会迅速传到到服务 B 和服务 C,进而又影响到服务 A,导致整个微服务集群不可用。

        来自服务 D 的底层故障,如果不能得到有效处理,那么故障就会想滚雪球一样被迅速放大,进而出现服务雪崩。那么如何来防范服务雪崩呢?这时服务容错限流就登场了。

二、Sentinel 服务容错

        Sentinel 是 Spring Cloud Alibaba 的一款服务容错组件,它是阿里巴巴双十一大促核心场景的保护神,内置了丰富的服务容错应用场景。它以流量作为切入点,通过各种内外防控手段达到维持服务稳定性的目的。

        2.1 Sentinel 容错思路

        就拿服务雪崩的场景来说,这种场景主要有两个主要因素:

  • 一个是外部的流量突然增多,超过了集群的吞吐量。
  • 另一个是内部各种未知异常导致的接口异常超时。

        既然知道了这两个因素,那就分别来解决处理这两个因素。

        2.2 内部异常兼容

        在 Sentinel 中,我们可以采用降级熔断的方式来处理内部异常。

        所谓降级,当服务调用发生了响应超时、服务异常等情况时,在服务内部可以执行一段降级逻辑。

微服务韧性工程:利用Sentinel实施有效服务容错与限流降级,微服务,微服务,sentinel,SpringCloud,java,限流,熔断,流量整形

        在降级逻辑中,你可以选择静默处理,即忽略掉异常继续处理后续业务逻辑,或者你可以返回一个让业务能继续进行下去的结果,还可以在降级逻辑中尝试、或者恢复异常服务。这里可以看出,降级针对的是单次服务调用异常而执行的逻辑

        所谓熔断,是指当异常调用量达到一定数量或判定条件,比如达到了一个设置的阈值、窗口时间内降级请求当道设置的阈值情况下,微服务在一段时间内停止对目标服务发起调用,所有来访请求直接执行降级逻辑。所以,熔断是多次服务调用异常累积的结果

微服务韧性工程:利用Sentinel实施有效服务容错与限流降级,微服务,微服务,sentinel,SpringCloud,java,限流,熔断,流量整形

        可以看出当服务进入了熔断状态以后,当前服务对下游的调用就停止了,这样一来就大大降低了对下游服务的压力。

        关于熔断降级的设置,在主链路的服务商一定要设置,防止出现服务雪崩。关于降级的判定条件,需要结合压测数据来进行判定,以达到最佳的吞吐量。

        2.3 外部流量控制

        提到流量控制,一定会想到限流。没错,限流是流量整形方案的一种。在 Sentinel 中可以根据集群处理能力,为每个服务设置一个限流规则,从 QPS 维度或者并发线程数维度控制外部流量访问。一旦流量超过阈值,后续请求就会被"fast fail",这时常用的方案。但 Sentinel 中不只这一种限流方案。

        从流量整形整形效果来看,除了限流外,还可以再 Sentinel 中选择预热模型排队模型。 

  • 预热模型:在一段时间内预热时间窗口,由低到高逐渐拉高流量阈值,直到达到最高的阈值为止。
  • 排队模型:如果访问量超过了设置的阈值,服务请求不会被立即失败,而是放入一个队列中等待处理,如果服务请求在预设的超时时间内仍未被处理,就会被移除队列      

        限流的效果其实要好于熔断,熔断是请求已经进来了,但是处理不了,所以也会消耗系统资源,如 CPU 等。而限流是将请求挡在了服务的外面,它的投入产出比较高。

三、Sentinel 项目搭建

        添加依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

        配置 Sentinel,在配置文件中配置 Sentinel 相关属性

spring.cloud.sentinel.transport.dashboard=localhost:8080

        启动 Sentinel 控制台,通过控制台来配置和管理 Sentinel 规则。

微服务韧性工程:利用Sentinel实施有效服务容错与限流降级,微服务,微服务,sentinel,SpringCloud,java,限流,熔断,流量整形

        启动服务,此时会自动接入 Sentinel,并在控制台上能能看到应用作为数据源出现。这样请求过来就能根据配置进行限流了。

四、Sentinel 工作原理

        先看下官方提供的流程图,可以看出请求流程。

微服务韧性工程:利用Sentinel实施有效服务容错与限流降级,微服务,微服务,sentinel,SpringCloud,java,限流,熔断,流量整形

            在 Sentinel 世界中,万物都是可以被保护的"资源",当一个外部请求想要访问 Sentinel 的资源时,便会创建一个 Entry 对象。每一个 Entry 对象都会经历好多环节,经过 Slot 链路的层层考验最终完成自己的业务逻辑,可以把 Slot 理解成一个个的 Filter,这是典型的职责链设计模式。

        分布在 SlotChain 中的各个 Slot 各司其职,这些 Slot 通过相互配合的方式执行了各项检查任务。比如有的 Slot 负责数据统计,有的负责做限流降级处理。

        在这些 Slot 中,有几个是被专门用来收集数据的。比如,NodeSelectorSlot 被用来构建当前请求的访问路径,它将上下游调用链串联起来,形成了一个服务调用关系的树状结构。而 ClusterBuilderSlot 和 StatisticSlot 这两个 Slot 会从多个维度统计一些运行期信息,比如接口响应时间、服务 QPS、当前线程数等等。

        由这几个 Slot 统计出来的结果,会为后续的限流降级等 Sentinel 策略提供数据支持。比如说我想为指定的链路定义 QPS 维度的限流策略,那么这个限流策略在执行阶段就需要获取到这些统计数据,作为决策依据。

        除此之外,Sentinel 的 Slot 机制也具备一定的扩展性,如果你想要添加一个自定义的 Slot,我们可以通过实现 ProcessorSlot 接口来完成,而且你还可以通过优先级调整各个 Slot 之间的执行顺序。

        总的来说,Sentinel 是保障微服务架构稳定性和高可用性的关键组件,对于构建大型分布式系统来说尤为重要。通过它,可以更好地实现服务治理,降低系统风险,提升服务质量。

往期经典推荐

决胜微服务架构:OpenFeign轻量级REST客户端的魅力解析-CSDN博客

一文看懂Nacos如何实现高效、动态的配置中心管理-CSDN博客

Spring Cloud + Nacos 引领服务治理新航向-CSDN博客

Spring Cloud全方位解读——构建微服务架构的利器-CSDN博客

SpringBoot项目并发处理大揭秘,你知道它到底能应对多少请求洪峰?-CSDN博客文章来源地址https://www.toymoban.com/news/detail-840101.html

到了这里,关于微服务韧性工程:利用Sentinel实施有效服务容错与限流降级的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring Cloud】服务容错中间件Sentinel入门

    欢迎来到阿Q社区 https://bbs.csdn.net/topics/617897123 Sentinel(分布式系统的流量防卫兵)是阿里开源的一套用于 服务容错 的综合性解决方案。它以流量为切入点,从 流量控制、熔断降级、系统负载保护 等多个维度来保护服务的稳定性。 Sentinel 具有以下特征: 丰富的应用场景 :

    2024年04月15日
    浏览(41)
  • SpringCloud(17~21章):Alibaba入门简介、Nacos服务注册和配置中心、Sentinel实现熔断与限流、Seata处理分布式事务

    Spring Cloud Netflix项目进入维护模式 https://spring.io/blog/2018/12/12/spring-cloud-greenwich-rc1-available-now 说明 Spring Cloud Netflix Projects Entering Maintenance Mode 什么是维护模式 将模块置于维护模式,意味着 Spring Cloud 团队将不会再向模块添加新功能。我们将修复 block 级别的 bug 以及安全问题,我

    2024年01月19日
    浏览(60)
  • 【Spring Cloud】服务容错中间件Sentinel进阶——五大规则

    我们在上一篇文章中对 Sentinel 已经有了基本的了解,接下来,我们一起对它的进阶进行学习吧! 资源 所谓资源就是 Sentinel 要保护的东西,资源是 Sentinel 的关键概念。它可以是Java应用程序中的任何内容,可以是一个服务,也可以是一个方法,甚至可以是一段代码。 我们入门

    2024年04月26日
    浏览(38)
  • 【SpringCloud Alibaba】(六)使用 Sentinel 实现服务限流与容错

    今天,我们就使用 Sentinel 实现接口的限流,并使用 Feign 整合 Sentinel 实现服务容错的功能,让我们体验下微服务使用了服务容错功能的效果。 因为内容仅仅围绕着 SpringCloud Alibaba技术栈展开,所以,这里我们使用的服务容错组件是阿里开源的 Sentinel。 当然,能够实现服务容错

    2024年02月14日
    浏览(47)
  • sentinel熔断与限流

    sentinel官网地址 添加链接描述 sentinel - github地址 添加链接描述 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应过载保护、热点流量防护等多个维度保护服务的稳定性。 Sentinel 具有以下特

    2024年02月02日
    浏览(57)
  • Sentinel限流--流控模式与限流效果

    簇点链路就是项目内的调用链路(controller - servcie - mapper ),链路中被监控的每个接口就是一个资源。 默认情况下sentinel会监控SpringMVC的每一个端点(Endpoint),Endpoint可以理解为controller中的每一个方法,每一个端点(Endpoint)就是调用链路中的一个资源。 流控、熔断等都是

    2024年02月17日
    浏览(40)
  • SpringCloud-Alibaba之Sentinel熔断与限流

    一、下载安装运行 http://localhost:8080进行访问 登录账号和密码均为sentinel 二、创建工程,并注册到nacos服务中心 依赖spring-cloud-starter-alibaba-nacos-discovery,spring-cloud-starter-alibaba-sentinel sentine-datasource-nacos (持久化) 配置文件 启动类 业务类 三、启动sentinel java -jar sentinel-dashboard-1.7.0

    2024年02月16日
    浏览(43)
  • 同创永益入选首批“金融数字韧性与混沌工程实践试点机构”

    8月16日下午,由北京国家金融科技认证中心、北京国家金融标准化研究院联合主办的“传递信任 服务发展”金融科技标准认证生态大会在太原成功举办。中国金融电子化集团有限公司党委书记、董事长周逢民,中国科学院院士冯登国,中国工商银行首席技术官吕仲涛,以及人

    2024年02月11日
    浏览(53)
  • 有效应对5大挑战,助力超自动化成功实施

    在各业务领域,自动化系统的广泛应用已经成为一种普遍现象。随着时间的推移,我们观察到一种自然趋势,那就是整合这些系统以提升生产效率。这种趋势被广泛称为“超自动化(Hyper-automation)”,这是一种更倾向于方法论或目标的概念,而不仅仅是一种技术。通过策略性

    2024年02月13日
    浏览(48)
  • 熔断降级与限流在开源SpringBoot/SpringCloud微服务框架的最佳实践

    前期内容导读: Java开源RSA/AES/SHA1/PGP/SM2/SM3/SM4加密算法介绍 Java开源AES/SM4/3DES对称加密算法介绍及其实现 Java开源AES/SM4/3DES对称加密算法的验证说明 Java开源RSA/SM2非对称加密算法对比介绍 Java开源RSA非对称加密算法实现 Java开源SM2非对称加密算法实现 Java开源接口微服务代码框架

    2024年02月12日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包