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

SpringCloudAlibaba——Sentinel分布式系统的流量防卫兵 目录一、介绍二、控制台三、客户端3.1 引入JAR包3.2 定义规则3.3 配置启动参数3.4 启动客户端 一、介绍 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel 分为两个部分: 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。 控制台(Dashboard)基于 Sprin 阅读详情
由于Netflflix中多项开源产品已进入维护阶段,不再开发新的版本,就目前来看是没有什么问题的。但是从长远角度
出发,我们还是需要考虑是否有可替代产品使用。比如本文中要介绍的Alibaba Sentinel就是一款高性能且轻量级
的==流量控制,熔断降级==可替换方案。
Sentinel官网: http://github.com/alibaba/Sentinel
HyStrix目前状态:
官网: http://github.com/Netflflix/Hystrix
1. 学习目标2. Sentinel是什么
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降
级、系统负载保护等多个维度保护服务的稳定性。
Sentinel 具有以下特征:
丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控
制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数
据,甚至 500 台以下规模的集群的汇总运行情况。
广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、
gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制
逻辑。例如定制规则管理、适配动态数据源等。
Sentinel 的主要特性:Sentinel 的开源生态:2018年
Sentinel 分为两个部分:
核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring
Cloud 等框架也有较好的支持。【客户端】
控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。
[服务端]
3. Sentinel的核心
Sentinel的使用可以分为两个部分:核心库(Java客户端)∶不依赖任何框架/库,能够运行于Java 7及以上的版本的运行时环境,同时对Dubbo /
Spring Cloud等框架也有较好的支持(见主流框架适配)。
控制台(Dashboard) :控制台主要负责管理推送规则、监控、集群限流分配管理、机器发现等。
4. Sentinel的控制台
Sentinel提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、监控(单机和集群),规则管理和推送
的功能。
官方文档: https://github.com/alibaba/Sentinel/wiki/%E6%8E%A7%E5%88%B6%E5%8F%B0
4.1 获取控制台
您可以从 release 页面 下载最新版本的控制台 jar 包。
您也可以从最新版本的源码自行构建 Sentinel 控制台:
下载 控制台 工程
使用以下命令将代码打包成一个 fat jar: mvn clean package
4.2 启动控制台
注意:启动 Sentinel 控制台需要 JDK 版本为 1.8 及以上版本。
使用如下命令启动控制台:
其中 -Dserver.port=8080 用于指定 Sentinel 控制台端口为 8080 。
从 Sentinel 1.6.0 起,Sentinel 控制台引入基本的登录功能,默认用户名和密码都是 sentinel 。可以参考 鉴权模块
文档 配置用户名和密码。
注:若您的应用为 Spring Boot 或 Spring Cloud 应用,您可以通过 Spring 配置文件来指定配置,详情请参
考 Spring Cloud Alibaba Sentinel 文档。
5. 项目环境
shop-product : 商品服务,提供了 /product/fifindById/{id}
shop-order-rest : 订单服务,基于 Ribbon 通过 RestTemplate 调用商品服务。
shop-order-feign :订单服务,基于 Feign 通过声明式服务调用商品服务。
6. 客户端接入控制台
控制台启动后,客户端需要按照如下步骤接入到控制台:
添加依赖
定义资源
定义规则
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar
sentinel-dashboard.jar先把可能需要保护的资源定义好,之后再配置规则。也可以理解为,只要有了资源,我们就可以在任何时候灵活地
定义各种流量控制规则。在编码的时候,只需要考虑这个代码是否需要保护,如果需要保护,就将之定义为一个资
源
二、在根目录下开启cmd黑窗口启用jar文件

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar xxxxx.jar

加入依赖
<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
配置文件
客户端需要启动Transport 模块来与Sentinel控制台进行通信。
shop-order 的application.yml
spring:
   cloud:
     sentinel:
        transport:
                port: 8719
                dashboard: localhost:8080
定义资源
资源是Sentinel中的核心概念之一。我们说的资源,可以是任何东西,服务,服务里的方法,甚至是一段代码。最
常用的资源是我们代码中的Java方法。Sentinel提供了 @SentinelResource 注解用于定义资源,并提供了AspectJ的
扩展用于自动定义资源、处理 BlockException 等。
package com.slj.order.service.Impl;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.slj.entry.Product;
import com.slj.order.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;


