索引库、文档操作

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: Sentinel 是面向分布式服务架构的流量治理组件,核心概念包括资源与规则。资源指应用中的任意代码块或服务,通过 API 定义并受保护;规则则基于资源实时状态,实现流量控制、熔断降级和系统负载保护。其设计理念强调灵活、动态的控制策略,支持多维度指标监控与自定义扩展,保障系统稳定。

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 添加自定义的功能。
更多
Sentinel 核心类解析

相关文章
|
2月前
|
SQL 安全 关系型数据库
了解SQL注入
SQL注入是一种通过构造恶意SQL语句攻击数据库的高危漏洞,常用于绕过认证、窃取数据或执行系统命令。由于输入验证不足,攻击者可利用拼接字符串篡改SQL逻辑,造成信息泄露、数据损毁等严重后果。防御需结合参数化查询、严格输入验证及IPS防护,尤其应避免错误信息暴露。OWASP将其列为头号Web安全威胁。
|
2月前
|
关系型数据库 MySQL Java
开发环境搭建
工欲善其事,必先利其器。学习前请确保电脑内存16G以上(建议32G),推荐使用便携显示器分屏开发以提升效率。下载并配置虚拟机(IP:192.168.101.68)、安装VMware、FinalShell远程连接,导入CentOS7虚拟机并启动Docker、MySQL等服务。IDEA中配置JDK11、Maven(3.8.6)及本地仓库,设置编码与自动导包。安装Git并配置账号信息。通过Gitee Fork黑马商城项目,克隆到本地,创建hmall数据库并导入SQL脚本。前端使用nginx部署,启动后访问http://localhost:18080登录测试。
|
2月前
|
JSON 自然语言处理 算法
DSL语法、搜索结果处理
本文深入讲解Elasticsearch的搜索功能,涵盖DSL查询语法,包括全文检索、精确查询、地理坐标查询及复合查询。通过实例演示match、term、range、geo_distance及bool、function_score等查询的使用,助力高效实现数据检索与排序优化。
|
2月前
|
弹性计算 人工智能 应用服务中间件
阿里云服务器最新优惠价格表及选购指南(新版)
随着云计算技术的不断发展,阿里云再次推出了服务器优惠价格表,为用户提供更加灵活、经济的上云方案。本次优惠涵盖了轻量应用服务器、ECS云服务器以及GPU服务器等多种类型,满足不同用户的需求。以下是详细的价格表及选购指南。
|
2月前
|
负载均衡 Java Nacos
Gateway服务网关
网关是微服务架构的统一入口,实现请求路由、权限控制与限流。SpringCloud Gateway基于WebFlux,性能优于Zuul。支持断言与过滤器工厂,可自定义全局过滤器,解决跨域等问题,是微服务流量管控的核心组件。
|
2月前
|
JSON 自然语言处理 Docker
安装ES、Kibana、IK
本文介绍如何通过Docker部署单节点Elasticsearch与Kibana,并配置IK分词器。涵盖网络创建、镜像加载、容器运行、数据卷挂载等步骤,实现ES与Kibana互联;通过Kibana的DevTools操作ES;离线安装IK分词器并配置扩展词典与停用词典,提升中文分词效果;最后处理常见启动报错问题,确保服务正常运行。(238字)
|
2月前
|
JSON Dubbo Java
Feign远程调用
本章介绍如何使用Feign替代RestTemplate实现更优雅的HTTP跨服务调用。通过引入Feign,结合注册中心与注解声明,解决硬编码、可读性差等问题,并支持自定义配置、连接池优化与最佳实践,如客户端抽取为独立模块,提升代码复用性与维护性。
|
2月前
|
存储 NoSQL Java
从单机到集群:Redis部署全攻略
本文全面解析Redis四种核心部署方式:单机版部署简单适合开发测试;主从复制实现读写分离和数据备份;哨兵模式提供自动故障转移能力;Redis Cluster集群支持分片存储和横向扩展。文章详细阐述了每种方案的原理、部署步骤、Java代码实现及适用场景,并给出生产环境选型指南。通过对比各方案优缺点,帮助开发者根据业务需求(数据量、并发量、可用性要求等)选择最佳部署方式,同时提供参数优化建议和常见问题解决方案。
160 2
|
6月前
|
安全 Ubuntu Linux
如何安装Linux操作系统?
此时,您可以选择重新启动计算机,然后从硬盘上的Linux系统启动。以上是一个大致的安装过程。请注意,不同的Linux发行版可能会在细节上有所差异,因此在进行安装之前,请确保您阅读并理解了相应发行版的安装指南或文档。
|
存储 缓存 监控
极致 ElasticSearch 调优,让你的ES 狂飙100倍!
尼恩分享了一篇关于提升Elasticsearch集群的整体性能和稳定性措施的文章。他从硬件、系统、JVM、集群、索引和查询等多个层面对ES的性能优化进行分析,帮助读者提升技术水平。