概述
Sentinel 是面向分布式服务架构的高可用防护组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。
安装
docker
安装sentinel-dashboard,默认端口是8080,这里设置成8088 访问http://localhost:8088,登录账号密码均为sentinel
docker run -p 8088:8080 -d --name sentinel matecloud/sentinel-dashboard:1.8.1
资源resource
在Sentinel的架构理念中,资源可以是Java应用程序中的任何内容。例如,由应用程序提供的服务接口、目标URL或一段代码,这些都可以成为被Sentinel监控的资源。通常,可以使用方法签名、URL和服务名称作为资源名。
规则
定义了资源之后,我们需要在Sentinel中描述资源保护的方式,这个描述的过程就是定义Sentinel的规则的过程,围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则及系统保护规则,将规则作用于资源之上,所有规则可以动态实时调整,从而实现限流或降级,以此来保护目标资源。
功能
Sentinel 分为两个部分:
- 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
- 控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。
Dashboard
控制台(Dashboard)控制台主要用于管理推送规则、监控资源、集群限流分配管理、机器发现等,它的主要功能如下:
主要功能如下:
(1)实时监控支持自动发现集群机器列表、服务健康状态、服务调用失败率、每秒调用次数统计、调用耗时、图表统计等功能。
(2)规则管理及推送支持在界面配置流控、降级和热点规则,并实时推送控制规则到服务集群。
(3)鉴权控制台支持自定义鉴权接口,提供基本登录功能。
核心库(Java客户端)
Sentinel的核心库提供的主要功能如下。
(1)应用流控针对指定应用实例的流量控制,监控应用流量QPS或并发线程数,当达到指定的阈值时对流量进行控制,避免系统被瞬时的流量高峰冲垮,保障应用的高可用性。(2)集群流控不同于应用流控只针对单个应用实例做限制,集群流控可以对整个集群调用总量进行限流,精确控制整个集群的调用总量,再结合单机限流做兜底方案,可以更好地发挥流量控制的效果。
(3)网关流控Sentinel支持对Spring Cloud Gateway、Zuul等主流的API Gateway进行限流。
(4)熔断降级当调用链路中某一类资源出现不稳定时(包括调用超时、异常比例升高、异常数升高),通过熔断降级对相应资源的访问请求进行限制,让请求快速失败,降低访问请求堆积的可能性,从而避免发生大范围的服务雪崩。
(5)热点参数限流热点即经常访问的数据,热点参数限流对访问请求中包含的热点参数进行统计,并根据预先配置的限流阈值与流控模式,对包含热点参数的资源调用进行限流。
(6)系统自适应限流系统自适应限流方案可以在系统处理能力和实际访问流量之间寻找一个动态平衡点,而不是基于某些间接的指标(如系统当前负载)来做限流。
(7)黑白名单控制Sentinel黑白名单根据资源的请求来源(origin)限制资源是否通过。
服务降级策略
慢调用比例(SLOW_REQUEST_RATIO)
以慢调用在所有请求中的比例作为阈值,需要设置允许的慢调用最长RT(响应时间),如果请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs参数)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值时,后续的访问请求在一段窗口期内会被熔断。经过熔断时长后熔断器会进入探测恢复状态(即HALF-OPEN状态,也叫半开状态)。如果接下来的一个请求响应时间小于设置的慢调用RT则结束熔断,若大于设置的慢调用RT,则会再次回到熔断状态。
异常比例(ERROR_RATIO)
当单位统计时长内请求数目大于所设置的最小请求数目,并且发生异常调用的请求数占总调用请求数的比例大于阈值时,在接下来的熔断时长内,后续的访问请求会被自动熔断。异常比例的阈值范围是[0.0,1.0](表示异常比例范围为0%~100%)
异常数(ERROR_COUNT)
当单位统计时长内异常调用的数量超过阈值之后,会触发自动熔断。