Sentinel
约 1431 字大约 5 分钟
2025-02-27
1. Sentinel 简介
Sentinel 是阿里巴巴开源的分布式系统的流量防卫组件,主要用于保护服务的稳定性,在微服务架构中,Sentinel 可以保护微服务之间的调用,保障服务的高可用。Sentinel 具有以下特征:
1.2 Sentinel 特点
- 丰富的应用场景:Sentinel 适用于微服务、云原生、容器化、serverless 等各种形态的应用场景,能够在服务发现、服务流量控制、熔断降级、系统负载保护等方面提供一站式的解决方案。
- 完备的功能特性:Sentinel 提供了丰富的功能特性,包括丰富的流量控制规则、熔断降级规则、系统自适应保护、热点参数检测、慢调用链路检测等。
- 完善的生态系统:Sentinel 与其他开源组件如 Spring Cloud Alibaba、Dubbo、gRPC 等无缝集成,提供完善的生态系统支持。
1.3 Sentinel 优势
- 轻量级,核心库无多余依赖,性能损耗小
- 方便接入,开源生态广泛
- 丰富的流量控制场景
- 易用的控制台,提供实时监控、机器发现、规则管理等能力
- 完善的扩展性设计,提供多样化的 SPI 接口,方便用户根据需求给 Sentinel 添加自定义的逻辑
1.4 Sentinel 适用场景
- 服务发现与熔断降级:Sentinel 可以通过服务发现组件,自动发现微服务集群中的所有机器,并实时更新机器的状态信息,实现服务的高可用。Sentinel 还可以提供熔断降级功能,当调用链路的某个资源出现不稳定或异常时,可以快速切断流量,避免影响到整体业务。
- 系统负载保护:Sentinel 可以实时监控微服务的系统负载,并根据系统的运行状况,提供系统资源的保护。当系统负载超过阈值时,Sentinel 可以自动限制流量,避免系统过载,提高系统的稳定性。
- 热点参数检测:Sentinel 可以实时监控微服务的请求参数,并根据参数的变化趋势,提供热点参数的识别和排查能力。当某个热点参数出现大量请求时,Sentinel 可以快速识别出其热点,并进行排查和处理。
- 慢调用链路检测:Sentinel 可以自动检测微服务间的调用链路,并根据调用链路的延迟和错误率,提供慢调用链路的识别和定位能力。当某个慢调用链路出现异常时,Sentinel 可以快速定位出其根因,并进行优化和改进。
1.5 Sentinel 与 Hystrix 的区别
- 功能定位:Hystrix 是 Netflix 开源的用于处理分布式系统的延迟和容错的库,主要用于隔离依赖的服务,防止它们之间出现雪崩效应。Sentinel 则是阿里巴巴开源的分布式系统的流量防卫组件,主要用于保护微服务的稳定性。
- 控制粒度:Hystrix 控制的是单个依赖的延迟和错误率,而 Sentinel 则是控制整个微服务集群的流量和系统负载。
- 隔离策略:Hystrix 采用线程池隔离策略,将依赖隔离到不同的线程池,以防止单个依赖出现问题影响其他依赖。Sentinel 则采用基于资源的隔离策略,将微服务隔离到不同的机器,以防止单台机器出现问题影响整个集群。
- 熔断降级策略:Hystrix 采用固定时间窗口的熔断策略,当依赖的错误率超过阈值时,触发熔断,熔断后所有请求直接失败,直到熔断器恢复。Sentinel 则采用基于 QPS 的熔断策略,当 QPS 超过阈值时,触发熔断,熔断后所有请求直接失败,直到 QPS 回落到阈值以下。
- 实时监控:Hystrix 采用缓存和断路器机制,依赖的延迟和错误率是实时计算的,但缺乏实时监控能力。Sentinel 则采用基于数据采样的实时监控,提供秒级的实时监控数据。
- 扩展性:Hystrix 提供了丰富的扩展点,但扩展性较弱。Sentinel 提供了 SPI 接口,方便用户自定义扩展。
1.6 Sentinel 架构
Sentinel 的架构分为客户端和服务器两部分。客户端包括 Java 客户端和控制台,客户端和服务器通过数据传输协议进行通信。
- 客户端:客户端包括 Java 客户端和控制台。Java 客户端是 Sentinel 的主要实现,它负责收集微服务的调用信息,并通过控制台向服务端发送心跳和统计信息。控制台是 Sentinel 的管理控制台,它提供实时监控、机器发现、规则管理等能力。
- 服务端:服务端包括数据存储、集群管理、规则引擎、控制台等模块。数据存储模块负责存储微服务调用信息,集群管理模块负责管理微服务集群,规则引擎负责实时计算规则,控制台负责提供管理控制台的界面。
2. Sentinel安装与使用
2.1 安装Sentinel
- 下载 Sentinel 控制台
Sentinel 控制台是 Sentinel 的管理控制台,它提供实时监控、机器发现、规则管理等能力。控制台的下载地址为:https://github.com/alibaba/Sentinel/releases
放到指定文件夹中(最好不要有中文路径)
- 启动控制台 进入控制台的 bin 目录,启动控制台命令为: