Sentinel工作原理

简介: Sentinel 是面向分布式服务架构的流量治理组件,以“资源”为核心概念,通过流量控制、熔断降级、系统负载保护等规则保障系统稳定。支持灵活配置与动态调整,实现高可用防护。

Sentinel 基本概念

资源

资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。

只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。

规则

围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

Sentinel 功能和设计理念

流量控制

流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状,如下图所示:

流量控制有以下几个角度:

  • 资源的调用关系,例如资源的调用链路,资源和资源之间的关系;
  • 运行指标,例如 QPS、线程池、系统负载等;
  • 控制的效果,例如直接限流、冷启动、排队等。

Sentinel 的设计理念是让您自由选择控制的角度,并进行灵活组合,从而达到想要的效果。

熔断降级

什么是熔断降级

除了流量控制以外,降低调用链路中的不稳定资源也是 Sentinel 的使命之一。由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积。这个问题和 Hystrix 里面描述的问题是一样的。

Sentinel 和 Hystrix 的原则是一致的: 当调用链路中某个资源出现不稳定,例如,表现为 timeout,异常比例升高的时候,则对这个资源的调用进行限制,并让请求快速失败,避免影响到其它的资源,最终产生雪崩的效果。

熔断降级设计理念

在限制的手段上,Sentinel 和 Hystrix 采取了完全不一样的方法。

Hystrix 通过线程池的方式,来对依赖(在我们的概念中对应资源)进行了隔离。这样做的好处是资源和资源之间做到了最彻底的隔离。缺点是除了增加了线程切换的成本,还需要预先给各个资源做线程池大小的分配。

Sentinel 对这个问题采取了两种手段:

  • 通过并发线程数进行限制

和资源池隔离的方法不同,Sentinel 通过限制资源并发线程的数量,来减少不稳定资源对其它资源的影响。这样不但没有线程切换的损耗,也不需要您预先分配线程池的大小。当某个资源出现不稳定的情况下,例如响应时间变长,对资源的直接影响就是会造成线程数的逐步堆积。当线程数在特定资源上堆积到一定的数量之后,对该资源的新请求就会被拒绝。堆积的线程完成任务后才开始继续接收请求。

  • 通过响应时间对资源进行降级

除了对并发线程数进行控制以外,Sentinel 还可以通过响应时间来快速降级不稳定的资源。当依赖的资源出现响应时间过长后,所有对该资源的访问都会被直接拒绝,直到过了指定的时间窗口之后才重新恢复。

系统负载保护

Sentinel 同时提供系统维度的自适应保护能力。防止雪崩,是系统防护中重要的一环。当系统负载较高的时候,如果还持续让请求进入,可能会导致系统崩溃,无法响应。在集群环境下,网络负载均衡会把本应这台机器承载的流量转发到其它的机器上去。如果这个时候其它的机器也处在一个边缘状态的时候,这个增加的流量就会导致这台机器也崩溃,最后导致整个集群不可用。

针对这个情况,Sentinel 提供了对应的保护机制,让系统的入口流量和系统的负载达到一个平衡,保证系统在能力范围之内处理最多的请求。

Sentinel 工作主流程

在 Sentinel 里面,所有的资源都对应一个资源名称以及一个 Entry。Entry 可以通过对主流框架的适配自动创建,也可以通过注解的方式或调用 API 显式创建;每一个 Entry 创建的时候,同时也会创建一系列功能插槽(slot chain)。这些插槽有不同的职责,例如:

  • NodeSelectorSlot 负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级;
  • ClusterBuilderSlot 则用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据;
  • StatisticSlot 则用于记录、统计不同纬度的 runtime 指标监控信息;
  • FlowSlot 则用于根据预设的限流规则以及前面 slot 统计的状态,来进行流量控制;
  • AuthoritySlot 则根据配置的黑白名单和调用来源信息,来做黑白名单控制;
  • DegradeSlot 则通过统计信息以及预设的规则,来做熔断降级;
  • SystemSlot 则通过系统的状态,例如 load1 等,来控制总的入口流量;

总体的框架如下:

Sentinel 将 ProcessorSlot 作为 SPI 接口进行扩展(1.7.2 版本以前 SlotChainBuilder 作为 SPI),使得 Slot Chain 具备了扩展的能力。您可以自行加入自定义的 slot 并编排 slot 间的顺序,从而可以给 Sentinel 添加自定义的功能。

