Sentinel服务器容错简介

spring gateway 详解

  • 服务容错
    • 高并发带来的问题
      • 服务雪崩效应
      • 常见容错方案
      • 常见的容错思路
        • 1、隔离
        • 2、超时
        • 3、限流
        • 4、熔断
        • 5、降级
      • 常见的容错组件
  • Sentinel
    • Sentinel 具有以下特征:
    • Sentinel概念和功能
      • 相关概念
        • 1、资源
        • 2、规则
      • 重要功能

服务容错

高并发带来的问题

  • 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身
    的原因,服务并不能保证服务的 100% 可用,如果单个服务出现问题,调用这个服务就会出现网络延迟,此时若有大量的网络涌入,会形成任务堆积,最终导致服务瘫痪。

服务雪崩效应

  • 在分布式系统中,由于网络原因或自身的原因服务一般无法保证 100% 可用。如果一个服务出现了问题,调用这个服务就会出现线程阻塞的情况,此时若有大量的请求涌入,就会出现多条线程阻塞等待,进而导致服务瘫痪。

  • 由于服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的 “雪崩效应” 。
    Sentinel服务器容错简介_第1张图片

  • 雪崩发生的原因多种多样:有不合理的容量设计,或者是高并发下某一个方法响应变慢,亦或是某台机器的资源耗尽。

  • 我们无法完全杜绝雪崩源头的发生,只有做好足够的容错,保证在一个服务发生问题,不会影响到其它服务的正常运行,也就是 “雪落而不雪崩”。

常见容错方案

  • 要防止雪崩的扩散,需要做好服务的容错,容错说白了就是保护自己不被对方(提供方)拖垮的一些措施, 下面介绍常见的容错思路和组件。

常见的容错思路

常见的容错思路有 隔离、超时、限流、熔断、降级 这几种。

1、隔离

  • 它是指将系统按照一定的原则划分为若干个服务模块,各个模块之间相对独立,无强依赖。当有故障发生时,能将问题和影响隔离在某个模块内部,而不扩散风险,不波及其它模块,不影响整体的系统服务。
  • 常见的隔离方式有:线程池隔离 和 信号量隔离(QPS)。
    Sentinel服务器容错简介_第2张图片

2、超时

  • 在不做任何处理的情况下,服务提供者不可用会导致请求线程强制等待,而造成系统资源耗尽。加入超时机制后,一旦发生超时,就会释放资源。
  • 由于释放资源速度较快,一定程序上可以抑制资源耗尽的问题。
    Sentinel服务器容错简介_第3张图片

3、限流

  • 限流就是限制业务访问的QPS(每秒请求次数)避免服务因流量的激增而发生故障,从而达到保护系统的目的。
    Sentinel服务器容错简介_第4张图片

4、熔断

  • 远程服务不稳定 或 网络抖动 时暂时关闭就叫做熔断。

  • 断路器会实时监测应用,如果发现在一定时间内失败次数或失败率达到一定的阈值就会熔断,此时访问业务的一切请求都会被拦截下来。熔断一定时间(如10秒)后,断路器会进入 半开状态:

    • 此时允许一次访问业务的请求,如果成功则断路器关闭,应用正常调用;
    • 如果请求依然不成功,断路器继续回到熔断开启状态,过段时间再进入半熔断状态。
      Sentinel服务器容错简介_第5张图片
  • 服务熔断一般有三种状态:

    • 熔断关闭状态(Closed):服务没有故障时,熔断器所处的状态,对调用方的调用不做任何限制。
    • 熔断开启状态(Open):后续对该服务接口的调用不再经过网络,直接执行本地的 fallback 方法。
    • 半熔断状态(Half-Open):尝试恢复服务调用,允许有限的流量调用该服务,并监控调用成功率。
      • 如果成功率达到预期,则说明服务已恢复,进入熔断关闭状态;
      • 如果成功率仍旧很低,则重新进入熔断关闭状态。

5、降级

  • 降级就是当某个发生服务熔断后,服务将不再被调用,此时客户端可以自己准备一个本地的 fallback 回调来返
    回一个缺省值,它其实就是为服务提供一个兜底方案。

常见的容错组件

  • Hystrix :由 Netflix 开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。已经停止更新。
  • Resilience4J :是一款非常轻量、简单,并且文档非常清晰、丰富的熔断工具,这也是Hystrix官方推荐的替代产品。不仅如此,Resilicence4j还原生支持Spring Boot 1.x/2.x,而且监控也支持和prometheus等多款主流产品进行整合。
  • Sentinel :是阿里巴巴开源的一款断路器实现,本身在阿里内部已经被大规模采用,非常稳定。
  • 下面是三个组件在各方面的对比:
` Sentinel Hystrix Resilience4j
隔离策略 信号量隔离(并发线程数限流) 线程池隔离/信号量隔离 信号量隔离
熔断降级策略 基于响应时间、异常比率、异常数 基于异常比率 基于异常比率、响应时间
实时统计 实现 滑动窗口(LeapArray) 滑动窗口(基于RxJava) Ring Bit Buffer
动态规则配置 支持多种数据源 支持多种数据源 有限支持
扩展性 多个扩展点 插件的形式 接口的形式
基于注解的支持 支持 支持 支持
限流 基于 QPS,支持基于调用关系的限流 有限的支持 Rate Limiter
流量整形 支持预热模式、匀速器模式、预热排队模式 不支持 简单的 Rate Limiter
模式系统自适应保护 支持 不支持 不支持
控制台 提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等 简单的监控查看 不提供控制台,可对接其它监控系统

Sentinel

Sentinel是阿里巴巴开源的一款微服务流量控制组件。
官网:https://sentinelguard.io/zh-cn/index.html
github:https://github.com/alibaba/Sentinel/wiki/

Sentinel 具有以下特征:

  • 丰富的应用场景 :Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
  • 完备的实时监控 :Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态 :Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
  • 完善的 SPI 扩展点 :Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

Sentinel概念和功能

相关概念

1、资源

  • 资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容:可以是一个服务,也可以是一个方
    法,甚至可以是一段代码。本质就是 Sentinal 要保护的内容。

2、规则

  • 作用在资源之上,定义以什么样的方式保护资源,主要包括流量控制规则、熔断降级规则、热点规则以及系统保
    护规则。本质就是用来定义如何进行保护资源。

重要功能

Sentinel 的主要功能就是容错,主要体现为下面这三个:

  • 流量控制

    • 流量控制(flow control),其原理是监控应用流量的 QPS 或 并发线程数 等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。
  • 熔断降级

    • 熔断降级是解决雪崩问题的重要手段。其思路是由 断路器 统计服务调用的异常比例、慢请求比例,如果超出阈值则会 熔断 该服务。即拦截访问该服务的一切请求;而当服务恢复时,断路器会放行访问该服务的请求。

    • 断路器控制熔断和放行是通过状态机来完成的。
      Sentinel服务器容错简介_第6张图片

  • 系统负载保护

    • Sentinel 系统自适应过载保护从整体维度对应用入口流量进行控制,结合应用的 Load、CPU 使用率、总体平均 RT、入口 QPS 和 并发线程数 等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。

后续:
Spring cloud alibaba 整合 Sentinel
Sentinel规则详解

你可能感兴趣的:(Spring,sentinel,服务器,数据库)