/**
 * @program: springcloud-parent
 * @description:
 * @author: 孙路军
 * @create: 2021-07-15 10:39
 **/

@Service
public class ProductServiceImpl_blank implements ProductService {

    @Autowired
    private RestTemplate restTemplate;

    @Override
    @SentinelResource(value = "findByid", blockHandler = "selectByIdBlock", fallback = "selectByIdBack")
    public Product findByid(Integer pid) {
            if(pid==1){
                    throw new RuntimeException("pid不能为1");
                    }
        return restTemplate.getForObject("http://shop-product/product/findById?pid=" + pid, Product.class);
    }


    public Product selectByIdBlock(Integer pid,BlockException e){
        Product product=new Product();
        product.setPid(pid);
        product.setPname("熔断");
        return product;
    }

    public Product selectByIdBack(Integer pid,Throwable e){
        Product product=new Product();
        product.setPid(pid);
        product.setPname("异常");
        return product;
    }
}
测试

 

 

 点击新增之后,继续访问页面同时点击多次就会出现熔断,这个垄断是我们在后台写的
blockHandlerMethod方法里

 

 降级是通常是为异常设置的,设置好降级之后,一般我们要删除流控设置的东西。要不然时间间隔效果看不出来。设置id为1的时候出现异常 

 多次访问id为1就会出现下图所示

 设置id为2的不是异常,没过间隔30秒访问id为2也会出现

 过了30秒之后才会成功访问

 

动态规则扩展
SentinelProperties内部提供了TreeMap类型的 datasource属性用于配置数据源信息。支持:·
文件配置规
Nacos配置规则
ZooKeeper配置规则
Apollo配置规则
Redis配置规则
6.3.3.1.文件配置规则
Sentinel支持通过本地文件加载规则配置,使用方式如下(限流规则作为演示)︰

spring:
cloud:
sentinel:
datasource:
ds1:
fifile:
fifile: classpath:flflowRule.json
data-type: json
rule-type: flflow
flflowRule.json对应 com.alibaba.csp .sentinel.slots.block .RuleConstant各属性
[
{
"resource":"fifindByid",
"count":1,
"grade":1,
"limitApp":"default",
"strategy":0,
"controlBehavior":0
}
]
. RestTemplate支持
Spring Cloud Alibaba Sentinel支持对RestTemplate调用的服务进行服务保护。需要在构造RestTemplate Bean时
添加SentinelRestTemplate注解。

 创建util类ExceptionUtil

package com.slj.order.util;

import com.alibaba.cloud.sentinel.rest.SentinelClientHttpResponse;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.fastjson.JSON;
import com.slj.entry.Product;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component;

/**
 * @program: springcloud-parent
 * @description: gongjulei
 * @author: 孙路军
 * @create: 2021-07-15 16:44
 **/
@Component
public class ExceptionUtil {
    public static ClientHttpResponse fallback(HttpRequest request, byte[] body, ClientHttpRequestExecution execution, BlockException exception) {
        return new SentinelClientHttpResponse(JSON.toJSONString(new Product(1,"服务流量控制-兜底的数据",5555.0,1000)));
    }
    public static ClientHttpResponse handlerException(HttpRequest request, byte[] body, ClientHttpRequestExecution execution, BlockException exception) {
        return new SentinelClientHttpResponse(JSON.toJSONString(new Product(1,"服务熔断降级控制-兜底的数据",6666.0,1000)));

    }
}
在主启动类上加上注解,方法名要和创建的 ExceptionUti的方法名字一致

 

 

 openfeign的支持

在配置里多加3行代码,是openfeign让sentinel管理所需要的

 添加依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
开启Sentinel
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080
feign:
sentinel:
enabled: true

创建一个实现类继承所需要的openfeign的方法

 openfeign的接口

 

实现类

 

  运行成功后如下图所示

 

当设置降级或者流控之后进行操作如下图所示

 

Virtuoso ADE Explorer实战技巧:从基础操作到高级仿真 本文深入解析了Virtuoso ADE Explorer在模拟电路仿真中的核心价值与实战技巧。作为Cadence平台的专业工具,它专为高效、系统化的设计空间探索而生,能大幅提升PVT验证、参数扫描和蒙特卡洛分析的效率。文章从基础界面操作、并行仿真管理,到高级的参数扫描、数据报告生成及蒙特卡洛结果深度剖析,提供了全面的避坑指南与工作流优化建议,帮助工程师从重复劳动中解放,专注于电路设计与性能优化。 阅读详情

