Sentinel:分布式系统的流量防卫兵 | Spring Cloud 19
一、Sentinel 是什么?
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel
以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应过载保护、热点流量防护等多个维度保护服务的稳定性。
Sentinel
具有以下特征:
- 丰富的应用场景:
Sentinel
承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。 - 完备的实时监控:
Sentinel
同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。 - 广泛的开源生态:
Sentinel
提供开箱即用的与其它开源框架/库的整合模块,例如与Spring Cloud
、Apache Dubbo
、gRPC
、Quarkus
的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入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
里面描述的问题是一样的。
Sentinel
和 Hystrix
的原则是一致的:当调用链路中某个资源出现不稳定,例如,表现为 timeout
,异常比例升高的时候,则对这个资源的调用进行限制,并让请求快速失败,避免影响到其它的资源,最终产生雪崩的效果。
3.2.2 熔断降级设计理念
在限制的手段上,Sentinel
和 Hystrix
采取了完全不一样的方法。
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相关推荐
- 介绍 spring Alibaba Sentinel: 分布式系统的流量防卫兵
目录 一.Sentinel 是什么? 二.Sentinel 具有特征 三.下载和安装 一.Sentinel 是什么? Sentinel 是分布式系统的流量防卫兵,Sentinel 以流量为切入点,从流 ...
- Sentinel: 分布式系统的流量防卫兵
前言 在 Spring Cloud 体系中,熔断降级我们会使用 Hystrix 框架,限流通常会在 Zuul 中进行处理,Zuul 中没有自带限流的功能,我们可以自己做限流或者集成第三方开源的限流框架 ...
- Sentinel: 分布式系统的流量防卫兵 1
Sentinel 是什么? 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性. Sentinel ...
- Sentinel 分布式系统的流量防卫兵
sentinel sentinel base 服务编写 关键名词解释 sentinel base 官网: https://github.com/alibaba/Sentinel https://git ...
- SpringCloud(十二)SpringCloudAlibaba Sentinel 分布式系统的流量防卫兵
文章目录 一.Sentinel是什么? 1.1 Sentinel 具有 以下特性 二.Sentinel 使用 2.1 Sentinel 安装. 2.2 创建 `sgg-alibaba-sentinel ...
- sentinel分布式系统的流量防卫兵
首先在根目录下开启cmd黑窗口启用jar文件 java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproj ...
- 分布式系统的流量防卫兵Sentinel-入门指南
1.介绍 欢迎来到 Sentinel 的世界!这篇新手指南将指引您快速入门 Sentinel. Sentinel: 分布式系统的流量防卫兵 1.1 Sentinel 是什么? 随着微服务的流行,服务和 ...
- 3 - 分布式系统的流量防卫兵:Sentinel
Java工程师的进阶之旅 学习 SpringCloud2 这一篇就够了 1 - SpringCloud Alibaba 介绍 2 - 服务注册与配置中心:Nacos 3 - 分布式系统的流量防卫兵:S ...
- 详解sentinel:分布式系统的流量防卫兵
目录 sentinel是什么 sentinel具有以下特征 丰富的应用场景 完备的实时监控 广泛的开源生态 完善的SPI扩展点 sentinel的主要特性 下载安装 控制台 应用接入 pom文件 ap ...
最新文章
- 算法笔记--单调队列优化dp
- 一键生成CSDN文章的思维导图目录
- 可能会用到的弹出框用法
- scanf函数和cin的区别、类的数组、C++排序函数
- Nhibernate 3.0 cookbook学习笔记 配置与架构
- kafka一键启动集群
- android 连接指定wifi
- java溢出怎么处理_java数据溢出怎么处理?
- 房地产企业的客户细分战略
- 2018大华软件大赛模拟赛第4题 (某股票操盘手账户里有N支股票,股价互不等)
- web安全day40:最新版OpenVAS的安装配置
- python---numpy简单用法
- 【Python】TX云服务器下CentOS+Python3+Nginx+uwsgi+Bottle搭建Web服务
- 提高github下载速度的方法
- 30天自制操作系统——第二十四天增加命令行窗口
- Java语言对于大数据而言是什么样的存在?
- 帕斯卡三角形题解(Python代码实现)
- surfer画等值线
- 利用IP地址定位来停止钓鱼威胁
- Springboot集成使用swagger2
热门文章
- VUE mixins使用
- Android 驱动开发系列二
- win10上启用MOV文件缩略图显示 - K-Lite Mega Codec Pack
- 《挂出个大侠》12.17上线链游玩家|百种武学、探索江湖
- java oncreate_Android(java)学习笔记112:Activity中的onCreate()方法分析
- 分治法 第2关:求一组数据的和
- Android中级篇之百度地图SDK v3.5.0-基础地图[图解百度地图基础教程]
- 进程线程协程素质三连
- [Hyper-v]删除系统保留分区,修复克隆win7/win8虚拟磁盘后无法引导问题
- 7月30日科技联播:2018年全国电子竞技公开赛敲定:总决赛奖金89万 ,阿里安全的机器TimePlayer人很“变态”?...