一、Sentinel 是什么?

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应过载保护、热点流量防护等多个维度保护服务的稳定性。

Sentinel 具有以下特征:

  • 丰富的应用场景Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
  • 完备的实时监控Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring CloudApache DubbogRPCQuarkus 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。同时 Sentinel 提供 Java/Go/C++ 等多语言的原生实现。
  • 完善的 SPI 扩展机制Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

Sentinel 的主要特性:

Sentinel 的开源生态:

Sentinel 分为两个部分:

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

Sentinel 的主要工作机制如下:

  • 对主流框架提供适配或者显式的 API,来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析。

  • 根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,Sentinel 提供开放的接口,方便您定义及改变规则。

  • Sentinel 提供实时的监控系统,方便您快速了解目前系统的状态。

二、Sentinel 基本概念

  • 资源

资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务、或由应用程序调用的其它应用提供的服务、甚至可以是一段代码

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

  • 规则

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

三、Sentinel 功能和设计理念

3.1 流量控制

流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状,如下图所示:

流量控制有以下几个角度:

  • 资源的调用关系,例如:资源的调用链路,资源和资源之间的关系;
  • 运行指标,例如 QPS、线程池、系统负载等;
  • 控制的效果,例如直接限流、冷启动、排队等。

Sentinel 的设计理念是让您自由选择控制的角度,并进行灵活组合,从而达到想要的效果。

3.2 熔断降级

3.2.1 什么是熔断降级

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

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

3.2.2 熔断降级设计理念

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

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

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

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

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

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

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

3.3 系统负载保护

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

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

以上内容引自整理来源:

https://sentinelguard.io/zh-cn/docs/introduction.html
https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5

Sentinel:分布式系统的流量防卫兵 | Spring Cloud 19相关推荐

  1. 介绍 spring Alibaba Sentinel: 分布式系统的流量防卫兵

    目录 一.Sentinel 是什么? 二.Sentinel 具有特征 三.下载和安装 一.Sentinel 是什么? Sentinel 是分布式系统的流量防卫兵,Sentinel 以流量为切入点,从流 ...

  2. Sentinel: 分布式系统的流量防卫兵

    前言 在 Spring Cloud 体系中,熔断降级我们会使用 Hystrix 框架,限流通常会在 Zuul 中进行处理,Zuul 中没有自带限流的功能,我们可以自己做限流或者集成第三方开源的限流框架 ...

  3. Sentinel: 分布式系统的流量防卫兵 1

    Sentinel 是什么? 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性. Sentinel ...

  4. Sentinel 分布式系统的流量防卫兵

    sentinel sentinel base 服务编写 关键名词解释 sentinel base 官网: https://github.com/alibaba/Sentinel https://git ...

  5. SpringCloud(十二)SpringCloudAlibaba Sentinel 分布式系统的流量防卫兵

    文章目录 一.Sentinel是什么? 1.1 Sentinel 具有 以下特性 二.Sentinel 使用 2.1 Sentinel 安装. 2.2 创建 `sgg-alibaba-sentinel ...

  6. sentinel分布式系统的流量防卫兵

    首先在根目录下开启cmd黑窗口启用jar文件 java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproj ...

  7. 分布式系统的流量防卫兵Sentinel-入门指南

    1.介绍 欢迎来到 Sentinel 的世界!这篇新手指南将指引您快速入门 Sentinel. Sentinel: 分布式系统的流量防卫兵 1.1 Sentinel 是什么? 随着微服务的流行,服务和 ...

  8. 3 - 分布式系统的流量防卫兵:Sentinel

    Java工程师的进阶之旅 学习 SpringCloud2 这一篇就够了 1 - SpringCloud Alibaba 介绍 2 - 服务注册与配置中心:Nacos 3 - 分布式系统的流量防卫兵:S ...

  9. 详解sentinel:分布式系统的流量防卫兵

    目录 sentinel是什么 sentinel具有以下特征 丰富的应用场景 完备的实时监控 广泛的开源生态 完善的SPI扩展点 sentinel的主要特性 下载安装 控制台 应用接入 pom文件 ap ...

最新文章

  1. 算法笔记--单调队列优化dp
  2. 一键生成CSDN文章的思维导图目录
  3. 可能会用到的弹出框用法
  4. scanf函数和cin的区别、类的数组、C++排序函数
  5. Nhibernate 3.0 cookbook学习笔记 配置与架构
  6. kafka一键启动集群
  7. android 连接指定wifi
  8. java溢出怎么处理_java数据溢出怎么处理?
  9. 房地产企业的客户细分战略
  10. 2018大华软件大赛模拟赛第4题 (某股票操盘手账户里有N支股票,股价互不等)
  11. web安全day40:最新版OpenVAS的安装配置
  12. python---numpy简单用法
  13. 【Python】TX云服务器下CentOS+Python3+Nginx+uwsgi+Bottle搭建Web服务
  14. 提高github下载速度的方法
  15. 30天自制操作系统——第二十四天增加命令行窗口
  16. Java语言对于大数据而言是什么样的存在?
  17. 帕斯卡三角形题解(Python代码实现)
  18. surfer画等值线
  19. 利用IP地址定位来停止钓鱼威胁
  20. Springboot集成使用swagger2

热门文章

  1. VUE mixins使用
  2. Android 驱动开发系列二
  3. win10上启用MOV文件缩略图显示 - K-Lite Mega Codec Pack
  4. 《挂出个大侠》12.17上线链游玩家|百种武学、探索江湖
  5. java oncreate_Android(java)学习笔记112:Activity中的onCreate()方法分析
  6. 分治法 第2关:求一组数据的和
  7. Android中级篇之百度地图SDK v3.5.0-基础地图[图解百度地图基础教程]
  8. 进程线程协程素质三连
  9. [Hyper-v]删除系统保留分区,修复克隆win7/win8虚拟磁盘后无法引导问题
  10. 7月30日科技联播:2018年全国电子竞技公开赛敲定:总决赛奖金89万 ,阿里安全的机器TimePlayer人很“变态”?...