更多

相关文章
|
18小时前
|
存储 网络协议 Docker
ElasticSearch集群
Elasticsearch集群通过分片(shard)和副本(replica)解决海量数据存储与单点故障问题。数据被拆分为多个分片分布于不同节点,提升存储与性能;副本保障高可用。集群具备自动故障转移与脑裂防护机制,支持水平扩展,确保数据安全与服务稳定。
ElasticSearch集群
|
18小时前
|
JSON 算法 Java
DSL语法、搜索结果处理
本文介绍了Elasticsearch(ES)的数据搜索功能,涵盖DSL查询语法、全文检索、精确查询、地理坐标查询及复合查询等类型。通过RestClient实现搜索,并结合黑马旅游案例,演示了酒店搜索、过滤、竞价排名等功能的实现过程,帮助读者掌握ES在实际项目中的应用。
 DSL语法、搜索结果处理
|
18小时前
|
自然语言处理 关系型数据库 MySQL
数据聚合、自动补全、数据同步
本文介绍了Elasticsearch中数据聚合、自动补全及数据同步的实现方法。通过聚合功能可对数据进行分组统计与指标计算,支持桶(Bucket)、度量(Metric)和管道(Pipeline)三种类型,并结合DSL与Java API 实现高效查询分析。为提升搜索体验,利用拼音分词器与Completion Suggester实现输入提示功能。同时,通过RabbitMQ异步消息机制实现MySQL与Elasticsearch间的数据同步,确保数据一致性,提高系统解耦性与实时性。(239字)
|
19小时前
|
JSON 自然语言处理 数据库
索引库、文档操作
本文介绍了Elasticsearch(ES)的核心概念及其与MySQL的对比,阐述了ES中索引、映射和文档的作用,并详细演示了如何通过Kibana和RestClient进行索引库和文档的增删改查操作。同时说明了ES与MySQL在实际应用中的互补关系:MySQL保障数据安全,ES擅长高效搜索分析,两者结合可实现高性能的数据存储与查询系统。
 索引库、文档操作
|
19小时前
|
自然语言处理 Java Shell
安装ES、Kibana、IK
本文介绍了如何通过Docker部署单点Elasticsearch与Kibana,并配置IK分词器。内容涵盖网络创建、镜像加载、容器运行、DevTools使用,以及IK分词器的安装与扩展词典、停用词配置,助力中文文本分析。
 安装ES、Kibana、IK
|
19小时前
|
监控 Java 测试技术
微服务保护Sentinel
本课程深入讲解微服务中雪崩问题的成因及解决方案,重点介绍阿里开源流量治理组件Sentinel的应用。涵盖Sentinel的部署与整合、限流模式(直接、关联、链路)、流控效果(快速失败、预热、排队等待)、熔断降级、线程隔离、授权规则及规则持久化等内容,结合Jmeter压测实战,帮助开发者全面提升微服务稳定性与高可用能力。
|
17小时前
|
NoSQL Java Redis
微服务概述
本文对比单体应用与微服务架构,阐述微服务的定义、核心特征及优缺点。微服务通过服务拆分、独立部署、轻量通信实现高内聚、低耦合,提升系统可维护性与扩展性,但也带来运维复杂、分布式事务等挑战,并介绍基于SpringCloud的技术实现方案。
 微服务概述
|
19小时前
|
SQL 容灾 数据库
分布式事务Seata
本章学习分布式事务问题及解决方案,涵盖CAP、BASE理论,并深入讲解Seata框架的XA、AT、TCC、SAGA四种模式原理与实现,掌握跨服务事务一致性处理及高可用部署。
 分布式事务Seata
|
19小时前
|
存储 NoSQL 网络协议
Redis集群部署指南
本教程基于CentOS7讲解Redis集群搭建,涵盖单机安装、主从复制、哨兵模式及分片集群的配置与测试,详细演示了多实例部署、节点关联、故障转移与数据分片等核心操作。
 Redis集群部署指南
|
18小时前
|
存储 缓存 NoSQL
分布式缓存Redis(高级)
本文系统讲解Redis持久化机制、主从复制、哨兵模式及分片集群的原理与实践。涵盖RDB与AOF持久化策略、数据同步原理、故障恢复机制,以及如何通过RedisTemplate实现高可用架构,助力Redis在生产环境中的稳定落地。
分布式缓存Redis(高级)