阿里出品的Sentinel到底是个什么玩意?

系统 Linux
Sentinel是阿里开源的项目,定位为面向分布式服务架构的高可用流量控制组件。主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。

 Sentinel简介


Sentinel是阿里开源的项目,定位为面向分布式服务架构的高可用流量控制组件。主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。

Sentinel 介绍

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 应运而生。

Sentinel 开发人员介绍

吃水不忘挖井人,感谢这些大佬


Sentinel 的主要特性


Sentinel 分为两个部分:

  • 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
  • 控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。

Sentinel 基本概念

资源

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

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

规则

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

Sentinel 功能和设计理念


熔断降级

什么是熔断降级

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


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

熔断降级设计理念

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

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

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

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

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

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

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

系统负载保护

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

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

Sentinel 是如何工作的

Sentinel 的主要工作机制如下:

  • 对主流框架提供适配或者显示的 API,来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析。
  • 根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,Sentinel 提供开放的接口,方便您定义及改变规则。
  • Sentinel 提供实时的监控系统,方便您快速了解目前系统的状态。

Sentinel控制台搭建

1.首先我们需要前往官网下载jar包

https://github.com/alibaba/Sentinel/releases


2.打开jar包所在目录,并且打开命令行窗口


3.启动

注意:启动 Sentinel 控制台需要 JDK 版本为 1.8 及以上版本。

  1. java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-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.登录成功以后如下图所示


 

责任编辑:姜华 来源: 今日Java
相关推荐

2012-02-13 15:50:59

2010-06-29 13:39:26

Eclipse什么玩意儿

2010-06-28 15:58:45

EclipseJavaIDE

2010-07-02 10:10:09

Eclipse

2010-07-05 15:56:01

EclipseRCPECF

2011-11-21 10:25:29

iCloud

2021-12-13 19:57:05

JNDIJava开发

2021-07-29 06:56:36

分布式系统脑裂

2020-10-29 07:03:56

Docker容器存储

2021-01-29 12:24:22

电脑电子计算机

2020-10-25 20:05:29

Pythonyield开发

2022-02-16 20:04:08

容器KubernetesShim

2024-07-03 12:04:42

C++this​

2021-01-08 09:48:18

Pythonname变量

2021-03-06 09:18:51

JS闭包函数

2022-04-10 19:26:07

TypeScript类型语法

2024-02-07 12:35:00

React并发模式concurrent

2011-12-28 09:53:18

HTML 5

2013-01-10 10:54:57

无线网络WLANWi-Fi

2021-12-16 15:11:59

Facebook天秤币加密货币
点赞
收藏

51CTO技术栈公众号