当前位置: 首页 > 科技观察

阿里出品的Sentinel是什么?

时间:2023-03-19 15:42:40 科技观察

Sentinel简介Sentinel是阿里开源项目,定位为分布式服务架构的高可用流控组件。主要以流量为切入点,从流量控制、断路器降级、系统自适应保护等多个维度帮助用户保障微服务的稳定性。Sentinel简介随着微服务的普及,服务与服务之间的稳定性变得越来越重要。哨兵应运而生。Sentinel的开发者介绍了不忘喝水的挖井人。感谢这些大佬。Sentinel的主要特点分为两部分:核心库(Java客户端)不依赖于任何框架/库,可以运行在所有的Java运行环境中。同时对Dubbo/SpringCloud等框架也有很好的支持。控制台(Dashboard)基于SpringBoot开发,无需Tomcat等额外的应用容器,打包后即可直接运行。Sentinel基本概念资源资源是Sentinel的关键概念。它可以是Java应用程序中的任何东西,例如应用程序提供的服务,或者应用程序调用的另一个应用程序提供的服务,甚至是一段代码。在接下来的文档中,我们将使用资源来描述代码块。只要SentinelAPI定义的代码是资源,就可以被Sentinel保护。在大多数情况下,您可以使用方法签名、URL甚至服务名称作为资源名称来标识资源。规则围绕资源实时状态设置的规则可能包括流量控制规则、熔断降级规则和系统保护规则。所有规则都可以实时动态调整。Sentinel功能及设计理念熔断降级什么是熔断降级除了流量控制,减少调用环节的不稳定资源也是Sentinel的使命之一。由于调用关系的复杂性,如果调用环节中某个资源变得不稳定,请求最终会堆积起来。这个问题和Hystrix中描述的问题是一样的。Sentinel和Hystrix的原理是一样的:当调用链路中某个资源不稳定时,比如异常比例以超时形式增加时,限制对该资源的调用,快速请求失败,避免影响其他资源,最终产生雪崩效应。Fuse降级设计理念Sentinel和Hystrix在限制手段上采用了完全不同的方式。Hystrix通过线程池隔离依赖(对应我们概念中的资源)。这样做的好处是资源之间实现了最彻底的隔离。缺点是除了增加线程切换的成本外,还需要提前为每个资源分配线程池的大小。Sentinel针对这个问题采取了两种处理方式:限制并发线程数和资源池隔离的方式不同。Sentinel通过限制资源的并发线程数来减少不稳定资源对其他资源的影响。这样,不仅没有线程切换的损失,也不需要你预先分配线程池的大小。当资源变得不稳定时,比如响应时间变长,对资源的直接影响就是线程数会逐渐积累。在特定资源上的线程数量累积到一定数量后,将拒绝对该资源的新请求。累积的线程在完成任务后继续接收请求。通过响应时间降级资源除了控制并发线程数,Sentinel还可以通过响应时间快速降级不稳定的资源。当依赖资源的响应时间过长时,将直接拒绝对该资源的所有访问,并在指定的时间窗口过后才恢复。系统负载保护Sentinel还提供了系统维度的自适应保护能力。防止雪崩是系统保护的重要组成部分。当系统负载较高时,如果请求不断进入,可能会导致系统崩溃,无法响应。在集群环境下,网络负载均衡会将本应由本机承载的流量转发给其他机器。如果此时其他机器也处于边缘状态,增加的流量会导致这台机器崩溃,最终导致整个集群不可用。针对这种情况,Sentinel提供了相应的保护机制,在系统的入口流量和系统的负载之间取得平衡,保证系统在能力范围内处理最多的请求。Sentinel是如何工作的Sentinel的主要工作机制如下:为主流框架提供适配或显示API来定义需要保护的资源,并为资源的实时统计和调用链接分析提供便利。流量根据预设规则结合资源的实时统计信息进行控制。同时,Sentinel提供了一个开放的接口,方便您定义和更改规则。Sentinel提供实时监控系统,让您快速了解当前系统状态。Sentinel控制台设置1.首先我们需要去官网下载jar包https://github.com/alibaba/Sentinel/releases2.打开jar包所在目录,打开命令行window3.启动注意:启动Sentinel控制台需要JDK版本为1.8及以上。java-Dserver.port=8080-Dcsp.sentinel.dashboard.server=localhost:8080-Dproject.name=sentinel-dashboard-jarsentinel-dashboard-1.8.1.jar说明其中-Dserver.port=8080用于指定Sentinel控制站端口为8080,如果下载了其他版本的jar包,请将命令sentinel-dashboard-1.8.1.jar替换成你的jar包名4.sentinel.dashboard是一个springboot项目,可以看到项目已经在8080端口启动。5.在浏览器中输入url:localhost:8080进入主页面。6.登录成功后如下图