相关推荐

LDPC码介绍:基础&编码&译码

本博客介绍了LDPC码的基本原理,其中包括校验矩阵的构造、Tanner 图和编译码的基础知识。

渺小的颗星的博客 4310

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

官方文档Sentinel 是什么?随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应过载保护、热点流量防护等多个维度保护服务的稳定性。丰富的应用场景:Sentinel 承接了阿里巴巴近 10年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控:Sentinel 同时提供实时的监控功能。

weixin_43811057的博客 1524

从零到一:手把手教你用STM32和WiFi打造智能温室大棚的物联网核心

本文详细介绍了如何利用STM32单片机和WiFi技术从零构建智能温室大棚的物联网核心系统。内容涵盖硬件选型、传感器集成、低功耗WiFi通信、自动控制逻辑及OLED显示,提供实际部署中的优化技巧和故障排查方案,帮助开发者打造稳定可靠的农业自动化解决方案。

c7d8e的博客 180

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

1.介绍 欢迎来到 Sentinel 的世界!这篇新手指南将指引您快速入门 Sentinel。 Sentinel: 分布式系统的流量防卫兵 1.1 Sentinel 是什么? 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 丰富的应用场景:Sentinel承接了阿里巴巴近 10 年的双十...

东子的博客 细节决定成败,点滴铸就辉煌。 6904

iOS 取证窍门:为什么要先从 Recovery 恢复模式开始?

未记录的 DFU 代表“设备固件升级”。与专为普通用户设计的恢复模式不同,DFU 模式从来都不是为公众设计的。Apple 知识库中的任何地方都没有关于 DFU 的文档。进入 DFU 的方法主要是通过按下、按住和释放按钮的复杂操作序列,并具有精确的时间限制。在多个步骤中的任何一个步骤中,如果时间错误,都会导致重新启动设备,而不是将其切换到 DFU。另外,设备屏幕上也没有 DFU 模式的指示。如果设备成功切换到 DFU,显示屏将保持黑色。即使对于专家来说,进入 DFU 模式也可能很困难。恢复模式是最容易解释的。

2302_82041293的博客 1198

通过JLink下载实现工控MCU批量烧录实战案例

利用JLink下载工具实现高效稳定的工控MCU批量烧录,提升产线效率。案例详细解析了脚本配置与自动化流程,突出jlink下载的可靠性和可扩展性,适用于大规模嵌入式部署场景。

weixin_30205153的博客 814

深入浅出Sentinel:分布式系统的流量防卫兵

Sentinel是阿里巴巴开源的一款面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从流量控制熔断降级系统自适应保护等多个维度来帮助开发者保障微服务的稳定性。丰富的应用场景:覆盖了微服务的多种不稳定场景实时的监控:提供实时的监控数据和控制面板易于扩展:支持多种扩展接口和SPI多样化的规则配置:支持通过文件、配置中心等多种方式配置规则Sentinel作为一款功能强大且易于使用的流量控制组件,已经成为微服务架构中不可或缺的稳定性保障工具。

秃头小兴的博客 1370

SpringCloud2025+SpringBoot3.5.0+gateway+webflux子服务路由报503

本来昨天就应该也记录下,免得忘记的,但是有点晚了,酒没写,真的是被坑惨了。当然这也是追求最新的代价,也是对新技术、老知识点的重温。依赖更粒度让架构的知识面更高,需要非常清楚另外说不定是有新的负载均衡要出现了,就想当初loadbalancer取代Ribbon一样好了,真是坑了半夜,昨晚都没有写,今天才复盘,希望能帮到大家,让更多在坑里的技术人爬出来。

zwrlj527的专栏 1998

【微服务】- 分布式系统的流量防卫兵 - sentinel

Sentinel是一个轻量级的开源框架,它提供了实时监控、流量控制、熔断降级等功能,可以在微服务架构中用于保护服务的稳定性和可靠性。在Spring Cloud中,可以通过集成Sentinel来提供服务治理和容错的能力。

qq_43843951的博客 22万+

把 ABAP writable CDS view entity 讲透:从只读建模到可写模型的 ABAP CDS 新能力

摘要:SAP引入的writable CDS view entity突破了传统CDS视图只读的限制,允许通过ABAP SQL直接进行数据修改。该特性通过WRITABLE关键字定义,使CDS视图成为与数据库表同等级别的可写对象。其核心价值在于为数据集成、中间层同步等场景提供结构化写入入口,但需注意不应绕过业务规则。最佳实践建议保持底层表结构简单映射,避免复杂变形。这一特性标志着CDS从单纯消费模型向双向数据交互能力的演进,为ABAP开发提供了新的数据边界设计思路。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1313

飞牛NAS1.1.19更新后SSH连不上?两步快速恢复连接

飞牛NAS1.1.19版本更新后SSH无法连接😟,实则是官方安全策略升级默认关闭了该服务,本文分享两步实操配置恢复SSH连接💻,还同步了官方的设备安全配置建议,帮助用户兼顾使用与设备防护🔒。

XiaoqiangClub的博客 2105

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

Sentinel 是一个面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来保障服务的稳定性。在代码中定义需要保护的资源。可以通过注解或代码的方式定义资源。// 业务逻辑​// 处理限流或熔断的逻辑Sentinel 作为一款轻量级的流量控制组件,能够帮助开发者有效地保护分布式系统的稳定性。通过流量控制、熔断降级、系统负载保护等功能,Sentinel 能够应对各种复杂的流量场景,保障系统的高可用性。

KBkongbaiKB的博客 981

【AI就业干货12】机器学习八股文速通:从损失函数到 XGBoost,一篇带走全部面试点

本文总结了机器学习面试的核心知识点,涵盖监督与非监督学习、线性模型、正则化、决策树、KNN/K-means、SVM、集成学习、梯度下降、评估指标、特征工程、降维、概率模型等内容。重点包括:损失函数选择(MSE/交叉熵)、正则化作用(L1稀疏/L2平滑)、决策树划分准则、集成学习方法(Bagging降方差/Boosting降偏差)、XGBoost优化等。提供了30秒速记口诀和XGBoost代码示例,帮助快速掌握面试要点。全文采用公式+代码+口诀的形式,系统梳理了机器学习从理论到实践的常见考点。

m0_51738372的博客 731

SCA Sentinel 分布式系统的流量防卫兵,多线程面试题及答案

Sentinel 的开源⽣态: Sentinel 部署 上面说过,Sentinel 分为核心库和仪表盘。核心库是在我们的服务中引入依赖。仪表盘就可以来监控管理。 仪表盘 我们先来部署仪表盘,这个官网提供了可直接运行的jar 官网: 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》 【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享 https://github.com/alibaba/Sentinel/releases 我这.

m0_54865014的博客 252

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Spring Cloud Alibaba Sentinel: 分布式系统的流量防卫兵

Sentinel 以流量为切入点,为微服务提供流量控制、流量路由、熔断降级、系统自适应过载保护、热点流量防护等多个维度的保护服务,被称为分布式系统的流量防卫兵。

lucky_fd的博客 1478

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

Sentinel 是什么?官网:https://github.com/alibaba/Sentinel/wiki/介绍 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel 具有以下特征: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促...

吴振照 996

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

秃了也弱了 2228

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

在sring cloud中整合Sentinel的组件

有趣的灵魂万里挑一,好看的皮囊你又没有 870

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

sentinelsentinel base sentinel base 官网: https://github.com/alibaba/Sentinel https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D 是什么? 是一款优秀的限流,降级,熔断的框架。 Sentinel 以流量为切入点,从流量控制、熔断降级、 系统负载保护等多个维度保护服务的稳定性。 组成部分 核心库(Java 客户端)不依赖任何框架/库, 能够运行于所有 Java 运行时

while(True): print('adorable') 479

Spring Cloud Alibaba入门之分布式系统的流量防卫兵Sentinel

分布式系统的流量防卫兵-Sentinel 官方文档地址: 《Sentinel: 分布式系统的流量防卫兵》   Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。   Sentinel 具有以下特征: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以

向心行者 1418
上一篇: Sleuth--链路追踪和Zipkin的集成和Nacos Config--服务配置
Slj0604
博客等级 码龄5年 7粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值